Профиль должен быть заполнен на русском языке кириллицей. Заполнение профиля заведомо ложными или некорректными данными - причина возможного отказа в регистрации на форуме.

Unity Pro

PLC, прочие контроллеры, промышленные компьютеры, операторские панели

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

Unity Pro

Сообщение ramis » 19 апр 2012, 15:25

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

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

В общем, имеется система, элементы которой взаимодействуют между собой по 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
преподаватель
преподаватель
Сообщения: 1400
Зарегистрирован: 01 сен 2008, 17:32
Ф.И.О.: Пупена Александр
Откуда: Киев, Украина
Поблагодарили: 1 раз
Контактная информация:

Re: Unity Pro

Сообщение san » 19 апр 2012, 16:28

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


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

Re: Unity Pro

Сообщение ramis » 19 апр 2012, 16:45

Я так понимаю исходник? Как и куда кинуть?

Аватара пользователя

san
преподаватель
преподаватель
Сообщения: 1400
Зарегистрирован: 01 сен 2008, 17:32
Ф.И.О.: Пупена Александр
Откуда: Киев, Украина
Поблагодарили: 1 раз
Контактная информация:

Re: Unity Pro

Сообщение san » 19 апр 2012, 18:14

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

Аватара пользователя

san
преподаватель
преподаватель
Сообщения: 1400
Зарегистрирован: 01 сен 2008, 17:32
Ф.И.О.: Пупена Александр
Откуда: Киев, Украина
Поблагодарили: 1 раз
Контактная информация:

Re: Unity Pro

Сообщение san » 19 апр 2012, 19:17

Думаю что ошибка у Вас - самая распостраненная - неправильное использование параметра 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, 14:38
Ф.И.О.: М.Р�.

Re: Unity Pro

Сообщение ramis » 19 апр 2012, 19:46

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

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

Аватара пользователя

san
преподаватель
преподаватель
Сообщения: 1400
Зарегистрирован: 01 сен 2008, 17:32
Ф.И.О.: Пупена Александр
Откуда: Киев, Украина
Поблагодарили: 1 раз
Контактная информация:

Re: Unity Pro

Сообщение san » 19 апр 2012, 22:04

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


Вернуться в «Средний уровень автоматизации»



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость