Вот и я о том - не понимая, как оно работает в самой своей основе - я не могу правильно им пользоваться.
Ушёл читать.
Вот и я о том - не понимая, как оно работает в самой своей основе - я не могу правильно им пользоваться.
Ушёл читать.
Добрый день, уважаемые коллеги! Имеются порционные весы- один отвес:50кг+-200гр, совсем зациклился-не могу сообразить как организовать суммарный итог веса с нарастанием(суммировать вес порций) на ST, идеи, код, если возможно..
Это понятно, а как формировать этот weight(суммарный вес, что УЖЕ прошел через весы?), весы набрались-разгрузились, а мне надо это значение сохранить и суммировать затем с весом следующей порции итд до бесконечности) тут и с трезвой головой не разберешься!
PS. Утром все получилось, благодаря трезвому совету малопьющего Вольда!
Необходимо засечь время между событиями А и Б (сигналы на дискретные входы).
Если использовать ФБ CurTimeEx то получу два значения, но оба они записаны как структуры, как найти разность между ними или как, например, перевести TimeDate в формат DATE_AND_TIME ?
Нужно с урж2км перевести учёт расхода с помощью плк 100, по протолку модбасу,читал инструкцию не нашел ни в одной,пробовал пример у плк 100..
Плк 100 должен запросить данные по расходу с урж2км,чтоб узнать учёт расхода не могу понять как сделать..
Сapzap, прочитал. Вот такое сделал:
F_TRIGgreen1(CLK:=STARTSTOP , Q=> );
IF F_TRIGgreen1.Q=TRUE THEN
q:=1;
z:=1; (*вспомогательная переменная*)
TOF_Green1.IN:=TRUE;
TOF_Green1.PT:=T#5s; (*можно изменить первоначальную длительность горения*)
TOF_Green1; (*взвожу таймер*)
TOF_Green1.IN:=FALSE;
TOF_Green1; (*запускаю отсчёт таймера*)
TON_Green1.IN:=FALSE;
TON_Green1.PT:=T#0.5S;
TON_Green1; (*обнуляю таймер*)
END_IF
(*теперь надо заставить лампу Green1 зажечься на 0,5с, погаснуть на 0,5с и так 10 раз*)
IF F_TRIGgreen1.Q = TRUE OR z=1 THEN
IF q<=10 THEN
TOF_Green1; (*вызываю таймер чтобы он глянул, как там время; первый раз отсчитывает со строки 8, потом будет со строки 37*)
green1:=TOF_Green1.Q;
IF TOF_Green1.Q=FALSE THEN (* проверяю, окончен ли отсчёт*)
TON_Green1(IN:= TRUE); (*запускаю отсчет негорения*)
green1:=FALSE; (*можно и так - всё равно она не должна гореть в этом месте*)
END_IF
IF (*TOF_Green1.Q=FALSE AND*) TON_Green1.Q=TRUE THEN (* проверяю, кончилось ли время негорения *)
TOF_Green1.IN:=TRUE;
TOF_Green1.PT:=T#0.5s;
TOF_Green1;
TOF_Green1.IN:=FALSE;
TOF_Green1; (*перезапуск таймера периода горения*)
TON_Green1(IN:=FALSE); (*обнуляю таймер негорения*)
q:=q+1; (*увеличиваю счётчик циклов*)
END_IF
END_IF
END_IF (* конец действия ИФ по F_Triggreen1*)
Это работает, но для такой простой задачи - достаточно корявый "код"
Никак не могу понять, почему, если я вместо приращаемой каждый цикл переменной q и IF использую While или FOR для отсчета количества циклов - ПЛК перезагружается, а режим эмуляции пишет о WatchDog и зацикливании....
цикл-то должен 5 раз пройти и кончится... причём здесь зацикленность.
потому что программирование контроллеров отличается от программирования на ПК
если программный цикл(for,while) задерживает исполнение очередного цикла плк на время большее чем заданное макс.время циклав настройках конфигуратора, произойдет перегрузка
ЗЫ попробуйте как на картинке
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран