Применил эту библиотеку для передачи данных на Master SCADA, всё работает. Но захотелось большего, а именно сделать то же самое, но через WiFi. Естественно, в качестве устройства был выбран модуль ESP8266 (NodeMCU). Поскольку в данном случае UART не используется, возникла необходимость перенести функции библиотеки на другую платформу. Начал с "убирания всего лишнего". Убрал широковещательные дела, запись одного и нескольких регистров. В общем, оставил только обработку функции 0x03, то есть чтение регистров. И тут возникла проблема. У меня не работает вот этот кусок кода:
Код: Выделить всё
for(unsigned int i=0; i<num; i++) {
_frameBuffer[i*2 + 3] = (byte)((*(_holdingRegTable + adr)) >> 8);
_frameBuffer[i*2 + 4] = (byte)(*(_holdingRegTable + adr));
adr++;
}
Если сделать так:
Код: Выделить всё
for(unsigned int i=0; i<num; i++) {
Serial.print ( "dataH = " ); Serial.println (( *(holdingRegisters + adr))>>8 );
Serial.print ( "dataL = " ); Serial.println ( *(holdingRegisters + adr) );
_frameBuffer[i*2 + 3] = (byte)((*(_holdingRegTable + adr)) >> 8);
_frameBuffer[i*2 + 4] = (byte)(*(_holdingRegTable + adr));
Serial.print ( "_frameBuffer[" ); Serial.print ( i*2+3 );
Serial.print ( "] = " ); Serial.println ( _frameBuffer[i*2+3] );
Serial.print ( "_frameBuffer[" ); Serial.print ( i*2+4 );
Serial.print ( "] = " ); Serial.println ( _frameBuffer[i*2+4] );
adr++;
}
то dataH и dataL выводятся ненулевые, а вот данные из _frameBuffer - нули. Поэтому ответ на запрос формируется неправильно.
Опыта очень мало, язык C++ совсем не знаю, поможите!