Инструкция распределенного перехода JL имеет ряд рекомендуемых "конструкций" для разрешения в т.ч. ошибок Так как программа в контроллере выполняется в цикле, то каждый раздел обработки инструкции JU должен иметь "выход" на конец Вашего блока, что бы продолжалось выполнение последующей программы, при следующем проходе считывается значение (число) состояния и осуществляется заход в нужное
Шаблон общего вида, ну к примеру, для трех переходов:
L #STATE_WORD; //загрузка слова состояния для перехода
JL GT_3; // метка перехода, которая указывает на конец списка
JU ST_0; //переход на начальное состояние алгоритма
JU ST_1; // переход на 1 состояние алгоритма
JU ST_2; // переход на i состояние алгоритма (если в #STATE_WORD число>3, больше чем объявлено инструкций JU, то тогда JL перебросит на метку ошибки GT_3)
GT_3: JU Err; // переход на метку обработок ошибок инструкции JL
NETWORK
TITLE =Обработка начального состояния
ST_0: A #Входной параметр 1; // условие 1
A #Входной параметр 2; //условие 2
JCN End; //если условие не выполнено уход на метку конца блока
= #Выходная переменная 1; //Действие 1
= # Выходная переменная 2; //Действие 2
= # Временная переменная i; //Действие i
L 1; //Запись номера следующего перехода (состояния)
T #STATE_WORD; //загрузка номера следующего состояния
JU End; //Безусловный переход на конец блока
NETWORK
TITLE =Обработка состояния 1
ST_1: A # Входной параметр 1; // условие 1
AN # Входной параметр 1; //условие 2
JCN Tr01; //если условие не выполнено уход на метку ветвления алгоритма
= #Временная переменная 1; //Действие 1
= # Временная переменная 2; //Действие 2
= # Временная переменная i; //Действие i
L 2; //переход по дуге графа в требуемое состояние
T #STATE_WORD; //загрузка номера следующего состояния
JU End; //Безусловный переход на конец блока
Tr01: A # Входной параметр 1; // номер перехода (дуги) автомата и условие 1
AN # Входной параметр 1; //условие 2
JCN End; //если условие не выполнено уход на метку
L 0; //переход по дуге графа в начальное состояние
T #STATE_WORD; //загрузка номера следующего состояния
JU End; //Безусловный переход на конец блока
И т.д.
NETWORK
TITLE =Обработка ошибки распределенного перехода
Err: CLR
= Выходной параметр 1;
= Выходной параметр 2;
= Выходной параметр i;
L 0; //и загрузить число 0 начальное состояние
T #STATE_WORD; //в слово состояния
JU End; //выйти на конец блока
End: NOP 0; // конец блока
написал программу для последовательного запуска маршрутов с "хвоста" к "голове. в кодесисе (легче проверять). работает. программа состоит из однотипных частей (строки 2-6). как правильно сделать это с помощью функциональных блоков в WinPLC?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
без FB и DB у меня получится, например для 12 механизмов около 50 строчек. для дальнейшей наладки на обьекте эти строчки для меня будут читабельнее, чем первый пост. я хотел бы именно эти 50 строк оптимизировать с помощью FB и DB.
это вопрос по обучению новичка)) вставляешь в нетворк OB1 созданный FB1 и называешь его DB1. в следущий нетворк вставляешь FB1 и называешь DB2. в FB1 логика одна, а DB обрабатывают входные сигналы и выдают выходные, но каждый свои? или их вызывать нужно? в общем с FB и DB проблемы...
можешь и в один нетворк вставить, все равно будут последовательно обрабатываться. А так все правильно, должно работать. Как я и написал возможные проблемы изза "#trigger не делай темповой никогда". Темповые переменные я вообще стараюсь не использовать, а если использую, то сначала обнуляю, потом использую, лучше создай в STAT области DB твоего FB
Да, у переменных типа TEMP есть особенность... Гораздо более понятно и четко работают переменные типа STAT. Если поменять TEMP на STAT и все работает, значит играют свою роль особенности временных переменных.
В чем их особенность? Значение переменных TEMP нужно использовать до окончания текущего цикла. После перехода на следующий цикл значение в этой переменной может измениться, т.е. не следует ждать, что там сохранилось значение, записанное в предыдущем цикле (хотя такое иногда может быть). Эти переменные вообще не следует применять, если нужно хранить значение более одного цикла программы. В основном применяются при "многоэтажных" математических вычислениях.
Господа, добрый день!
Настало и мое время автоматизировать элеватор)))
Перечитал тему, вопросов канеш много))
У кого нить есть документация по проектированию АСУТП элеватора, или список?
Спасибо!
да, если вдруг у кого остался список, пока изучаю "ПРИКАЗ
от 21 ноября 2013 г. N 560 ОБ УТВЕРЖДЕНИИ ФЕДЕРАЛЬНЫХ НОРМ И ПРАВИЛ
В ОБЛАСТИ ПРОМЫШЛЕННОЙ БЕЗОПАСНОСТИ "ПРАВИЛА БЕЗОПАСНОСТИ
ВЗРЫВОПОЖАРООПАСНЫХ ПРОИЗВОДСТВЕННЫХ ОБЪЕКТОВ ХРАНЕНИЯ
И ПЕРЕРАБОТКИ РАСТИТЕЛЬНОГО СЫРЬЯ
Есть пока нерешенный вопрос, может кто подскажет:
Как считывать температуру с термоподвесок, на одной термоподвеске 3 датчика, они имеют (!) один общий провод, при подключении к термопреобразователям (НПТ-2 ОВЕНА) - сигнал сходит с ума и неправильно работает. Как мне считать эту температуру пока не нашел решения из-за этого общего провода. Планирую делать на базе Сименса, с модбасом связываться не хочу. Мультиплексоров не найду подходящих. Такая вот беда.
Спасибо!