P2baron
Солнце 13 мая 2018 г., 10:31
Есть ли у кого -нибудь проблемы с стабильностью с библиотекой Uipethernet?
Я делаю проект, который включает в себя чтение раба Модбуса каждые несколько секунд.
Эта работа отлично в течение некоторого времени, но затем перестает работать. STM32, похоже, теряет связь с модулями ENC28J60. (TX Light перестает мигать)
Я использую библиотеки Modbustcp и Uipethernet.ENC28J60 питается извне.
Может быть, это что -то с таймером сторожевого пса? Пример ModBustCP был некоторый код, чтобы отключить таймер сторожевого пса, который не компилировался для STM32.
Любая помощь ценится.
Это мой код:
Я делаю проект, который включает в себя чтение раба Модбуса каждые несколько секунд.
Эта работа отлично в течение некоторого времени, но затем перестает работать. STM32, похоже, теряет связь с модулями ENC28J60. (TX Light перестает мигать)
Я использую библиотеки Modbustcp и Uipethernet.ENC28J60 питается извне.
Может быть, это что -то с таймером сторожевого пса? Пример ModBustCP был некоторый код, чтобы отключить таймер сторожевого пса, который не компилировался для STM32.
Любая помощь ценится.
Это мой код:
#define ENC28J60 = 1
#include
unsigned int param_value_int[7];
#include
//#include
IPAddress ModbusDeviceIP(192, 168, 1, 181);
IPAddress moduleIPAddress(192, 168, 1, 12); // Anything other than the device IP Address
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xE2 };
#include
#ifdef U8X8_HAVE_HW_SPI
#include
#endif
#ifdef U8X8_HAVE_HW_I2C
#include
#endif
ModbusTCP node(1);
void setup(void) {
Serial2.begin(9600);
Serial2.println("banaan");
//u8g2.begin();
Ethernet.begin(mac);
node.setServerIPAddress(ModbusDeviceIP);
}
void loop(void) {
uint8_t result;
result = node.readHoldingRegisters(2, 1);
delay(100);
Serial2.print("hola: ");
Serial2.println(result, HEX);
if(result != 0)
{
node.MBconnectionFlag = 0;
Serial2.println("TimeOut");
if(result == 5) {
//Ethernet.begin(mac, moduleIPAddress);
//wdt_enable(WDTO_8S);
//WDTCSR |= _BV(WDIE);
}
delay(6000);
}
int len = node.getResponseBufferLength();
Serial2.println("Response Length: " + String(len));
for (byte j = 0; j < len; j++)
{
Serial2.print(node.getResponseBuffer(j));
Serial2.print(" ");
}
Serial2.println();
node.clearResponseBuffer();
delay(100);
}
P2baron
Солнце 13 мая 2018 г. 10:53
Повторная инициализация соединения ENC28J60 решает проблему. Я получаю тайм -аут время от времени, но соединение автоматически восстанавливается.
if(result == 5) {
Ethernet.begin(mac, moduleIPAddress);
}
Rogerclark
Солнце 13 мая 2018 г., 21:24
WDT не включен по умолчанию, но вы можете включить и настраивать его, если это необходимо, однако код будет отличаться от кода AVR, когда я дону’Не думаю, что WDT является частью основного API Arduino, и код в используемой вами библиотеке, вероятно, будет специфичным для AVR
Staticmem
Пн 14 мая 2018 г., 12:12
В начале 00 -х мне пришлось запрограммировать реализацию протокола Modbus для клиента RS232 для клиента. Я помню, что у него были строгие требования к срокам в обслуживании ответов (или в соответствии с этим), или это будет тайм-аут. Протокол Modbus должен покрывать требования к времени.
P2baron
Пн 14 мая 2018 г., 7:50 утра
Спасибо
Также я прочитал, что сторожевой пейзаж STM32 не может быть отключен после включения.
Я также пробовал разные модули. Также прочитайте, что мне нужно использовать (внешние) подтягивания на линии i2c. Думаю, мне придется сделать дальнейшую отладку.
[Rogerclark - Солнце 13 мая 2018 г., 21:24] - WDT не включен по умолчанию, но вы можете включить и настраивать его, если это необходимо, однако код будет отличаться от кода AVR, когда я дону’Не думаю, что WDT является частью основного API Arduino, и код в используемой вами библиотеке, вероятно, будет специфичным для AVRЭто имеет смысл. Он думает, что код в эскизе есть, чтобы предотвратить сброс MCU во время общения.
Также я прочитал, что сторожевой пейзаж STM32 не может быть отключен после включения.
[Staticmem - Пн 14 мая 2018 г. 12:12] - В начале 00 -х мне пришлось запрограммировать реализацию протокола Modbus для клиента RS232 для клиента. Я помню, что у него были строгие требования к срокам в обслуживании ответов (или в соответствии с этим), или это будет тайм-аут. Протокол Modbus должен покрывать требования к времени.Это проигрышное соединение MCU с модулем ENC28J60. Я могу успешно читать регистры в течение некоторого времени, прежде чем подключения падают.
Я также пробовал разные модули. Также прочитайте, что мне нужно использовать (внешние) подтягивания на линии i2c. Думаю, мне придется сделать дальнейшую отладку.
Стивестронг
Пн 14 мая 2018 г., 9:24
Я использовал модули ENC28, но больше не. Они не очень надежны.
Вместо этого я в настоящее время использую модули W5500, они быстрее и совместимы с arduino.
Вместо этого я в настоящее время использую модули W5500, они быстрее и совместимы с arduino.
P2baron
Пн 14 мая 2018 г., 13:30
[Стивестронг - Пн 14 мая 2018 г., 9:24 утра] - Я использовал модули ENC28, но больше не. Они не очень надежны.Спасибо за совет!
Вместо этого я в настоящее время использую модули W5500, они быстрее и совместимы с arduino.
Жаль, что у меня есть куча ENC28.
К счастью, модули W5500 на eBay дешевы на eBay. Заказал два из них.
В то же время приветствуются любые рекомендации по повышению стабильности с модулями ENC28!
luca_stm32
Пн 21 мая 2018 г., 19:38
Привет, P2baron.
Извините за мой поздний ответ.
Я использовал эту библиотеку для ENC28J60, и она работает с Blu Pill: https: // github.com/uipethernet/uipethernet
Надеюсь, это может вам помочь.
Лука
Извините за мой поздний ответ.
Я использовал эту библиотеку для ENC28J60, и она работает с Blu Pill: https: // github.com/uipethernet/uipethernet
Надеюсь, это может вам помочь.
Лука
P2baron
Вторник 22 мая 2018 12:32
[luca_stm32 - Пн 21 мая 2018 г., 19:38] - Я использовал эту библиотеку для ENC28J60, и она работает с Blu Pill: https: // github.com/uipethernet/uipethernetСпасибо, Лука - я уже использую последнюю версию из этой библиотеки. У вас нет проблем с стабильностью? Вы делали что-нибудь специальный код или проводка?
luca_stm32
Ср 23 мая 2018 г., 5:13
Я не вижу проблемы с стабильностью, но у меня включен сторожевой пейзаж.
Я видел твой код, но я не могу найти, где ты называешь Ethernet.поддерживать(); Функция: в основном цикле вы должны назвать это так часто, как можете.
В вашем коде я также заметил, что у вас есть задержка (6000); Может быть, вы сможете повторно это:
Я видел твой код, но я не могу найти, где ты называешь Ethernet.поддерживать(); Функция: в основном цикле вы должны назвать это так часто, как можете.
В вашем коде я также заметил, что у вас есть задержка (6000); Может быть, вы сможете повторно это:
unit32_t delay_time;
if ((millis() - delay_time) < 6000) Ethernet.maintain();
Асмаллри
Ср 23 мая 2018 г., 22:33
[Staticmem - Пн 14 мая 2018 г. 12:12] - В начале 00 -х мне пришлось запрограммировать реализацию протокола Modbus для клиента RS232 для клиента. Я помню, что у него были строгие требования к срокам в обслуживании ответов (или в соответствии с этим), или это будет тайм-аут. Протокол Modbus должен покрывать требования к времени.Я проделал много работы Modbus RS232. Я подозреваю, что вы имели дело с конкретным устройством с этими ограничениями, потому что сам Modbus не обеспечивает строгого времени и вместо этого предлагает тайм -ауты в диапазоне от 1 секунды до нескольких секунд в зависимости от скорости бода. Из «что я наблюдал», я видел, как время отклика устройства варьируется от меньшего количества, чем 0 (один семейный продукт начал передавать ответ до того, как сериализация стоп -бита от отправителя была завершена) в диапазоне до 2 секунд.
Staticmem
Сб 26 мая 2018 г. 8:33 утра
[Асмаллри - Ср 23 мая 2018 г. 22:33] -Долгое время, но да, это были, вероятно, тайм-ауты, на которые я на самом деле ссылался, и не так много в течение нескольких критических уровней.[Staticmem - Пн 14 мая 2018 г. 12:12] - В начале 00 -х мне пришлось запрограммировать реализацию протокола Modbus для клиента RS232 для клиента. Я помню, что у него были строгие требования к срокам в обслуживании ответов (или в соответствии с этим), или это будет тайм-аут. Протокол Modbus должен покрывать требования к времени.Я проделал много работы Modbus RS232. Я подозреваю, что вы имели дело с конкретным устройством с этими ограничениями, потому что сам Modbus не обеспечивает строгого времени и вместо этого предлагает тайм -ауты в диапазоне от 1 секунды до нескольких секунд в зависимости от скорости бода. Из «что я наблюдал», я видел, как время отклика устройства варьируется от меньшего количества, чем 0 (один семейный продукт начал передавать ответ до того, как сериализация стоп -бита от отправителя была завершена) в диапазоне до 2 секунд.