Hallo,
ich bin z.Zt. dabei in die Signalduino Version für den Maple Mini und ESP32 WMBus S, T und C einzubauen. Ich verwende dabei die Routinen von der culw.
Dabei ist mir aufgefallen, daß in den Routinen verifyCrcBytesCmodeA und verifyCrcBytesCmodeB was nicht passt
Diese Routine funktioniert so nicht
uint16 verifyCrcBytesCmodeB(uint8* pByte, uint8* pPacket, uint16 packetSize)
{
uint16 crc = 0;
uint16 i = 0;
if (packetSize > 128) {
...
}
while (i < packetSize - 2) {
crc = crcCalc(crc, pByte[i]);
pPacket[i] = pByte[i];
++i;
}
if ((~crc) != (pByte[packetSize - 2] << 8 | pByte[packetSize - 1])) {
return (PACKET_CRC_ERROR);
}
pPacket[packetSize - 2] = pByte[packetSize - 2];
pPacket[packetSize - 1] = pByte[packetSize - 1];
return (PACKET_OK);
}
Weiß jemand warum diese Abfrage beim Maple Mini und der Arduino IDE so nicht funktioniert?
if ((~crc) != (pByte[packetSize - 2] << 8 | pByte[packetSize - 1])) {
so auch nicht
if ((~crc) != ((uint16_t)pByte[packetSize - 2] << 8 | pByte[packetSize - 1])) {
So funktionierts:
uint16_t ic;
uint16_t ii;
ic = ~crc
ii = (uint16_t)pByte[packetSize - 2] << 8 | pByte[packetSize - 1]
if (ic != ii) {
Gruß Ralf
Das empfangen von WMBus C FramemodeB habe ich mit dem Multical 21 getestet.
Zum Testen vom WMBus S und T verwende ich diese culw firmware
Ich habe dann selbst kompiliert (Von https://sourceforge.net/projects/culfw/).
Habe dir die Version angehangen für (nanoCUL868). Diese hat aber nur WMBUS aktiviert und eine Buffersize von 220.
Kurze Nachrichten kann ich damit senden, die werden auch vom sduino empfangen.
bst0F44AE0C7856341201074447780B12436587255D
bss0F44AE0C7856341201074447780B12436587255D
Bei dieser funktioniert das Senden nicht, ist diese zu lang?
bss2E4465B29498061541076AD87A1F000000046D301194210C134115441599004C1384664300426C7F2C326CFFFF0CA7D97859940857771FCA
Wie lang darf mit dieser culw firmware die Sendenachricht maximal sein?
Gruß Ralf