У ПРки - да, а я спрашивал со стороны OwenCloud: может он по Команде записать бит, а не весь регистр, например.
У ПРки - да, а я спрашивал со стороны OwenCloud: может он по Команде записать бит, а не весь регистр, например.
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net
Есть же руководство пользователя, там на стр.33 написано:
Функции записи и типы данных облака.png
В смысле, если Вы не верите, что там написано, тогда всё нужно проверять опытным путём!
rp_owencloud.pdf
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Вот так выглядит настройка битового тега в 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
Последний раз редактировалось 1exan; 10.07.2024 в 05:05.
Так он писать хочет биты в регистры ПР, а не читать, в смысле, ваши настройки для чтения, они не подойдут в данном конкретном случае!
И, макросы преобразования уже имеются, здесь в посте#83 в последний раз выкладывал универсальные, в смысле, для INT и DINT:
https://owen.ru/forum/showthread.php?t=39392&page=9
А здесь обсуждали:
https://owen.ru/forum/showthread.php?t=9398&page=647
Последний раз редактировалось Сергей0308; 10.07.2024 в 05:56.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Спасибо (ссылки себе копирую)!
Так. Примерно ясно:
1. Читать биты можно.
2. Передавать FLOAT в INT можно с множителем (на 0,01 - отлично).
3. С заприсью бит надо пробовать. У меня ж это всё на квартире матери работает, я пока не могу поехать туда, всё сломать, и тестировать.
Хотел заранее продумать карту регистров...
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net
Вроде 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
Последний раз редактировалось kondor3000; 10.07.2024 в 09:09.
Я всё же буду использовать чуть более сложный вариант, чтобы не получить ненароком подобных результатов:
изображение_2024-07-10_131246505.png