# HEX String senden



## stef486 (28 April 2010)

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


----------



## witkatz (28 April 2010)

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.ä.)?


----------



## Nitrozin (28 April 2010)

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


----------



## gravieren (28 April 2010)

Hi


Zeige doch mal das Code-Snipped.


----------



## Ingmar64 (29 April 2010)

*Ist doch gar nicht so falsch*



stef486 schrieb:


> 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.


----------



## PN/DP (29 April 2010)

Ingmar64 schrieb:


> *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".


Ingmar64 schrieb:


> 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


----------



## stef486 (21 Mai 2010)

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;
  }
  }


----------



## gravieren (21 Mai 2010)

Hi

www.oscat.de 


Da gibt es eine BIB mit Quellcode.


CRC ist auch mit drinnen.


----------

