- •Лабораторна робота №1 «Ознайомлення з Factory I/o. Створення простого конвеєра»
- •Панель інструментів Кнопки панелі інструментів:
- •Рядок стану
- •Налаштування (Options)
- •Базові гарячі клавіші та комбінації
- •Режими роботи
- •Режим редагування
- •Режим запуску
- •«Лабораторна робота №2» «Підключення моделі конвеєра та сцени до codesys. Керування за допомогою віртуального plc через “opc Data Access”»
«Лабораторна робота №2» «Підключення моделі конвеєра та сцени до codesys. Керування за допомогою віртуального plc через “opc Data Access”»
Мета: Підключення готової сцени до віртуального контролера та його програмування у середовищі CodeSys. Перевірка можливостей та реалізації поєднання моделі конвеєра або автоматичної лінії сцени Factory I/O та запрограмовування контролера в середовищі CodeSys.
Теоретична частина.
У цій лабораторній роботі показано, як використовувати CodeSys разом із Factory I/O через OPC Data Access.
Дотримуючись інструкцій нижче, Ви сторите новий проект CodeSys, налаштуєте його роботу із Factory I/O та створите програму для керування сценою «Sorting by Height (Advanced) scene»
Приклад коду, який використовується в даному посібнику, заснований на рішеннях, знайдених в книзі «Industrial Automation Practices».
УВАГА! Для виконання цієї лабораторної роботи у Вас повинен бути встановлений CODESYS 3.5 SP8
__________________________________________________________
СТВРЕННЯ ТА ПІДГОТОВКА ПРОГРАМНОГО КОДУ
Запустити CodeSys та створити новий проект.
Виберіть Standart Project зі списку шаблонів та вкажіть назву проекту. (наприклад Tutorial). Натисніть ОК.
У вікні Standard Project виберіть пристрій управління CODESYS Control Win V3 (3S - Smart Software Solutions GmbH) та у вікні PLC_PRG мову програмування Structured Text (ST). Натисніть ОК.
Клацніть ПКМ на Application і виберіть пункт Add Object > Global variable List... В списку імен введіть FIO та натисніть конпку Add.
Відкрийте список FIO за допомогою х2 ЛКМ і скопіюйте та вставте наступні глобальні змінні. Ці змінні будуть використовуватись Factori I/O та CodeSys для обміну даними між собою через OPC Data Access (вони є точками входів/виходів).
Global Variables List (I/O) |
|
|
|
VAR_GLOBAL |
|
|
iAtEntry : BOOL; |
|
|
iLowBox : BOOL; |
|
|
iHighBox : BOOL; |
|
|
iAtTurnEntry : BOOL; |
|
|
iAtLoadPos : BOOL; |
|
|
iAtUnloadPos : BOOL; |
|
|
iAtFront : BOOL; |
|
|
iAtRightEntry : BOOL; |
|
|
iAtLeftEntry : BOOL; |
|
|
iAtRightExit : BOOL; |
|
|
iAtLeftExit : BOOL; |
|
|
|
|
|
oFeederConveyor : BOOL; |
|
|
oEntryConveyor : BOOL; |
|
|
oLoad : BOOL; |
|
|
oUnload : BOOL; |
|
|
oTurn : BOOL; |
|
|
oLeftConveyor : BOOL; |
|
|
oRightConveyor : BOOL; |
|
|
END_VAR |
На дереві пристроїв (Drivers Tree) x2 ЛКМ на PLC_PRG (PRG) і скопіюйте наступні змінні. Це змінні, які Ви будете використовувати у Вашій програмі.
Global Variables List (I/O) |
|
|
|
PROGRAM PLC_PRG |
|
|
VAR |
|
|
F_AtEntry : F_TRIG; |
|
|
F_AtTurnEntry : F_TRIG; |
|
|
F_AtRightEntry : F_TRIG; |
|
|
F_AtLeftEntry : F_TRIG; |
|
|
F_AtRightExit : F_TRIG; |
|
|
F_AtLeftExit : F_TRIG; |
|
|
|
|
|
Pallet_on_left : BOOL := FALSE; |
|
|
Pallet_on_right : BOOL := FALSE; |
|
|
Idle : BOOL := TRUE; |
|
|
Charging : BOOL := FALSE; |
|
|
Turns_charged : BOOL := FALSE; |
|
|
Discharging : BOOL := FALSE; |
|
|
Turns_Discharged : BOOL := FALSE; |
|
|
Turntable_busy : BOOL := FALSE; |
|
|
Discharge_direction : BOOL := FALSE; |
|
|
Entry_busy : BOOL := FALSE; |
|
|
Pallet_on_entry : BOOL := FALSE; |
|
|
Count : WORD := 16#8000; |
Тепер скопіюйте та вставте наступник код. Це програма, яка керуватиме сценою Sorting by Height (Advanced)
Program |
|
|
|
F_AtEntry(CLK := FIO.iAtEntry); |
|
|
F_AtTurnEntry(CLK := FIO.iAtTurnEntry); |
|
|
F_AtRightEntry(CLK := FIO.iAtRightEntry); |
|
|
F_AtLeftEntry(CLK := FIO.iAtLeftEntry); (* A pallet abandons the turntable, being charged onto the left exit conveyer *) |
|
|
F_AtRightExit(CLK := FIO.iAtRightExit); |
|
|
F_AtLeftExit(CLK := FIO.iAtLeftExit); (* A pallet abandons the left exit conveyer *) |
|
|
|
|
|
(**** LEFT EXIT CONVEYER CONTROL ****) |
|
|
(* Pallet_on_left represents the state of the left exit conveyer: if it carries a pallet, then Pallet_on_left = TRUE *) |
|
|
|
|
|
IF F_AtLeftExit.Q THEN (* When a pallet abandons the conveyer *) |
|
|
Pallet_on_left := FALSE; (* Reset Pallet_on_left *) |
|
|
END_IF; |
|
|
|
|
|
IF FIO.iAtLeftEntry THEN (* When there’s a pallet at the entry of the conveyer *) |
|
|
Pallet_on_left := TRUE; (* Set Pallet_on_left *) |
|
|
END_IF; |
|
|
|
|
|
FIO.oLeftConveyor := Pallet_on_left; (* Left exit conveyer runs for Pallet_on_left = TRUE *) |
|
|
|
|
|
(**** RIGHT EXIT CONVEYER CONTROL ****) |
|
|
|
|
|
IF F_AtRightExit.Q THEN |
|
|
Pallet_on_right := FALSE; |
|
|
END_IF; |
|
|
|
|
|
IF FIO.iAtRightEntry THEN |
|
|
Pallet_on_right := TRUE; |
|
|
END_IF; |
|
|
|
|
|
FIO.oRightConveyor := Pallet_on_right; |
|
|
|
|
|
(**** TURNTABLE CONTROL ****) |
|
|
|
|
|
IF Idle AND FIO.iAtTurnEntry THEN |
|
|
Idle := FALSE; |
|
|
Charging := TRUE; |
|
|
END_IF; |
|
|
|
|
|
IF Charging AND FIO.iAtFront THEN |
|
|
Charging := FALSE; |
|
|
Turns_charged := TRUE; |
|
|
END_IF; |
|
|
|
|
|
IF Turns_charged AND FIO.iAtUnloadPos THEN |
|
|
Turns_charged := FALSE; |
|
|
Discharging := TRUE; |
|
|
END_IF; |
|
|
|
|
|
(* The turntable discharges now onto both conveyers. Thus: *) |
|
|
|
|
|
IF Discharging AND (F_AtRightEntry.Q OR F_AtLeftEntry.Q) THEN |
|
|
Discharging := FALSE; |
|
|
Turns_Discharged := TRUE; |
|
|
END_IF; |
|
|
|
|
|
IF Turns_Discharged AND FIO.iAtLoadPos THEN |
|
|
Turns_Discharged := FALSE; |
|
|
Idle := TRUE; |
|
|
END_IF; |
|
|
|
|
|
IF F_AtTurnEntry.Q THEN |
|
|
Turntable_busy := TRUE; |
|
|
END_IF; |
|
|
|
|
|
IF Idle THEN |
|
|
Turntable_busy := FALSE; |
|
|
END_IF; |
|
|
|
|
|
(* Computing control outputs according to the current state of the turntable and the direction of the discharge *) |
|
|
FIO.oLoad := Charging OR Discharging AND Discharge_direction; |
|
|
|
|
|
(* oUnload is TRUE if the discharge is onto the left conveyer *) |
|
|
FIO.oUnload := Discharging AND NOT Discharge_direction; |
|
|
|
|
|
(* oTurn is TRUE if the discharge is onto the right conveyer *) |
|
|
FIO.oTurn := Turns_charged OR Discharging; |
|
|
|
|
|
(**** ENTRY CONVEYER CONTROL ****) |
|
|
IF F_AtEntry.Q THEN |
|
|
Count := ROL (Count,1); |
|
|
IF (Count = WORD#16#2) THEN |
|
|
Entry_busy := TRUE; |
|
|
END_IF; |
|
|
END_IF; |
|
|
|
|
|
IF F_AtTurnEntry.Q THEN |
|
|
(** Defining the direction of the discharge: the direction of the discharge changes every time a pallet is |
|
|
discharged from the entry conveyer onto the turntable. If Discharge_direction = FALSE, then the discharge is onto the right conveyer **) |
|
|
Discharge_direction := NOT Discharge_direction; |
|
|
|
|
|
Entry_busy := FALSE; |
|
|
Count := ROR(Count,1); |
|
|
|
|
|
IF (Count = WORD#16#8000) THEN |
|
|
Pallet_on_entry := FALSE; |
|
|
END_IF; |
|
|
END_IF; |
|
|
|
|
|
IF FIO.iAtEntry THEN |
|
|
Pallet_on_entry := TRUE; |
|
|
END_IF; |
|
|
|
|
|
FIO.oEntryConveyor := Pallet_on_entry AND (NOT Turntable_busy OR NOT FIO.iAtTurnEntry); |
|
|
|
|
|
(**** FEEDING CONVEYER CONTROL ****) |
|
|
FIO.oFeederConveyor := NOT Entry_busy OR NOT FIO.iAtEntry; |
Запустіть CoDeSys SoftPLC шляхом запуску CODESYS Control Win V3.
Поверніться до CodeSys і на дереві проекту х2 ЛКМ на Device (CODESYS Control Win V3) і потім на Communication Settings. Після цього клацніть на Scan network... Після цього оберіть мережевий шлях до контролера та натисніть кнопку ОК. Зверніть увагу, що назву пристрою можна змінити, натиснувши на Device > Rename active device.
На панелі інструментів клацніть на Build > Build (F11), щоб завантажити програму для SoftPLC.
Тепер ПКМ на Application та виберіть Add Object > Symbol Configuration. Потім клацніть на Add та Build > Rebuild.
ПКМ на Symbol Configuration, щоб відкрити та оберіть FIO Symbols.
Натисність на Online > Login (Alt+F8). Коли Вам буде запропоновано завантажити програму, то натисніть Yes.
І, нарешті, натисніть на Debug > Start (F5)
На цьому налаштування коду програми в CodeSys завершено.
НАЛАШТУВАННЯ СЕРВЕРА ОРС (OPC Server)
Запустіть OPC Configurator.
Змініть частоту оновлення до 10 (мс) Update Rate 10 (ms)
Двічі клацніть на Connection і введіть ім’я контролера (PLC), яке Ви використали на кроці 9.
Клацніть на File > Save, щоб зберегти налаштування.
Тепер Ви можете закрити OPC Configurator.
НАЛАШТУВАННЯ FACTORY I/O
Відкрийте сцену Sorting by Height (Advanced) та натисніть File > Drivers (F4).
Оберіть OPC Client Data Access зі списку драйверів (Driver list) та оберіть CONFIGURATION
Виберіть CoDeSys.OPC.DA зі списку OPC серверів (OPC Server list). Після того клацніть на BROWSE ITEMS.
Поєднати на карті теги датчиків та виконавчих пристроїв так, як показано на малюнку нижче.
Після цього закрийте вікно драйверів і запустіть моделювання (Натисніть F5)
ЗАПУСК та ЗУПИНКА
Запустіть CODESYS SoftPLC шляхом запуску CODESYS Control Win V3
Натисність Online > Login (Alt+F8).
Коли Вам запропонують завантажити програму на ПЛК, то натисніть «Yes»
Потім натисніть Debug > Start (F5)
Готово.
Щоб зупинити, то повторіть крок 4.
