PDA

Просмотр полной версии : Как правильно адресовать дискретный вход ПЛК через указатель на имя переменной?



Daedal
27.03.2018, 22:50
Доброго времени суток!

Подскажите, пожалуйста, как обратиться к дискретному входу ПЛК через указатель на имя переменной?
Делаю так:

имя дискретного входа и указатель:

VOLTAGE_CONTROLCABINET_MAIN
pDIADDR : POINTER TO BOOL;
Обращаюсь:

pDIADDR := BITADR(VOLTAGE_CONTROLCABINET_MAIN);
pDIADDR^ := TRUE;

Ошибка неверного адреса!

Как правильно адресовать дискретный вход?

capzap
27.03.2018, 22:55
http://www.owen.ru/forum/showthread.php?t=15455&p=142016&viewfull=1#post142016

Daedal
28.03.2018, 11:56
http://www.owen.ru/forum/showthread.php?t=15455&p=142016&viewfull=1#post142016

Нашёл там проект, в котором есть код адресации, но не понятно как адресоваться к быстрым входам. Какой у них адрес?
В примере адресация идёт по имени байта - beginer
Быстрым входам имя не присваивается..как сделать?

Например, я могу вычислить адрес начала простых дискретных входов, задав им имя. Но т.к. адресация байтовая, то как попасть в этом случае на начало быстрых входов, если их 2 всего?
ПЛК 110-60

Daedal
28.03.2018, 12:05
Сместил адрес на -1 от начала простых входов. И подогнал, получилось!

Спасибо!

capzap
28.03.2018, 12:20
beginer это отправная точка куда записывать, в примере это физ.выхода, для Вас возможно это должна быть локальная переменная программы. Для чтения входов, для каждого нужно выполнить действия как с переменной mark, т.к. быстрых входов не много, можно не вычислять indByte, а сразу присваивать указателю.
Есть одно НО все эти манипуляции нужны если Вы очень хотите использовать BITADR, но если просто нужно значения входа, то достаточно именовать его и в программе пользоваться этим именем, не создавая локальной переменной с таким же именем

Daedal
28.03.2018, 12:42
... а сразу присваивать указателю.

Так и сделал.

... то достаточно именовать его и в программе пользоваться этим именем, не создавая локальной переменной с таким же именем

А так ведь нельзя...

VOLTAGE_CONTROLCABINET_MAIN := TRUE;
ошибка 4020.

capzap
28.03.2018, 13:18
должно быть так, тогда ошибок не будет

Daedal
28.03.2018, 13:30
должно быть так, тогда ошибок не будет

У Вас ведь тут чтение с входа, а у меня про запись вопрос.

capzap
28.03.2018, 13:36
У Вас ведь тут чтение с входа, а у меня про запись вопрос.

тут я бессилен дать какой нибудь адекватный ответ

Daedal
28.03.2018, 13:44
тут я бессилен дать какой нибудь адекватный ответ

Я уже разобрался же. Спасибо