Переменные, представленные в стандарте IEC61131-3: ширина данных и тип данных
Непосредственно представленные переменные (DRV) в языках IEC61131-3 включают в свои "адреса" спецификатор ширины данных: X
за 1 бит, B
для байта, W
к слову, D
за меч и т. д.
Кроме того, когда объявляется DRV, тип данных IEC указывается как любая переменная (BYTE, WORD, INT, REAL...).
Я не уверен, как эти вещи связаны. Они ортогональны или нет? Можно ли определить РЕАЛЬНУЮ переменную с W
(байт) адрес? Каков будет ожидаемый результат?
Книга говорит:
Назначение типа данных для флага или адреса ввода / вывода позволяет системе программирования проверить, правильно ли осуществляется доступ к переменной. Например, переменная, объявленная
AT %QD3 : DINT;
не может быть случайно полученUINT
или жеREAL
,
что не делает вещи более понятными для меня. Возьмем для примера этот фрагмент (напомним, что W
означает слово, то есть 16 бит - и оба DINT
а также REAL
соответствуют 32 битам)
X AT %MW3 : DINT;
Y AT %MD4.1 : DINT;
Z AT %MD4.1 : REAL;
Первая строка отображает 32-битную переменную IEC в 16-битное местоположение. Это законно? будет ли запись / чтение эквивалентна "приведению" или как?
Другие строки объявляют две 32-битные переменные IEC другого типа, которые указывают на один и тот же адрес (я думаю, это должно быть допустимо). Каков ожидаемый результат при чтении или письме?
1 ответ
Как и все в мире ПЛК, к сожалению, все зависит от производителя и модели.
Компилятор Siemens не позволил бы вам объявить реальный адрес с помощью битового компонента, такого как MD4.1, он позволял только MD4, а длина данных должна была быть двойным словом, MB4 не был разрешен.
Чтение не будет равнозначно приведению. Например, вы объявляете MW2 как целое число и копируете туда некоторое значение. ПЛК хранит целые числа, скажем, в формате дополнения до двух. Позже в программе вы читаете MD2 как настоящий. ПЛК не пытается преобразовать целое число в реальное, он просто слепо читает байты и рассматривает его как реальное, независимо от того, что там было сохранено или что было объявлено там. Там не было автоматического литья.
Вот как все работало в Siemens S7 plc-s. Но вы должны быть очень осторожны, так как каждый поставщик делает вещи по-своему.