ModbusRTU
=========
Rulechain.cpp:
.. code:: cpp
else if (node_type == "ModbusRTU")
{
value set;
set["chain"] = value::string(this->name);
set["command"] = value::string("Create");
set["datatype"] = value::string("ModbusRTU");
if(!_node.has_object_field("settings"))
throw std::invalid_argument(ErrorMsgStart + " нет поля settings (object)");
if(!_node["settings"].has_string_field("csv"))
**Modbus RTU** — это протокол связи, используемый для передачи данных
между устройствами в промышленных сетях. Является частью стандарта
Modbus, который был разработан для обеспечения простого и эффективного
способа связи между электронными устройствами.
Modbus RTU использует последовательный интерфейс (например, RS-485 или
RS-232) для передачи данных. Вследствие использования этих интерфейсов
он лучше подходит для более коротких расстояний и меньшего количества
устройств, хотя современные реализации могут охватывать и большие
расстояния.
Работает на физическом и канальном уровнях модели OSI. Передает данные в
двоичном формате, используя стартовые и стоповые биты, а также
контрольные суммы для обеспечения целостности данных.
Из преимуществ - обычно дешевле и проще в реализации чем ModbusTCP, так
как использует более простое оборудование для последовательной связи.
.. raw:: html
Узел опроса устройств по протоколу Modbus RTU.
----------------------------------------------
|image0|
|image1|
Конфигурация узла
-----------------
Загрузка настроек из файла **.csv**
- **port** -
- **boudrate** -
- **byte-size** -
- **flow** -
- **stop-bit** -
- **device-name** -
- **device-id** -
- **period** -
- **name** -
- **function** -
- **address** -
- **quantity** -
- **type** -
- **scale** -
Пример **файла** с настройками *csv*:
::
port;boudrate;byte-size;flow;stop-bit;device-name;device-id;period;name;function;address;quantity;type;scale
/dev/pts/3;115200;8;N;1;pol-467;1;5000;di-1;FC03;0;1;bool;1
/dev/pts/3;115200;8;N;1;pol-467;1;5000;di-2;FC03;1;1;bool;1
/dev/pts/3;115200;8;N;1;pol-467;1;5000;di-3;FC03;2;1;bool;1
/dev/pts/3;115200;8;N;1;pol-467;1;5000;di-4;FC03;3;1;bool;1
/dev/pts/3;115200;8;N;1;pol-467;1;5000;di-5;FC03;4;1;bool;1
/dev/pts/3;115200;8;N;1;pol-467;1;5000;do-1;FC03;5;1;bool;1
/dev/pts/3;115200;8;N;1;pol-467;1;5000;do-2;FC03;6;1;bool;1
/dev/pts/3;115200;8;N;1;pol-467;1;5000;on-do-2;FC03;7;1;bool;1
/dev/pts/3;115200;8;N;1;pol-467;1;5000;ai-2;FC03;0;2;float32;1
/dev/pts/3;115200;8;N;1;pol-467;1;5000;ai-3;FC03;1;2;float32;1
.. csv-table:: Table
:header: "port", "boudrate", "byte-size", "flow", "stop-bit", "device-name", "device-id", "period", "name", "function", "address", "quantity", "type", "scale"
:widths: 15, 10, 10, 10, 10, 15, 10, 10, 15, 15, 10, 10, 15, 10
"/dev/pts/3", "115200", "8", "N", "1", "pol-467", "1", "5000", "di-1", "FC03", "0", "1", "bool", "1"
"/dev/pts/3", "115200", "8", "N", "1", "pol-467", "1", "5000", "di-2", "FC03", "1", "1", "bool", "1"
"/dev/pts/3", "115200", "8", "N", "1", "pol-467", "1", "5000", "di-3", "FC03", "2", "1", "bool", "1"
"/dev/pts/3", "115200", "8", "N", "1", "pol-467", "1", "5000", "di-4", "FC03", "3", "1", "bool", "1"
"/dev/pts/3", "115200", "8", "N", "1", "pol-467", "1", "5000", "di-5", "FC03", "4", "1", "bool", "1"
"/dev/pts/3", "115200", "8", "N", "1", "pol-467", "1", "5000", "do-1", "FC03", "5", "1", "bool", "1"
"/dev/pts/3", "115200", "8", "N", "1", "pol-467", "1", "5000", "do-2", "FC03", "6", "1", "bool", "1"
"/dev/pts/3", "115200", "8", "N", "1", "pol-467", "1", "5000", "on-do-2", "FC03", "7", "1", "bool", "1"
"/dev/pts/3", "115200", "8", "N", "1", "pol-467", "1", "5000", "ai-2", "FC03", "0", "2", "float32", "1"
"/dev/pts/3", "115200", "8", "N", "1", "pol-467", "1", "5000", "ai-3", "FC03", "1", "2", "float32", "1"
.. raw:: html
Пример использования
--------------------
По сути, ModbusRTU схож по использованию с ModbusTCP.
|image2|
Загружаем наш файл и проверяем на наличие ошибок
|image3|
.. |image0| image:: ../../_img/input-modbusrtu.png
.. |image1| image:: ../../_img/input-modbusrtu-settings.png
.. |image2| image:: ../../_img/modbusRTU_example_chain.png
.. |image3| image:: ../../_img/modbusRTU_example_settings.png