
Сообщение от
Cs-Cs
Можно попросить подсказки?
Я работаю с ПР200, и мне не хватит Slave-регистров, как и всем остальным.
1. Я знаю, что OwenCloud может разбирать регистр по битам.
У меня будет передача всяких статусов, битовых, типа "Протечка воды", "Свет включен", "Питание подано" и так далее.
Как правильно делать, чтобы выгрузить проект из ПРки в OwenCloud с такой битовой маской?
Надо будет добавить в OwenCloud такой регистр несколько раз, указав разные биты?
У нас есть функция дублирования регистра (если нет - я могу руками всё сделать)?
2. Можно ли по аналогии сделать запись битовых команд в ПРку через один регистр?
Идея точно такая же, как и на чтение: один бит - выключить питание, другой - погасить свет, третий - сбросить аварию протечек.
Можно ли в OwenCloud добавить на запись такие биты из одно регистра?
Как это сделать?
3. Нормальной ли практикой будет, если я вместо FLOAT32 буду передавать параметры в SIGNED INT16 и делить их на 100, например?
Мне надо передавать температуры (улица) от ну пусть -40 до +60 градусов. Хватит тут одного регистра WORD?
Как правильно такое описать в OwenCloud и OwenLogic?
Спасибо, если кто подскажет.
Вот так выглядит настройка битового тега в Cloud:
Снимок экрана 2024-07-10 083211.png
Управление битами - аналогично, только разрешение на запись нужно.
Есть МНОЖИТЕЛЬ, наверное должен работать:
изображение_2024-07-10_083504475.png
Но в OL придётся умножать float на 100 и использовать функцию перевода в int (чтобы передавать отрицательные значения)
Код:
function REAL_TO_INT : udint;
var_input
rIn : real;
end_var
var //
udTmp : udint;
end_var
IF rIn < -32768 THEN rIn := -32768;
ELSIF rIn > 32767 THEN rIn := 32767;
END_IF;
udTmp := real_to_udint(abs(rIn));
IF rIn > -1 THEN REAL_TO_INT := udTmp;
ELSE REAL_TO_INT := 65536 - udTmp;
END_IF;
end_function