Переменные, представленные в стандарте 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. Но вы должны быть очень осторожны, так как каждый поставщик делает вещи по-своему.

Другие вопросы по тегам