Вы же используете функцию не ту , у меня всё правильно 1 Перевод.jpg
Там выбор, куда переводить в INT или DINT
Вы же используете функцию не ту , у меня всё правильно 1 Перевод.jpg
Там выбор, куда переводить в INT или DINT
Ну т.к. изначально шёл разговор про передачу float одним регистром, то я и использовал закомментированную строку в таком виде:
Код: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_DINT:= 65536 - real_to_udint(-In); // Для INT // FLOAT_TO_DINT:= 0 - real_to_udint(-In); // Для DINT end_if end_function
1. Вы можете использовать функции 05 и 15 для записи конкретных битов в ПР200. Тогда параметр должен быть типа BOOL. А в поле регистр нужно записать число как выше описал melkyС заприсью бит надо пробовать. У меня ж это всё на квартире матери работает, я пока не могу поехать туда, всё сломать, и тестировать.
2. При чтении параметров, используя битовую маску, вы настраиваете параметры как указал 1exan на скриншотах (в таком варианте идет 1 запрос на чтение всего регистра, а потом он раскладывается на нужные биты внутри сервиса). При этом их можно и записывать, но формально будет писаться весь регистр (функция 16). Это работает так: при записи такого параметра сначала идет запрос на чтение (получаем целочисленное число), чтобы выяснить значение битов в этом регистре. Потом сервис исходя из того какие биты вы хотите записать и какие биты должны остаться неизменными получает новое целочисленное число, которое и пишется функцией 16 в ПР200.
Подал -33000 на ваш блок с ограничением, получил +32768, так какой в нём смысл то? 1 Ограничение.jpg
Как сказал Валенок, можно везде использовать функцию DINT, просто использовать 1 или 2 регистра для передачи. А ограничивать вход всё равно надо для INT.
Последний раз редактировалось kondor3000; 10.07.2024 в 10:13.
Алексей Фомин О! Большое спасибо!!
Я тогда буду на биты переходить, так как они у меня будут командами на ПРку, и команда будет подаваться только одна в один интервал времени.
То есть схема "Чтение регистра - маскирование - запись регистра" мне подходит!
1exan, kondor3000. Шо-то вы меня с FLOAT_TO_DINT запутали. Почему DINT? Это ж два регистра будет, или нет? А я хотел в один запихать.
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net
DINT по определению 2 регистра безнаковое целое. Но в понятиях ПР тут может быть все, что угоднопотому что понятия short и ushort тут нет в принципе.