1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Unity Pro

Unity Pro (Control Expert), Quantum, Premium, M340, M580, Hybrid DCS, Process Expert, Zelio, Twido, M17*, M2**, SCADAPACK, SoMachine, MachineExpert, ZelioSoft, TwidoSoft, TwidoSuite, TelePace

Модератор: Специалисты SE

Ответить

Автор темы
ramis
здесь недавно
здесь недавно
Сообщения: 10
Зарегистрирован: 19 апр 2012, 15:38
Имя: М.Р�.
Страна: Россия

Unity Pro

Сообщение ramis »

Добрый день всем!

Я новичок в области автоматизации. Передо мной стоит задача вникнуть и разобраться что к чему.

В общем, имеется система, элементы которой взаимодействуют между собой по Modbus. Имеется контроллер Modicon M340 (Schneider Electric), который является мастером и Slave-устройства, которые представляют собой дискретный ввод и вывод. Задача следующая: организовать систему управления используя эти элементы.
То есть ПЛК считывает состояние входов по Modbus выполняет программу и записывает выхода опять же по Modbus.

В моем конкретном случае имеется 2 Slave-устройства входов (по 96 входов каждый) и 2 Slave-устройства выходов (по 96 выходов каждый). Физически соединил 7 выходов с 7 входами. Реализовал простенькую программу: включается выход 1 (при этом включается вход 1, т.к. соединен физически), тогда если вход 1 включился, то включается выход 2 (он соединен с входом 2), если вход 2=1, то выход 3=1 и т.д. Как только выход 8=1 выключается выход 1, при этом вся цепочка тухнет и начинается заново. Условно можно назвать этот режим "змейка".

Хочется сделать следующее: постоянно опрашивать входа, а выхода записывать только тогда, когда хотя бы один из них изменит свое значение. Считывание входов производится стандартно (с помощью функции READ_VAR), а для записи написал свой блок. Исходный код следующий:

if old_out[1]<>array_in[1] or old_out[2]<>array_in[2] then
old_out[1]:=array_in[1];
old_out[2]:=array_in[2];
write_var (ADDM(ADR),OBJ, 39999, 32, old_out,gest_wr);
end_if;

где array_in - текущие значения выходов;
old_array - последние запомненные и отправленные значения выходов
ADR - адрес Slave-устройства

Проблема в следующем, в какой-то момент "змейка" перестает выполнятся. Например, в Unity отображается, что выход 1=1, хотя физически он равен 0. И соответственно цепочка не выполняется.

Вот собственно и вопрос: Почему возникает такое?

Пожалуйста, посоветуйте что нибудь. Бьюсь над этим уже приличное время. Кажется что хожу где то рядом но не могу найти правильного решения.
Аватара пользователя

san
преподаватель
преподаватель
Сообщения: 1357
Зарегистрирован: 01 сен 2008, 18:32
Имя: Пупена Александр
Страна: Украина
город/регион: Киев
Поблагодарили: 6 раз

Re: Unity Pro

Сообщение san »

Киньте программу. Так будет быстрее.

Автор темы
ramis
здесь недавно
здесь недавно
Сообщения: 10
Зарегистрирован: 19 апр 2012, 15:38
Имя: М.Р�.
Страна: Россия

Re: Unity Pro

Сообщение ramis »

Я так понимаю исходник? Как и куда кинуть?
Аватара пользователя

san
преподаватель
преподаватель
Сообщения: 1357
Зарегистрирован: 01 сен 2008, 18:32
Имя: Пупена Александр
Страна: Украина
город/регион: Киев
Поблагодарили: 6 раз

Re: Unity Pro

Сообщение san »

Куда нибудь на файлобменник. Моежет мне непосредственно на почту.
Аватара пользователя

san
преподаватель
преподаватель
Сообщения: 1357
Зарегистрирован: 01 сен 2008, 18:32
Имя: Пупена Александр
Страна: Украина
город/регион: Киев
Поблагодарили: 6 раз

Re: Unity Pro

Сообщение san »

Думаю что ошибка у Вас - самая распостраненная - неправильное использование параметра GEST. 0-й бит (бит активности) 0-го слова этой таблицы используется для контроля за обработкой коммуникационной функции, там же результаты/ошибки обработки.
В Вашем случае алгоритм приблизительно должен быть таким:
0-й шаг - если бит активности в WRITE_VAR2 = 0, и нет ошибок в отчете - вызвать функцию чтения READ_VAR1, перейти на 1-й шаг
1-й - если бит активности READ_VAR1 = 0, и нет ошибок в отчете - выполнить Ваш алгоритм, вызвать функцию записи WRITE_VAR1, перейти на 2-й шаг
2-й шаг - если бит активности в WRITE_VAR1 =0, и нет ошибок в отчете - вызвать функцию чтения READ_VAR2, перейти на 3-й шаг
3-й шаг - если бит активности в READ_VAR2 =0, и нет ошибок в отчете - выполнить Ваш алгоритм, вызвать функцию записи WRITE_VAR2, перейти на 0-й шаг

Автор темы
ramis
здесь недавно
здесь недавно
Сообщения: 10
Зарегистрирован: 19 апр 2012, 15:38
Имя: М.Р�.
Страна: Россия

Re: Unity Pro

Сообщение ramis »

san, вот ссылка http://ifolder.ru/control/?file_id=3002 ... d6ad1a6109

но только я реализовывал нет так... просто брал стандартные блоки и gest нигде не использовал в явном виде..
Аватара пользователя

san
преподаватель
преподаватель
Сообщения: 1357
Зарегистрирован: 01 сен 2008, 18:32
Имя: Пупена Александр
Страна: Украина
город/регион: Киев
Поблагодарили: 6 раз

Re: Unity Pro

Сообщение san »

Я не хочу регистрироваться, лучше отправьте на pupena_san<sabaka>ukr.net
gest нужно обязательно использовать, даже в учебных примерах. Познакомьтесь со структурой и поймете почему.
Ответить

Вернуться в «ПЛК»