ModbusRTU

Rulechain.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, так как использует более простое оборудование для последовательной связи.


Узел опроса устройств по протоколу 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
Table

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


Пример использования

По сути, ModbusRTU схож по использованию с ModbusTCP.

image2

Загружаем наш файл и проверяем на наличие ошибок

image3