ADS Kommunikation

mkersch

Well-known member
Beiträge
111
Punkte Reaktionen
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
 

MasterOhh

Well-known member
Beiträge
1.539
Punkte Reaktionen
370
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.
 
OP
M

mkersch

Well-known member
Beiträge
111
Punkte Reaktionen
1
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
 
Oben