У ПРки - да, а я спрашивал со стороны OwenCloud: может он по Команде записать бит, а не весь регистр, например.
Вид для печати
У ПРки - да, а я спрашивал со стороны OwenCloud: может он по Команде записать бит, а не весь регистр, например.
Есть же руководство пользователя, там на стр.33 написано:
Вложение 77162
В смысле, если Вы не верите, что там написано, тогда всё нужно проверять опытным путём!
Вложение 77163
Вот так выглядит настройка битового тега в Cloud:
Вложение 77165
Управление битами - аналогично, только разрешение на запись нужно.
Есть МНОЖИТЕЛЬ, наверное должен работать:
Вложение 77164
Но в 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
Так он писать хочет биты в регистры ПР, а не читать, в смысле, ваши настройки для чтения, они не подойдут в данном конкретном случае!
И, макросы преобразования уже имеются, здесь в посте#83 в последний раз выкладывал универсальные, в смысле, для INT и DINT:
https://owen.ru/forum/showthread.php?t=39392&page=9
А здесь обсуждали:
https://owen.ru/forum/showthread.php?t=9398&page=647
Спасибо (ссылки себе копирую)!
Так. Примерно ясно:
1. Читать биты можно.
2. Передавать FLOAT в INT можно с множителем (на 0,01 - отлично).
3. С заприсью бит надо пробовать. У меня ж это всё на квартире матери работает, я пока не могу поехать туда, всё сломать, и тестировать.
Хотел заранее продумать карту регистров...
Вроде petera показывал как читать и писать биты в ПР200. у вас регистр 512, умножаем на 16 и получаем адрес первого бита. Вроде что-то вроде этого.
Если же оперировать регистром и самостоятельно получать биты типа через GetBit (или что-то аналогичное, что там есть в облаке, если есть), то при записи одного бита в регистр надо его изменить в данных самого регистра и отправить регистр целиком. Вот такое есть в облаке или нет даже не смотрел.
Всё уже упростили давно, функция выглядит так https://owen.ru/forum/showthread.php...821#post429821
Код:function FLOAT_TO_DINT: udint; //имя функции и тип данных выхода
VAR_INPUT
in : REAL;
END_VAR
if In >= 0 then
FLOAT_TO_DINT := real_to_udint(In);
else
// FLOAT_TO_INT:= 65536 - real_to_udint(-In); // Для INT
FLOAT_TO_DINT:= 0 - real_to_udint(-In); // Для DINT
end_if
end_function
Я всё же буду использовать чуть более сложный вариант, чтобы не получить ненароком подобных результатов:
Вложение 77170