Доброго времени!
не получается поднять мастер на arduino. Поднял slave (id 2) - проверил эмулятором через pc, все работает. Теперь создал master, но что то работает не так. Я получаю запрос от мастера , отдаю ответ - а мастер не записывает ответ, не могу понять где проблема (в роли slave пока выступает эмулятор pc). Ниже код мастера:
► Показать
#include <TimerOne.h>
#include <Tiny_ModBusRTU_Master.h>
// data array for modbus network sharing
uint16_t au16data[16];
uint8_t u8state;
void timerInterrupt();
Tiny_ModBusRTU_Master master(8, 2000, 11);
unsigned long u32wait;
void setup() {
Timer1.initialize(500); // инициализация таймера 1, период 500 мкс
Timer1.attachInterrupt(timerInterrupt, 500); // задаем обработчик прерываний
Serial.begin(9600);
u32wait = millis() + 3000;
u8state = 0;
pinMode(10, OUTPUT);
pinMode(13, OUTPUT);
digitalWrite(10, HIGH);
}
void loop() {
switch ( u8state ) {
case 0:
if (millis() > u32wait) u8state++; // wait state
break;
case 1:
master.read(2, au16data, 0, 4); //читаем первые 4 регистра, я так понимаю в библиотеке начинается отсчет с 0.
u8state++;
break;
case 2:
if (master.state != 1) {
if (master.state == 0) {
if ((bool)au16data[0]) digitalWrite(10, LOW); else digitalWrite(10, HIGH);
if ((bool)au16data[1])digitalWrite(13, HIGH); else digitalWrite(13, LOW);
u8state++ ;
u32wait = millis() + 3000;
} else u8state++ ;
}
break;
case 3:
if (millis() > u32wait) {
master.writeSingle(2, (unsigned int)master.state, 5);
u32wait = millis() + 2000;
u8state = 0;
}
break;
}
}
void timerInterrupt() {
master.update(); // проверка данных обмена
}
вот скриншот обмена:
Из скриншота видно, что обмен идет каждые две секунды, а это говорит что присутствует ошибка. Как не странно так же нет посылки на запись - почему не знаю. Где ошибка подскажите.
Другими путями я получил код ошибки = 2, но почему он возникает, времени должно хватать с лихвой или я что то не понимаю.