ADS Kommunikation

mkersch

Level-1
Beiträge
111
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forenmitglieder

Mit dem folgenden Befehl schreibe ich aus einem PC-Programm (XBASE++) , mittels ADS Kommunikation, einen Wert in eine Stringvariable (Steuerung).

Variable:String(30);

// IDENT
// Handl über Variablenname holen
sVar := ".V_C_IDENT"
nErr := DllCall( "TCADSDLL.DLL" , DLL_STDCALL,"_AdsSyncReadWriteReq@28",@Addr, 0xF003, 0, 4, @nHandl, len(sVar), @sVar)
nHandlWert := bin2u(nHandl) // Empfang in Wert Wandeln
// Wert schreiben
sVar := V_C_IDENT // String 30
nErr := DllCall( "TCADSDLL.DLL" , DLL_STDCALL,"_AdsSyncWriteReq@20",@Addr, 0xF005,nHandlWert,len(sVar), @sVar)

Wenn ich jetzt '123456" in die Variable der Beckhoff-Steuerung schreibe steht auch '123456' drinnen.
Schreibe ich aber dann einen kurzen String z.B. 'abc' steht 'abc456' in der String Variable obwohl ich die Länge mittels len(sVar) richtig setze.

Was muss ich beachten ?

mfg.

mkersch
 
Sieht fast so aus als ob da die Terminierung deiner Strings fehlt. Wenn du nur 3 Zeichen sendest, werden ja auch nur die ersten 3 Zeichen im String überschrieben. Normalerweise wird das Ende eines Strings mit '\0' angezeigt. Bis dahin wird der String im Speicher gelesen, der Rest der danach kommt nicht mehr.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
MasterOhh vielen Dank für die Info.

Habe an meinen Sendestring sVar ==> ein Chr(0) angehängt (sVar := V_C_IDENT + chr(0))

Jetzt funktionierts !

Entspricht chr(0) ==> "\0" ?

mfg.

mkersch
 
Zurück
Oben