Моделирование НДА с использованием Codesys

Автор работы: Пользователь скрыл имя, 10 Апреля 2013 в 22:35, отчет по практике

Краткое описание

Язык LD (Ladder Diagram) – графический язык, основанный на принципах релейно-контакт-ных схем (элементами релейно-контактной логики являются: контакты, обмотки реле, вертикальные и горизонтальные перемычки и др.) с возможностью использования большого количества различных функциональных блоков. Язык релейных схем существует со времен Т. Эдисона и адарптирован к ПЛК в начале 1970-х годов. Символика этого языка была заимствована из проектирования в области электротехники.

Содержание работы

Введение. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1. Элементы языка LD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
2. Представление автомата в виде структурированного текста. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1. Объявления переменных. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4
2.2. Листинг программы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3. Отладка и тестирование. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5
3. Построение схемотехнических элементов с использованием языка LD. . . . . . . . . . . . . . . . . . . .7
3.1. Пример СЛУ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7
3.1.1. Реализация. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1.2. Отладка и тестирование. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2. Сдвигающий регистр. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.1. Реализация. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.2. Отладка и тестирование. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.3. 4-разрядный счетчик. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.3.1. Реализация. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.3.2. Отладка и тестирование. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4. Моделирование автомата с помощью лестничных диаграмм. . . . . . . . . . . . . . . . . . . . . . . . . . . .14
5. Язык функциональных блоков (FBD). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16
5.1. Реверсивный счетчик. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16
5.1.1. Реализация. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.1.2. Отладка и тестирование. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.2. Реализация автомата на языке FBD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.2.1. Реализация. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.2.2. Отладка и тестирование. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
6. Язык IL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6.1. Кодовый замок. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22
6.1.1. Реализация. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6.1.2. Отладка и тестирование. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
6.2. Реализация автомата на языке IL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.2.1. Реализация. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.2.2. Отладка и тестирование. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
7. Моделирование автомата на языке CFC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26
8. Реализация автомата на языке SFC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
9. Комбинированные схемы на языке LD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
10. Реализация и моделирование иерархических устройств на CODESYS. . . . . . . . . . . . . . . . . . .35
10.1. Реализация функционального блока АЛУ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
10.2. Реализация главного модуля. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36
10.3. Отладка и тестирование. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36
Заключение. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
Список литературы. . . . . . . . . . . . . . . .

Содержимое работы - 1 файл

Отчет о преддипломной практике.doc

— 1.45 Мб (Скачать файл)

Видим, что M = HL = TRUE.

3.2. Сдвигающий  регистр

Попробуем разработать  модель сдвигающего регистра R555ИР1. Запишем уравнения для i-го выхода:

, где E – флаг режима (при E = 1 выполняется параллельная запись, при E = 0 – сдвиг влево). При i=0 Qi-1=S0

3.2.1. Реализация

Листинг объявлений:

PROGRAM PLC_PRG

VAR_INPUT

C: BOOL;

E: BOOL;

S0: BOOL;

D0: BOOL;

D1: BOOL;

D2: BOOL;

D3: BOOL;

END_VAR

VAR

NQ0: BOOL;

NQ1: BOOL;

NQ2: BOOL;

NQ3: BOOL;

END_VAR

VAR_OUTPUT

Q0: BOOL;

Q1: BOOL;

Q2: BOOL;

Q3: BOOL;

END_VAR

Рис. 11. LD-диаграмма

3.2.2. Отладка и тестирование

Вначале запишем в  регистр 0110 (рис. 12).

Рис. 12. После записи значения

Далее сдвинем один раз при S0 = 0 и еще один – при S0 = 1 (рис. 13).

Рис. 13. После двух сдвигов

Установилось значение 1001. Действительно, SL(SL(0110, 0), 1) = SL(1100, 1) = 1001.

3.3. 4-разрядный счетчик

Для счетчика общая формула i-го разряда будет выглядеть следующим образом:

(считается, что счет ведется  во возрастанию, и вход сброса  R является инверсным)

3.3.1. Реализация

Листинг объявлений:

PROGRAM PLC_PRG

VAR_INPUT

C: BOOL;

RST: BOOL := TRUE;

END_VAR

VAR_OUTPUT

Q0: BOOL;

Q1: BOOL;

Q2: BOOL;

Q3: BOOL;

CR: BOOL;

END_VAR

Рис. 14. LD-диаграмма

3.3.2. Отладка и тестирование

Для начала «просчитает 3 импульса. Получаем результат (см. рис 15).

Рис. 15. После 3 «просчетов»

Действительно, в счетчике хранится значение 3. Теперь сбросим счетчик (рис. 16).

Рис. 16. После сброса

Далее сделаем 15 «просчетов».

Рис. 17. После 15 «просчетов». Установился бит переноса (CR)

Заметим, что установился  выход переноса (см. рис 17, CR). Когда значение на счетчике достигает 15, устанавливается бит переноса. После очередного «просчета» этот бит сбросится (рис. 18). Это может быть использовано для построения многоразрядных счетчиков.

Рис. 18. После 16-го просчета. Бит переноса сбросился

 

 

 

4. Моделирование  автомата с помощью лестничных  диаграмм

Теперь попытаемся промоделировать  автомат из раздела 2 с помощью  лестничных диаграмм. Листинг объявлений останется неизменным. Но реализация несколько изменится и будет представлена в виде диаграммы на рис. 19.

Рис. 19. LD-диаграмма автомата

Проведем отладку и тестирование на тех же комбинациях входных сигналов, что и ы разделе 2.

Рис. 20. Шаг 1

Рис. 21. Шаг 2

Рис. 22. Шаг 3

Сравним результаты текущего и 2-го разделов. Они полностью совпадабт. Это означает правильность реализации.

5. Язык функциональных блоков (FBD)

5.1. Реверсивный  счетчик

Далее попытаемся реализовать  реверсивный счетчик на языке FBD. Для реверсивного счетчика функция для i-го выхода будет выглядеть следующим образом:

5.1.1. Реализация

Листинг объявлений

PROGRAM PLC_PRG

VAR_INPUT

E0: BOOL;

E1: BOOL;

RST: BOOL := TRUE;

END_VAR

VAR

NQ0: BOOL;

NQ1: BOOL;

NQ2: BOOL;

NQ3: BOOL;

END_VAR

VAR_OUTPUT

Q0: BOOL;

Q1: BOOL;

Q2: BOOL;

Q3: BOOL;

CR0: BOOL;

CR1: BOOL;

END_VAR

Рис. 23. FBD-диаграмма

5.1.2. Отладка и тестирование

Для начала выполним 3 «просчета» вперед. Установилось значение 0011 (рис. 24).

Рис. 24. После 3 «просчетов» вперед

Далее выполним 3 просчета назад (рис. 25).

Рис. 25. После 3 «просчетов» назад

Заметим, что установился  выход CR1. Это выход переноса по нисходящему счету. Когда при нисходящем счете значение достигает 0000, этот выход устанавливается в TRUE. Это используется для построения счетчиков с большей разрядностью. Далее сделаем 15 «просчетов» вперед (рис. 26).

Рис. 26. После 15 «просчетов» вперед

Мы видим, что установился  выход CR0. Этот выход аналогичен CR1, но активируется, когда значение 1111 достигается при восходящем счете.

5.2. Реализация автомата на языке FBD

Теперь реализуем автомат  из п. 2 на языке FBD.

5.2.1. Реализация

Листинг обяъвлений:

PROGRAM PLC_PRG

VAR

S0: BOOL := TRUE;

S1: BOOL;

S2: BOOL;

S3: BOOL;

S4: BOOL;

S5: BOOL;

NS0: BOOL := TRUE;

NS1: BOOL;

NS2: BOOL;

NS3: BOOL;

NS4: BOOL;

NS5: BOOL;

END_VAR

VAR_INPUT

X1: BOOL;

X2: BOOL;

X3: BOOL;

X4: BOOL;

END_VAR

VAR_OUTPUT

Y0: BOOL;

Y1: BOOL;

Y2: BOOL;

Y3: BOOL;

Y4: BOOL;

END_VAR

Рис. 27. FBD-диаграмма

5.2.2. Отладка и тестирование

Выполним те же шаги, что  и в п. 2 (рис. 28-30)

Рис. 28. Шаг 1

Рис. 29. Шаг 2

Рис. 30. Шаг 3

Комбинации состояний  и выходных сигналов совпадают с  аналогичными в пп. 2 и 4. Это еще  раз подтверждает правильность реализации.

6. Язык IL

6.1. Кодовый  замок

В данном разделе попробуем  реализовать кодовый замок на языке IL. На выходе должно появляться значение TRUE, если входное число «правильное».

6.1.1. Реализация

Листинг объявлений

PROGRAM PLC_PRG

VAR

Y1: INT;

Y2: INT;

Y3: INT;

Y4: INT;

END_VAR

VAR_INPUT

X1: INT;

X2: INT;

X3: INT;

X4: INT;

END_VAR

VAR_OUTPUT

Z: BOOL;

END_VAR

 

Листинг IL-инструкций

6.1.2. Отладка и тестирование

Пусть правильное значение равно 9216. Пусть ввели, например, 3796. Посмотрим, что из этого получится (рис. 31).

Рис. 31. Введен неправильный код

Мы увидели значение FALSE. Код неверен. Пусть теперь другой пользователь ввел 9216 (рис. 32)

Рис. 32. При вводе правильного кода

.Значение Z установилось в TRUE. Код верен.

6. 2. Моделирование автомата на языке IL

Попробуем реализовать  и промоделировать автомат из пп. 2, 4, 5.2 уже с помощью языка IL.

6.2.1. Реализация

Листинг объявлений

PROGRAM PLC_PRG

VAR

S0: BOOL := TRUE;

S1: BOOL;

S2: BOOL;

S3: BOOL;

S4: BOOL;

S5: BOOL;

NS0: BOOL := TRUE;

NS1: BOOL;

NS2: BOOL;

NS3: BOOL;

NS4: BOOL;

NS5: BOOL;

OR1: BOOL;

END_VAR

VAR_INPUT

X1: BOOL;

X2: BOOL;

X3: BOOL;

X4: BOOL;

END_VAR

VAR_OUTPUT

Y0: BOOL;

Y1: BOOL;

Y2: BOOL;

Y3: BOOL;

Y4: BOOL;

END_VAR

Листинг инструкций

6.2.2. Отладка и тестирование

Выполним уже знакомые нам шаги из предыдущих разделов, где этот автомат моделировали на других языках CODESYS (рис. 33-35).

Рис. 33. Шаг 1

Рис. 34. Шаг 2

Рис. 35. Шаг 3

Мы снова получили те же результаты, что и на других языках. Реализация снова правильна.

7. Моделирование автомата на языке CFC

Попробуем реализовать  тот же автомат на языке CFC.

PROGRAM PLC_PRG

VAR

S0: BOOL := TRUE;

S1: BOOL;

S2: BOOL;

S3: BOOL;

S4: BOOL;

S5: BOOL;

NS0: BOOL := TRUE;

NS1: BOOL;

NS2: BOOL;

NS3: BOOL;

NS4: BOOL;

NS5: BOOL;

END_VAR

VAR_INPUT

X1: BOOL;

X2: BOOL;

X3: BOOL;

X4: BOOL;

END_VAR

VAR_OUTPUT

Y0: BOOL;

Y1: BOOL;

Y2: BOOL;

Y3: BOOL;

Y4: BOOL;

END_VAR

Рис. 36. CFC-диаграмма

Выполним те же шаги, что и при моделировании на других языках (рис. 37-39).

Рис. 37. Шаг 1

Рис. 38. Шаг 2

Рис. 39. Шаг 3

Итак, получены те же самые  результаты. Значит, автомат снова  реализован верно. Но при моделировании на языке CFC необходимо учесть одно замечание. После вводя схемы на языке CFC необходимо упорядочить элементы в соответствии с потоком данных.

8. Реализация автомата на языке SFC

Теперь попробуем реализовать  тот же автомат на языке SFC.

Листинг объявлений

PROGRAM PLC_PRG

VAR

S0: BOOL := TRUE;

S1: BOOL;

S2: BOOL;

S3: BOOL;

S4: BOOL;

S5: BOOL;

NS0: BOOL := TRUE;

NS1: BOOL;

NS2: BOOL;

NS3: BOOL;

NS4: BOOL;

NS5: BOOL;

OR1: BOOL;

END_VAR

VAR_INPUT

X1: BOOL;

X2: BOOL;

X3: BOOL;

X4: BOOL;

END_VAR

VAR_OUTPUT

Y0: BOOL;

Y1: BOOL;

Y2: BOOL;

Y3: BOOL;

Y4: BOOL;

END_VAR

Рис. 40. SFC-диаграмма

К шагам можно привязывать  действия, написанные на других языках ПЛК. К шагам данной диаграммы  привязаны следующие действия:

Рис. 41. CHECK_NS0

Рис. 42. CHECK_NS1

CHECK_NS2:

NS2:= S0 AND X1 OR S1 AND NOT X1 AND X2;

Рис. 43. CHECK_NS3

Рис. 44. CHECK_NS4

Рис. 45. CHECK_NS5

Рис. 46. SET_Ys

SET_Ss:

S0:= NS0;

S1:= NS1;

S2:= NS2;

S3:= NS3;

S4:= NS4;

S5:= NS5;

Выполним те же шаги, что  и при моделировании на других языках (рис. 47-49).

Рис. 47. Шаг 1

Рис. 48. Шаг 2

Рис. 49. Шаг 3

Итак, снова получены те же самые результаты. Реализация правильна.

9. Комбинированные схемы на языке LD

Язык LD поддерживает возможность добавления функциональных блоков наряду с контактами и обмотками. Попробуем использовать эту возможность м промоделировать АЛУ следующего вида:

Таблица 2. Алгоритм работы АЛУ

E0

E1

Операция

0

0

R0 := R0 + R1

0

1

R0 := R0 – R1

1

0

R0 := R0 * R1

1

1

R0 := R0 / R1


Листинг объявлений:

PROGRAM PLC_PRG

VAR

R0: INT;

R1: INT;

E0: BOOL;

E1: BOOL;

END_VAR

Рис. 50. LD-диаграмма с функциональными блоками

Для начала прибавим к R0 12.

Рис. 51. Прибавили 12...

Видно, что R0 = 12. Теперь умножим R0 на 6.

Рис. 52. Умножили на 6...

R0 = 72. Далее вычтем 8.

Рис. 53. Вычли 8...

R0 = 64. И. наконец, разделим на 16.

Рис. 54. Разделили на 16...

В результате получили 4. Действительно, (12*6 – 8).16 = 64.16 = 4.

10. Реализация и моделирование иерархических устройств на CODESYS

В данном разделе попытаемся промоделировать систему «2 АЛУ» (Two ALU) на CODESYS. Каждое АЛУ представим в виде функционального блока.

10.1. Реализация функционального блока АЛУ

Данный функциональный блок реализован на языке LD с использованием функциональных блоков (как в разделе 8).

Листинг объявлений

FUNCTION_BLOCK POU1

VAR_INPUT

INIT_I: BOOL;

EADD: BOOL;

ESUB: BOOL;

D1: INT;

D2: INT;

END_VAR

VAR_OUTPUT

INIT_O: BOOL;

CNT: BOOL;

RES: INT := 3;

END_VAR

VAR

N: INT := 13;

END_VAR

Рис. 55. LD-диаграмма

10.2. Реализация главного модуля

Главный модуль реализован на языке CFC.

Листинг объявлений

PROGRAM PLC_PRG

VAR

INST1: POU1;

INST2: POU1;

END_VAR

VAR_INPUT

INIT: BOOL := TRUE;

END_VAR

Рис. 56. CFC-диаграмма

10.3. Отладка и тестирование

Возможны 3 варианта развития событий: N1>N2, B1<N2, N1=N2.

Рис. 57. При N1=N2 система "зацикливается" на одних и тех же значениях RES

Рис. 58. При N1<N2 знаяения RES будут постепенно уменьшаться

Рис. 59. При N1>N2 значения RES постепенно увеличиваются

Итак, мы рассмотрели 3 случая работы системы. При N1≠N2 значения будут постепенно изменяться на N1–N2.

 

Заключение

Итак, мы изучили программу CODESYS и промоделировали несколько устройств (СЛУб сдвигающий регистр, 4-разрядный счетчик, НДА). Хотя язык LD и существует со времен Т. Эдисона, он используется вплоть до наших дней, ибо XXI век – век компьютерных и информационных технологий и инноваций.

Спосок  литературы

  1. И. Г. Минаев, В. В, Самойленко. Программируемые логические контроллеры. Ставрополь «АГРУС», 2009.
  2. Н. П. Деменков. Языки программирования промышленных контроллеров. Москва Издательство МГТУ им. Н. Э. Баумана, 2004.



Информация о работе Моделирование НДА с использованием Codesys