CRC-CCITT (XModem)

Dieser Bereich dient dem Austausch über geplante oder bereits realisierte Projekte - von Anwender zu Anwender.
Antworten
Eagle
Beiträge: 58
Registriert: Montag 25. Mai 2009, 19:24

CRC-CCITT (XModem)

Beitrag von Eagle » Mittwoch 1. März 2017, 11:32

Hallo zusammen
Ich habe mal wieder ein kleines Problem und checke es rein gar nicht…

Und zwar für die Kommunikation mit meinen beiden Wechselrichtern (Effekta AX 1000 und 2000 baugleich der MPPsolar PIP) würde ich gerne den CRC selbst berechnen.
Der Onlinerechner der auf der Seite http://www.Lammertbies.nl/comm/info/crc ... ation.html
berechnet mir zum Glück den richtigen CRC sodass ich die Kommunikation schon mal testen konnte.
Ist es möglich den Profilab CRC Baustein so einzustellen das er mir den richtigen wert liefert? Und wenn ja wie??? Ich blicke leider die ganze Thematik nicht so richtig.

Falls es hilft bei der Anfrage „QPI“ hex: 51 50 49 ist der CRC hex: BE AC
Somit der komplette Befehl hex: 51 50 49 BE AC 0D
0D als oder <CR> als Trennzeichen

Desweitern hat mir noch jemand einen C programmschnipsel geschickt wie der CRC berechnet wird aber auch diesen verstehe ich nicht.
INT16U cal_crc_half(INT8U far *pin, INT8U len)
{

INT16U crc;

INT8U da;
INT8U far *ptr;
INT8U bCRCHign;
INT8U bCRCLow;

INT16U crc_ta[16]=
{
0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,

0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef
};
ptr=pin;
crc=0;

while(len--!=0)
{
da=((INT8U)(crc>>8))>>4;

crc<<=4;

crc^=crc_ta[da^(*ptr>>4)];

da=((INT8U)(crc>>8))>>4;

crc<<=4;

crc^=crc_ta[da^(*ptr&0x0f)];

ptr++;
}
bCRCLow = crc;

bCRCHign= (INT8U)(crc>>8);

if(bCRCLow==0x28||bCRCLow==0x0d||bCRCLow==0x0a)

{
bCRCLow++;
}
if(bCRCHign==0x28||bCRCHign==0x0d||bCRCHign==0x0a)

{
bCRCHign++;
}
crc = ((INT16U)bCRCHign)<<8;
crc += bCRCLow;
return(crc);
}
Vielen Dank für eure mühe
MfG
Daniel

Eagle
Beiträge: 58
Registriert: Montag 25. Mai 2009, 19:24

Re: CRC-CCITT (XModem)

Beitrag von Eagle » Mittwoch 1. März 2017, 12:38

Hat sich erledigt
Der CRC Baustein nimmt nur Ascii am Eingang $D ich habe es die ganze Zeit mit Hex probiert.

Antworten

Zurück zu „PROFILAB Kundenprojekte und Aufgabenstellungen“