Uw opmerkingen

В крайнем бите будет ноль при использовании значения без знака.

Драйвер получит набор бит по опросу. Мы не против внести доработку, если это действительно облегчит разработку интеграторам. Однако нам нужно знать - что ожидается в драйвере, если в ПЛК записано отрицательное число? Например, в регистре значение -1349. Что должно прийти в драйвер по опросу?

Давайте уточним:

1) В ПЛК у вас тип Holding Register, размер Word(16 bit).

2) Проект панельный или серверный?

3) Совпадают ли значения, которые получают из этого регистра сторонний клиент и Иридиум?

4) Что, по-вашему должно приходить в фидбэк драйвера Modbus RTU, если в ПЛК вы записали значение -1349?

Отрицательное число в данном случае это функция пользователя. Поэтому в канале всегда будет 2 байта без знака.


1) Какое значение получаете сторонним клиентом Modbus?

2) Совпадает ли оно с получаемым значением в Иридиум?


Если совпадает, то получайте значение в HEX, а потом обрабатывайте. Кстати, шаблоны позволяют в панельном проекте получать HEX без использования скриптов. Например, в ПЛК вы записали десятичное число -1349. В панель получили FFFFFAB. Decimal from signed 2's complement = -1349.

Всё верно. В драйвер приходит "как есть". После - можем обрабатывать как надо (через скрипты, через шаблоны).

Добрый день.

В драйвер Modbus RTU приходит значение "как есть", Иридиум его не обрабатывает. Если на контроллере настроен нужный тип, то в драйвер должно прийти то, что есть по факту. Сейчас что получаете?

Hello.

To solve your problem with JSON, you may find these projects useful as an example.

JSON_.sirpz

JSON_.irpz

Hello.

In Javascript, use the IR.SetTimeout method to get the delay.

В примере использован один фидбэк. Можете использовать три. Код:

var device = IR.GetDevice("Modbus TCP");

IR.AddListener(IR.EVENT_TAG_CHANGE, device, function(name, value)
{
if ((name == "mb_CtrlLight_00") && (value == 0))
{
IR.Log("Value = 0.");
IR.GetPage("Page 1").GetItem("Item 1").State = 0;
}
if ((name == "mb_CtrlLight_01") && (value == 1))
{
IR.Log("Value = 1.");
IR.GetPage("Page 1").GetItem("Item 1").State = 1;
}
if ((name == "mb_CtrlLight_02") && (value == 2))
{
IR.Log("Value = 2.");
IR.GetPage("Page 1").GetItem("Item 1").State = 2;
}
});

Фидбэки mb_CtrlLight_00, mb_CtrlLight_01 и mb_CtrlLight_02 должны существовать в драйвере.

The upgrade version of JavaScipt in iRidium is not planned. Perhaps the situation will change in the future.

Добрый день.

Если под состояниями имеются в виду States, то можете использовать в качестве образца приложенный проект.

multistate.irpz