Автор работы: Пользователь скрыл имя, 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
Список литературы. . . . . . . . . . . . . . . .
Видим, что M = HL = TRUE.
3.2. Сдвигающий регистр
Попробуем разработать модель сдвигающего регистра R555ИР1. Запишем уравнения для i-го выхода:
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-го разряда будет выглядеть следующим образом:
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 век – век компьютерных и информационных технологий и инноваций.
Спосок литературы
Информация о работе Моделирование НДА с использованием Codesys