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.
Vielen Dank für eure müheINT16U 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);
}
MfG
Daniel