HEX String senden

stef486

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich bin noch relative unerfahren in der SPS Programmierung und habe ein kleines Problem.

Ich will mit einer Wago 750 über die RS485 750-653 einen HEX String senden.

Als Funktion benutze ich die SERIAL_INTERFACE mit der serial_interface*01.lib;

Wenn ich den so deklariere SendString: STRING := '$AA'; dann kommt an der Gegenstelle folgendes an AA 0D 0A

Wenn ich den so deklariere SendString: STRING := '$AA$AA'; dann kommt an der Gegenstelle folgendes an AA FD 0D 0A

Wie kann ich eine String senden, der sich aus mehreren HEX Zeichen zusammensetzt?

Gruß
Stefan
 
Die Deklaration STRING := '$AA$AA' ist schon richtig. Ich vermute, dass bei der seriellen Kommunikation irgendwas anderes schief gelaufen ist. AA AA wird gesendet und AA FD kommt an. Vielleicht ist nur 1 Byte der IO-Daten zum COM-Port verknüpft? Oder stimmen die Kommunikationsparameter nicht überein (Baudrate, Handshake o.ä.)?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

wenn ich mich recht erinnere verwendet das Interface einen
'Buffer of Bytes' und du must am Interfacebaustein die Anzahl der zu sendenden Bytes 'iBytes_To_Send' angeben.
Vielleicht steht der Wert bei dir auf 1.

Gruß Nitro
 
Ist doch gar nicht so falsch

Wenn ich den so deklariere SendString: STRING := '$AA'; dann kommt an der Gegenstelle folgendes an AA 0D 0A

Wenn ich den so deklariere SendString: STRING := '$AA$AA'; dann kommt an der Gegenstelle folgendes an AA FD 0D 0A

AA OD OA -> AA / Zeilenrücklauf / Zeilenvorschub

Offensichtlich wird das als Endeerkennung immer angehängt, läßt sich sicher irgendwo abstellen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ist doch gar nicht so falsch
Wenn man richtig hinschaut, dann wird man sehen, daß nicht das "0D 0A" das Problem ist, sondern '$AA$AA' -> "AA FD 0D 0A".
AA OD OA -> AA / Zeilenrücklauf / Zeilenvorschub
Das ist auch "gar nicht so falsch" - für einen Menschen, der lesen kann. Eine Maschine erwartet da aber doch schon ein korrektes "0D 0A".

Gruß
Harald
 
Hi,

habe heute eine frei konfigurierbare RS485 bekommen und habe etwas mit den Einstellungen gespielt. Hatte die falschen Schnittstelleneinstellungen.
danke für eure Hilfe.

Nun habe ich ein weiteres Problem ich muss für mein zu sendenden Code ne CRC bilden.
In C habe ich das Programm geschrieben und es funktioniert auch, nun bekomme ich aber die passende Syntax für ST nicht zusammen. Vielleicht kann mir einer von euch dabei helfen?

C Code---------------------------------------

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
unsigned int CRC_TAB[]={ /* CRC tab */
0x0000, 0x1021, 0x2042, 0x3063……………..
};
unsigned char Check_crc(unsigned char *ptr, unsigned char len)
{
unsigned int crc;
unsigned char dat;
crc=0;
while(len--!=0)
{
dat=crc>>8; /* */
crc<<=8; /* */
crc^=CRC_TAB[dat^*ptr]; /* */
ptr++;
}
dat=crc;
if((*ptr==(crc>>8))&&(*(ptr+1)==dat))
return(1);
else
return(0);
}
void Pack_crc(unsigned char *ptr, unsigned char len)
{
unsigned int crc;
unsigned char dat;
crc=0;
while(len--!=0)
{
dat=crc>>8; /* */
crc<<=8; /* */
crc^=CRC_TAB[dat^*ptr]; /* */
ptr++;
}
*ptr=crc>>8;
ptr++;
*ptr=crc;
}
}
 
Zurück
Oben