Test: различия между версиями

2163 байта добавлено ,  1 год назад
Строка 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>