с него родимого
Вид для печати
с него родимого
Ну вот и доде6лал под себя выкладываю то что получилось может кто то еще что то улучшит :)
У меня есть замечания и улучшения.
1. Нужно добавить еще одно условие сброса триггера RS1
Вложение 10384
Первоначально у меня было только это условие. И все работает нормально, но затем добавил два "параноидальных" условия "<=" и ">=" для случая если тележка продолжит движение при не исправном датчике заданного адреса.
При добавлении этих двух условий про условие "=" забыл.
2. У элемента PACK для адреса в моем проекте http://www.owen.ru/forum/showthread....l=1#post119997 использовался вход EN с инверсией. Назначение входа EN для элемента PACK_DW понятно из картинки
Вложение 10385
Если оставить EN без инверсии, то с дополнительным условием по п.1 программа работать не будет.
Еще не плохо было бы контролировать количество "1" в переменной POLOGENIE. Если оно будет больше одного, то имеет место неисправность какого-то датчика.
Готовых библиотечных функций для этогоне припомню что то.Цитата:
Еще не плохо было бы контролировать количество "1" в переменной POLOGENIE. Если оно будет больше одного, то есть неисправность какого-то датчика.
можно на ST написать нечто громоздкое но работать будет.
Например
IN: DWORD;
ALARM: BOOL;
IF (IN.0=FALSE AND IN.1=TRUE AND IN.2=TRUE) THEN
ALARM:=TRUE;
ELSIF
(IN.0=TRUE AND IN.1=FALSE AND IN.2=TRUE) THEN
ALARM:=TRUE;
ELSIF
(IN.0=TRUE AND IN.1=TRUE AND IN.2=FALSE) THEN
ALARM:=TRUE;
END_IF
Только надо учесть что у нас 32 входа нужно будет расписать 32 варианта с описанием состояний 32х входов
Проверка наличия всех положенных датчиков по пути (проскок) ?
А проверка "едем-едем - ничего не меняется" ?
Или кладем на такую мелочь ?
Код от alexva2006 посмотреть немогу. Есть таймер - ок. В Вашем - невидел.
Проверка проскоков есть там ? (Типа поехали из 2 в 8. Отвалился 4й)
Путем перебора всех не правильных комбинаций идти нельзя. Слишком большая комбинация возможных состояний.
Ровно 32 перебора будет если с помощью CASE сравнить значение только с допустимыми комбинациями.
Код:VAR
POLOGENIE_OUT: DWORD;
ALARM: BOOL;
END_VAR
Тело программы
CASE POLOGENIE_OUT OF
2#00000000000000000000000000000000: ALARM:=FALSE;
2#10000000000000000000000000000000: ALARM:=FALSE;
2#01000000000000000000000000000000: ALARM:=FALSE;
2#00100000000000000000000000000000: ALARM:=FALSE;
2#00010000000000000000000000000000: ALARM:=FALSE;
.............................................................................
2#00000000000000000000000000000001: ALARM:=FALSE;
ELSE
ALARM:=TRUE;
END_CASE