Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Modbus RTU disconnect

Ernest
2018-02-23
2018-03-26
  • Ernest - 2018-02-23

    Hi
    After rebooting Raspberry pi, the modbus rtu connection is not restored .
    Raspberry pi master , arduino slave

    How to solve a problem ?

     
  • eschwellinger

    eschwellinger - 2018-02-24

    Hi,

    check this 'Auto-restart connection':
    BR
    Eewin

    IMG: Autorestart.jpg

     
  • Ernest - 2018-02-24

    Dear Edwin , many thanks for the answer!
    Yes, I have Auto-restart connection'.
    I would like to add that I connect arduino and pi through the USB .
    Do you have any other solutions?
    My configuration

    IMG: 10583867_1731982156849468_6107485341423737853_n.jpg

    IMG: 28280143_1731982183516132_9036553395087011969_n.jpg

     
  • Ernest - 2018-02-26

    I reinstalled the program and made the settings a second time.
    No changes, when the program is compiled, everything works, but if you reboot the Arduino or restart the pi, the connection is not restored

    IMG: 28277168_1734273759953641_2626968141209414127_n.jpg

    IMG: 28378119_1734269969954020_6210514162763032054_n.jpg

     
  • eschwellinger

    eschwellinger - 2018-02-27

    Hi,
    add Modbus_Slave_Com_port (the name of the modbus slave in the device tree)
    to the watchwindow and check there additional Information on the connection while you are online (maybe diable autorestart for one try)
    to see the problem.

    BR
    Edwin

     
  • Ernest - 2018-03-07

    Dear Edwin

    I understand the reason why I do not turn on the modbus RTU after rebooting
    If I write FALSE ( m_slaveEnabled ) , then everything starts to work
    How can I do this automatically in the program and can I do it in a CFC ?

    IMG: 28782932_1744336935613990_7583125332182433792_n.jpg

     
  • eschwellinger

    eschwellinger - 2018-03-23

    Hi,
    not sure how we could help without checking this online....

    BR
    Edwin

     
  • Ernest - 2018-03-25

    Edwin Schwellinger hat geschrieben:
    Hi,
    not sure how we could help without checking this online....
    BR
    Edwin

    Hi
    I do not see any problems for implementing this, I can give you access to teamviewer .Tell me when you are comfortable ?
    Just attach the project, please see there may be an error in my settings

    Best regards

    Ernest

    for_test.project [161.89 KiB]

     
  • eschwellinger

    eschwellinger - 2018-03-26

    Hi Ernest,
    guess this is a slave problem?
    Because seems no to resposnse in case of the restart isn't it?
    Could you increase this timeout?

    BR
    Edwin

    IMG: increaseTimeout.jpg

     
  • Anonymous - 2018-03-26

    Originally created by: Viacheslav Mezentsev

    Если не удастся решить проблему, то можно использовать функциональные блоки из библиотеки IoDrvModbus напрямую, без устройства в дереве проекта. Библиотека содержит два функциональных блока для работы в режиме modbus rtu master: ModbusRequest и ModbusRequest2. Их использование более прозрачное, чем этот странный драйвер Modbus от 3S.

    Я приложил пример проекта на CFC как можно использовать фб ModbusRequest для чтения дискретных выходов (Codesys 3.5.10.x).

    RTUReadCoilsAsync.project [136.12 KiB]

    RTUReadCoilsAsync.pdf [56.79 KiB]

     
  • Ernest - 2018-03-26

    Edwin Schwellinger hat geschrieben:
    Hi Ernest,
    guess this is a slave problem?
    Because seems no to resposnse in case of the restart isn't it?
    Could you increase this timeout?
    BR
    Edwin

    Hi Edwin
    For the test, I connect the arduino (slave) to the OPC server and left all the settings as were. Everything works and if I reboot the Arduino while running, then the connection to the server is automatically restored.
    I increased the timeout of the response, as a result, I see that the error about the loss of communication is triggered with misconception but I do not see that the master at that time is polling the slave.

    IMG: 29571357_1766463140068036_4793099686598981424_n.jpg

    IMG: 29541222_1766463133401370_1552211147245285360_n.jpg

    IMG: 29540943_1766463146734702_3046219830236914129_n.jpg

     
  • Ernest - 2018-03-26

    Viacheslav Mezentsev hat geschrieben:
    Если не удастся решить проблему, то можно использовать функциональные блоки из библиотеки IoDrvModbus напрямую, без устройства в дереве проекта. Библиотека содержит два функциональных блока для работы в режиме modbus rtu master: ModbusRequest и ModbusRequest2. Их использование более прозрачное, чем этот странный драйвер Modbus от 3S.
    Я приложил пример проекта на CFC как можно использовать фб ModbusRequest для чтения дискретных выходов (Codesys 3.5.10.x).

    Привет
    Огромное спасибо что ответили
    Мучаюсь с этой проблемой уже месяц , перепробовал практически все варианты что нашел на этом форуме
    Честно говоря я нашел как можно возобновить связь после перезагрузки , но я не смог сделать это в программе так как не могу найти связь с ( m_slaveEnabled ) .
    Вот ссылка на видео https://www.youtube.com/watch?v=jz6ZYWJpHtw m

     
  • Anonymous - 2018-03-26

    Originally created by: Viacheslav Mezentsev

    Обычно функциональные блоки имеют дискретные входы и выходы общего назначения, типа xEnable, xReset, xError, xBusy, xDown и т.п. Так вот, если нужно обновить состояние какого-то блока, то пользоваться нужно каким-то из этих входов. Я бы попробовал Modbus_Slave_COM_Port.xReset := true, если количество запросов с ошибкой превысило какое-то число (попробовать установить в true по условию 1 раз). Т.е. нужно добавить счётчик и следить за установкой xError, причём не в каждом цикле, а именно отслеживать, что произошла ошибка таймаута (истекло время ожидания ответа).

    Внутренний член "класса" m_slaveEnabled напрямую скорее всего не доступен, т.к. управление им не удобно из таких языков как CFC. Сброс может происходить косвенным образом, с использованием указанных выше дискретных входов.

    Идентификатор Modbus_Slave_COM_Port является экземпляром драйвера устройства, т.е., другими словами, это экземпляр специального функционального блока. Он доступен для того, чтобы программист мог работать с устройством "напрямую". Я никогда не работал с этими устройствами, т.к. предпочитаю синхронный обмен по протоколу Modbus с использованием своих функций и функциональных блоков. Может быть вместо Modbus_Slave_COM_Port нужно будет сбросить Modbus_Master_COM_Port, посмотрев его свойства в online.

    П.С. Можете приложить скетч Arduino, я могу посмотреть в чём может быть дело.

     
  • Ernest - 2018-03-26

    Viacheslav Mezentsev hat geschrieben:
    П.С. Можете приложить скетч Arduino, я могу посмотреть в чём может быть дело.

    Я буду вам премного благодарен..
    Я проверял ардуино в качестве слейва в OPC сервере от Инсат - все работает

    Настройки COM порта в Raspberry :
    [SysCom]
    Linux.Devicefile=/dev/ttyUSB
    portnum := COM.SysCom.SYS_COMPORT1;

    Raspberry и arduino подключены через usb

    Эл почта .. e erno0011@mail.ru e

    modbus rtu.rar [57.62 KiB]

     

Log in to post a comment.