Нужна помощь, ардуино-rs485-modbus-slave - PLC OWEN

nik182
Онлайн
Зарегистрирован: 04.05.2015

Гут. Мач3 выдаёт данные чаще 1 раз в секунду? Без ардуины то же самое? Я не вижу ответа ардуины. 

Duet
Offline
Зарегистрирован: 17.01.2015

.

 

 

Duet
Offline
Зарегистрирован: 17.01.2015

.

nik182
Онлайн
Зарегистрирован: 04.05.2015

Ответ ардуины есть. Но! Читаем описание функции pool - 

 * Avoid any delay() function !!!!
 * After a successful frame between the Master and the Slave, the time-out timer is reset.
 * @param *regs  register table for communication exchange
 * @param u8size  size of the register table
 * @return 0 if no query, 1..4 if communication error, >4 if correct query processed
 
Нельзя использовать delay в коде, где крутиться pool. В #46 есть delay(100);
 
В регистры успешно записано, если state>4 - считать и рисовать на экране нужно только в этом случае. 
 
И что такое 7 в инициализации slave?
 
 
 
Kakmyc
Offline
Зарегистрирован: 15.01.2018

Нет там в модбасе ничего сложного.
Хоть слейв хоть мастер, пиши и читай что хочешь.
Зависит все от внутренней программы устройства.
Просто изучать нужно не по высерам гивера и прочих бомжей, а по официальной документации.
https://modbus.org/
(Форум там, кстати, тоже есть)

ЗЫ: Кстати в последних спецификациях наконец то привели названия к общепринятой терминологии и теперь это клиент/сервер.
Ну и нужно ещё учитывать про такую разновидность протокола, как Modbus RTU over TCP. Актуально, с учётом появления большого количества доступных по цене шлюзов.

emelianov
Offline
Зарегистрирован: 04.10.2021

Kakmyc пишет:
ЗЫ: Кстати в последних спецификациях наконец то привели названия к общепринятой терминологии и теперь это клиент/сервер.

В замене терминологии ничего кроме BLM истерии. Общепринятая терминология server - multiple clients и парадигма проводного Modbus multiple servers - the only one client не очень интуитивно сочетаются. А ModbusTCP и так был client/server.

Duet
Offline
Зарегистрирован: 17.01.2015

.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

А кто вам сказал что в овене такая реализация float ?
Не знаю, что там у вас за железяка , но в ПР200 по умолчанию , так:

Duet
Offline
Зарегистрирован: 17.01.2015

.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

nik182
Онлайн
Зарегистрирован: 04.05.2015

Странно. У меня всё читает. А так?

void loop(void) {
  state = slave.poll(au16data, 3);
  if (state>4) 
  {
    f= au16data[0]+(float)au16data[1]*0.0001;
    if (!au16data[2]) f=-f;
    u8g2.clearBuffer();          // clear the internal memory
    u8g2.setFont(u8g2_font_unifont_t_symbols);  // choose a suitable font u8g2_font_10x20_t_cyrillic
    u8g2.setCursor(50, 60); // указываем положение курсора
    u8g2.print(f);          // выводим строку на дисплей
 //   u8g2.sendBuffer();  
  }
  else
  {
    u8g2.clearBuffer();          // clear the internal memory
    u8g2.setFont(u8g2_font_unifont_t_symbols);  // choose a suitable font u8g2_font_10x20_t_cyrillic
    u8g2.setCursor(50, 60); // указываем положение курсора
    u8g2.print(state);          // выводим строку на дисплей
  //  u8g2.sendBuffer();     
  };
}

 

Duet
Offline
Зарегистрирован: 17.01.2015

.

nik182
Онлайн
Зарегистрирован: 04.05.2015

Прочитайте про принт . А вообще прежде чем задавать вопрос можно было бы поискать. После таких вопросов в разделе программирование помогать желание пропадает. Делать за тебя работу за бесплатно - лохом быть. 

Duet
Offline
Зарегистрирован: 17.01.2015

Я вас понял. Спасибо! Не прошу за меня работу делать, направление дали, спасибо.