Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: OPC Daten schreiben und lesen

  1. #1
    Registriert seit
    20.10.2004
    Beiträge
    650
    Danke
    5
    Erhielt 26 Danke für 26 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Morgen allerseits

    ich hätte da mal eine frage an euch opc spezis
    ich habe eine komminikation für excel geschrieben die eigentlich funktioniert wenn ich zahlen schreibe
    ab denn zeitpunkt wo ich Strings schreibe gehts nicht mehr ( Laufzeitfehler / Automatesierungsfehler / unbekannter fehler )

    ich weiss das ich denn wald voller bäume nicht mehr sehe
    wehr kann mir mal einen kleinen tipp geben

    Einlesen kann ich alles auch die Strings


    so hier der code

    Code:
    Dim S_NODE As String
     
     S_NODE = "[KZW_DO2]"
     'On Error GoTo ErrorHandler
    'Exit Sub
     
     
     Set ServerObj = CreateObject("OPC.Automation.1") ' Server Objekt erzeugen
     ServerObj.Connect "RSLinx OPC Server"              ' Server connect erzeugen
     Set Groupobj = ServerObj.OPCGroups.Add("CLX_Schreiben")
     Groupobj.IsActive = True                           ' Aktivieren
     
     i_nummer = UserForm1.CB_Anummer.Value
     Set ItemObj = Groupobj.OPCItems.AddItem(S_NODE & "ANTRIEBE[" & i_nummer & "].LFZ", 1)
                   Groupobj.OPCItems.AddItem S_NODE & "ANTRIEBE[" & i_nummer & "].EZV", 1
                   Groupobj.OPCItems.AddItem S_NODE & "ANTRIEBE[" & i_nummer & "].ZEIT", 1
                   Groupobj.OPCItems.AddItem S_NODE & "ANTRIEBE[" & i_nummer & "].DZWZ", 1
                   Groupobj.OPCItems.AddItem S_NODE & "ANTRIEBE[" & i_nummer & "].INenn", 1
                   Groupobj.OPCItems.AddItem S_NODE & "ANTRIEBE[" & i_nummer & "].GPNR", 1
                   Groupobj.OPCItems.AddItem S_NODE & "ANTRIEBE[" & i_nummer & "].Motornr", 1
                   Groupobj.OPCItems.AddItem S_NODE & "ANTRIEBE[" & i_nummer & "].bezeich1", 1
                    
                    Groupobj.OPCItems.Item(1).Write (UserForm1.tb_lvz.Value)
                    Groupobj.OPCItems.Item(2).Write (UserForm1.tb_evz.Value)
                    Groupobj.OPCItems.Item(3).Write (UserForm1.tb_zeit.Value)
                    Groupobj.OPCItems.Item(4).Write (UserForm1.tb_dzwz.Value)
                    Groupobj.OPCItems.Item(5).Write (UserForm1.tb_inenn.Value)
                    Groupobj.OPCItems.Item(6).Write (UserForm1.tb_gnummer.Value)
                   Groupobj.OPCItems.Item(7).Write (UserForm1.TB_Name.Value) ' die sind die bösen strings
                   Groupobj.OPCItems.Item(8).Write (UserForm1.tb_nummer)
                    
        
    ErrorHandler:
        On Error Resume Next
        Set ItemObj = Nothing
        ServerObj.OPCGroups.RemoveAll
        Set Groupobj = Nothing
        ServerObj.Disconnect
        Set ServerObj = Nothing
    Exit Sub
    End Sub
    Ja ich weis das es keine Siemens Steuerung ist.
    Zitieren Zitieren OPC Daten schreiben und lesen  

  2. #2
    Registriert seit
    08.08.2007
    Ort
    Süd-Süd-Deutschland (CH)
    Beiträge
    220
    Danke
    29
    Erhielt 27 Danke für 21 Beiträge

    Standard

    Bin nicht sicher wie VBA reagiert..... aber es wär nen Versuch wert es mit....

    UserForm1.TB_Name.Text

    zu versuchen......

    (Ist nur eine Idee, habs selber noch nie gemacht....)

    Die üblichen Verdächtigen sind natürlich auch die Variabeln auf der Steuerung (Auch als String deklariert? Länge beachtet? usw...)
    Geändert von Schnick und Schnack (08.02.2012 um 14:38 Uhr)
    "Hätte ich das gewusst, hätte ich einen anderen Beruf gelernt." - "Hast Du gelernt diese Scheisse?"
    (Zitat aus Knockin' on Heaven's Door)

    "Kommentare? Wieso? Steht doch alles im Code..!"

    Avatar erstellt auf www.sp-studio.de

  3. #3
    Registriert seit
    11.07.2004
    Beiträge
    1.597
    Danke
    10
    Erhielt 213 Danke für 183 Beiträge

    Standard

    der Text den Du da schreiben willst ist aber schon ein "normaler" Text (1 Byte pro Zeichen)?

  4. #4
    Registriert seit
    20.10.2004
    Beiträge
    650
    Danke
    5
    Erhielt 26 Danke für 26 Beiträge

    Standard

    Zitat Zitat von Oberchefe Beitrag anzeigen
    der Text den Du da schreiben willst ist aber schon ein "normaler" Text (1 Byte pro Zeichen)?
    das wird glaub ich eine grundsatz diskussion was ist "normal"

    also was ich weiss und was ich seit jahren mache besteht ein string aus vielen char und das sollte dann 1 byte sein pro zeichen am schluss noch die endzeichen und fertig ist der string

    genau gesagt ist ein string aus .data -> denn zeichen plus endzeichen und .len der länge festgelegt
    normalerweise reicht es dann wenn ich auf die gesamt verabel zugreife

    Bin nicht sicher wie VBA reagiert..... aber es wär nen Versuch wert es mit....
    UserForm1.TB_Name.Text
    das punkt value stimmt

  5. #5
    Registriert seit
    22.02.2007
    Ort
    Sponheim
    Beiträge
    190
    Danke
    3
    Erhielt 10 Danke für 9 Beiträge

    Standard

    Prüf mal nach ob es sich wirklich um Ansi-Strings handelt, ich könnte mir vorstellen, dass Excel Unicode- oder Wide-Strings verwendet.
    Wie kann es sein, dass am Ende des Geldes noch Monat übrig ist?
    Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück!
    engbarth.es

  6. #6
    Registriert seit
    20.10.2004
    Beiträge
    650
    Danke
    5
    Erhielt 26 Danke für 26 Beiträge

    Standard

    Zitat Zitat von marcengbarth Beitrag anzeigen
    Prüf mal nach ob es sich wirklich um Ansi-Strings handelt, ich könnte mir vorstellen, dass Excel Unicode- oder Wide-Strings verwendet.
    mal eine dumme antwort dazu
    sieht die strings nicht gleich aus nur die codierung ist anders
    also müsste es doch egal sein

    zu meiner entschuldigung ich habs nicht gegoogelt wenn ich jetzt einen blödsinn gesprochen habe

    mfg

  7. #7
    Registriert seit
    22.02.2007
    Ort
    Sponheim
    Beiträge
    190
    Danke
    3
    Erhielt 10 Danke für 9 Beiträge

    Standard

    In einem Ansi-String hat ein 1 Zeichen eine länge von 1 Byte. In einem Unicode-String kann ein Zeichen eine Länge von 2-Byte oder auch 4-Byte haben.

    Der AnsiString "Test" hat die Länge von 4 Byte, der Unicode-String "Test" hat z.B. die Länge von 8 Byte und sieht dann so aus: 'T'#0'e'#0's'#0't'#0
    Wie kann es sein, dass am Ende des Geldes noch Monat übrig ist?
    Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück!
    engbarth.es

  8. #8
    Registriert seit
    20.10.2004
    Beiträge
    650
    Danke
    5
    Erhielt 26 Danke für 26 Beiträge

    Standard

    Guten Morgen

    Allso ihr habt recht VBA macht das mit denn strings anscheinend wirklich anders
    und zwar gibts da kein stringentzeichen sondern es wird am anfang des strings festgelegt wieviel zeichen das kommen

    und das tut anscheinend meiner api weh

    einer eine idee wie ich denn string richtig übergeben kann

  9. #9
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Ich weiß nicht wie VBA die Strings behandelt, ich kenne nur die Vorgehensweise von VB. Hier ist der String eigentlich ein Stringdescriptor der aus der Länge und einem Zeiger auf die Daten besteht. Wenn ein String (besser ein Array of Char) an eine Nicht-VB-Funktion übergeben werden muss, dann musst eich früher den Platz für die Daten erst anlegen und dann den Zeiger auf den Datenbereich übergeben. Dies konnte z. B. durch
    Code:
    Dim XYZ As String
    XYZ = Space$(128)
    TestFunc( ByVal XYZ )
    oder
    Code:
    Dim XYZ As String
    XYZ = "Dies ist nur ein Platzhalter"
    TestFunc( ByVal XYZ )
    geschehen. Es ist sicherzustellen, dass der Speicherplatz, in den die Funktion eventuell schreibt, acuh wirklich vorhanden ist. Sonst gibt es mehr oder weniger lustige Ergebnisse .
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  10. #10
    Registriert seit
    13.11.2011
    Beiträge
    48
    Danke
    7
    Erhielt 6 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von kpeter Beitrag anzeigen
    Guten Morgen

    Allso ihr habt recht VBA macht das mit denn strings anscheinend wirklich anders
    und zwar gibts da kein stringentzeichen sondern es wird am anfang des strings festgelegt wieviel zeichen das kommen

    und das tut anscheinend meiner api weh

    einer eine idee wie ich denn string richtig übergeben kann
    Moin,

    wichtig ist nur, dass wenn Du ein Char Array einer Variable übergibst, dass diese Variable auch groß genug ist,
    so dass es das Endzeichen mit aufnehmen kann.
    Wenn Du den Char Array als Literal einem Pointer übergibst, darfst Du nur lesen darauf zugreifen.
    Willst Du den Inhalt verändern, musst Du in eine Variable die genügend groß ist, umkopieren. Sonst gibt es einen Fehler.
    D.h. falls Du in C Programmierst. VBS oder VBA kümmert das nicht.


    Gruß
    Eleu

Ähnliche Themen

  1. Daten aus S7 lesen und schreiben
    Von pat125 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 01.11.2011, 19:35
  2. Antworten: 8
    Letzter Beitrag: 25.08.2008, 11:34
  3. Mit OPC Daten Bidirektional lesen und schreiben
    Von captainchaos666 im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 09.07.2008, 18:54
  4. Daten lesen/schreiben und verarbeiten
    Von Supervisor im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 02.05.2006, 08:08
  5. Antworten: 1
    Letzter Beitrag: 07.02.2006, 18:56

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •