16 809
правок
Строка 132: | Строка 132: | ||
Например, для скорости 9600 бит/с <code>guard_interval_us = (3.5*11*106)/9600 = 4000 мкс</code>. При проблемах с подключением стороннего устройства для теста это значение можно увеличить (например до 100000 мкс), так как сторонние устройства иногда работают не совсем корректно. | Например, для скорости 9600 бит/с <code>guard_interval_us = (3.5*11*106)/9600 = 4000 мкс</code>. При проблемах с подключением стороннего устройства для теста это значение можно увеличить (например до 100000 мкс), так как сторонние устройства иногда работают не совсем корректно. | ||
=== | === Нарушения стандарта в сторонних устройствах === | ||
Иногда в сторонних устройствах встречаются грубые нарушения стандарта: | Иногда в сторонних устройствах встречаются грубые нарушения стандарта: | ||
# В некоторые регистры можно только писать информацию, но нельзя считывать. | # В некоторые регистры можно только писать информацию, но нельзя считывать. | ||
Строка 138: | Строка 138: | ||
Для того, чтобы драйвер работал с такими устройствами без ошибок, мы добавили параметр '''write_address'''. | Для того, чтобы драйвер работал с такими устройствами без ошибок, мы добавили параметр '''write_address'''. | ||
==== Писать можно, читать нельзя ==== | |||
Допустим, в нашем устройстве есть такой регистр только для записи. | |||
{| border="1" class="wikitable" | |||
! Адрес || Тип || Название || Назначение | |||
|- | |||
| 20 || Coil || Relay 1 Switch || Управление выходом. Только для записи. | |||
|- | |||
|} | |||
В этом случае канал надо описывать так: | |||
<syntaxhighlight lang="json"> | |||
{ | |||
"name": "Relay 1 Switch", | |||
"write_address": "20", | |||
"reg_type": "holding", | |||
"type": "pushbutton", | |||
"format": "u16", | |||
"group": "channels", | |||
"on_value": 1 // определяет, что записывать в регистр при нажатии | |||
} | |||
</syntaxhighlight> | |||
==== Писать в один регистр, читать из другого==== | |||
Допустим, в нашем устройстве команда записывается в один регистр, а читается из другого. | |||
{| border="1" class="wikitable" | |||
! Адрес || Тип || Название || Назначение | |||
|- | |||
| 20 || Coil || Relay 1 Switch|| Управление выходом. Только для записи. | |||
|- | |||
| 21 || Discrete Input || Relay 1 State|| Состояние выхода. Только для чтения. | |||
|- | |||
|} | |||
В этом случае канал надо описывать так — у нас будет один контрол, а при работе с устройством, записываться будет один регистр, а читаться другой: | |||
<syntaxhighlight lang="json"> | |||
{ | |||
"name": "Relay 1", | |||
"write_address": "20", // адрес, куда мы записываем команды | |||
"address": "21", // адрес, по которому мы читаем состояние | |||
"reg_type": "holding", | |||
"type": "switch", | |||
"format": "u16", | |||
"group": "channels", | |||
"on_value": 1 // определяет, что записывать в регистр при нажатии | |||
} | |||
</syntaxhighlight> |