Capzap, спасибо! Сам бы я к этому пришел бы как раз после 1000 сообщения на форуме.![]()
Мне кажется у вас сама конструкция неправильная. На входе таймера и на выходе одна и та же переменная. Если она на входе TRUE, то и на выходе она также будет TRUE и таймер тут уже роли не играет.
Вы напишите своими словами что хотите получить, так легче будет вам помочь. А то как спросили, так вам и ответили. Я уверен, что удовлетворения от полученного ответа вы не получили.
С уважением, Михаил.
Не лады с RETAIN переменными.
написал библиотечку, если всю целиком ее определить как retain (поставил 6 штук) то КДС пишет, что съело 992 байта из 4 кб (ПЛК 100).
Переписал библиотечку так, что в ней всего 4 меременных retain, ставлю в проект, сами библиотеки уже не ввожу в retain переменные, по идее если FB использует в своем теле такие переменные, то и взять должна только их.
В библиотеке 4 переменных dword обозначены как retain, поставил 6 штук, должно бы скушаться 96 байт, а в итоге еще больше съело, уже 1 кб.
Как с этим бороться ?
С таймером TP разобрался. Отдаю долг форуму - новичкам пригодится.
OUT1-OUT5 => Ресурсы.Конфигурация ПЛК.Discrete Outputs [FIX]
Код:PROGRAM PLC_PRG VAR TP1:TP; IN1: INT; T: TIME := T#1s; END_VARСкриншотКод:IF IN1=0 THEN TP1(IN:=NOT TP1.Q,PT:=T,Q=>OUT1); IF NOT TP1.Q THEN IN1:=2; END_IF ELSIF IN1=1 THEN TP1(IN:=NOT TP1.Q,PT:=T,Q=>OUT2); IF NOT TP1.Q THEN IN1:=3; END_IF ELSIF IN1=2 THEN TP1(IN:=NOT TP1.Q,PT:=T,Q=>OUT3); IF NOT TP1.Q THEN IN1:=4; END_IF ELSIF IN1=3 THEN TP1(IN:=NOT TP1.Q,PT:=T,Q=>OUT4); IF NOT TP1.Q THEN IN1:=0; END_IF ELSIF IN1=4 THEN TP1(IN:=NOT TP1.Q,PT:=T,Q=>OUT5); IF NOT TP1.Q THEN IN1:=1; END_IF END_IF
Всем Спасибо за помощь.
melky, а сколько экземпляров этих ФБ используете? Мне кажется надо умножить количество retain переменных на количество экземпляров ФБ, где они используются.
amn, 6 экземпляров, в каждом по 4 dword переменных retain, в итоге 1006 байт вместо 96 байт.
Если же в библиотеке нет retain переменных а сами экземпляры кинуть в retain то съедалось 992 байта.
Вот такой вот парадокс странный.
Еще раз читаем внимательно.
"Замечания. Если хотя бы одна переменная функционального блока объявлена как RETAIN, то все данные экземпляров целиком помещаются в энергонезависимый сегмент."
Не может у ФБ быть части данных вне Retain области, если хотя бы одна переменная там находится.
"Или все сапоги на тумбочке, или все сапоги под тумбочкой".
Так что никаких чудес.
YuriBel вот блин, а что теперь делать то ? как заставить вещи считаться и сохраняться, вводить дополнительные входы для FB чтобы он с RETAIN переменных брал значения и продолжал считать дальше ?
Где-то попадались директивы, позволющие в ФБ исключить переменные из retain.
___
Ошибочка вышла, там речь шла о persistent.
{nonpersistent} исключение данных из persistent стр 150 из CoDeSys_V23_RU.pdf