1. Концепції сходів
ClassicLadder — це тип мови програмування, спочатку реалізований на промислових PLC (він називається Ladder Programming). Він базується на концепції релейних контактів і котушок і може використовуватися для побудови логічних перевірок і функцій у спосіб, звичний для багатьох системних інтеграторів. Ladder складається з щаблів, які можуть мати розгалуження і нагадують електричну схему. Важливо знати, як оцінюються програми Ladder під час виконання.
Здається природним, що кожна рядок буде оцінюватися зліва направо, потім наступний рядок вниз і т. д., але в логіці драбини це працює не так. Логіка драбини «сканує» сходинки драбини 3 рази, щоб змінити стан виходів.
-
вхідні дані зчитуються та оновлюються
-
логіка зрозуміла
-
виходи встановлені
Спочатку це може заплутати, якщо вихід одного рядка зчитується входом іншого рядка. Після встановлення виходу буде проведено одне сканування, перш ніж другий вхід стане істинним.
Ще одна проблема з програмуванням рейок — це правило «Останній перемагає». Якщо у вас однаковий вихід у різних місцях вашої рейок, стан останнього буде таким, яким встановлений вихід.
2. Мови
Найпоширенішою мовою, що використовується під час роботи з ClassicLadder, є «ladder». ClassicLadder також підтримує послідовні функціональні схеми (Grafcet).
3. Компоненти
ClassicLadder складається з двох компонентів.
-
Модуль реального часу classicladder_rt
-
Модуль classicladder, що не працює в реальному часі (включаючи графічний інтерфейс)
3.1. Файли
Зазвичай компоненти ClassicLadder розміщуються у файлі custom.hal, якщо ви працюєте з конфігурацією, згенерованою StepConf. Їх не можна розміщувати у файлі custom_postgui.hal, інакше меню Ladder Editor буде неактивним.
|
Note
|
Файли сходинок (.clp) не повинні містити пробілів в назві. |
3.2. Модуль реального часу
Завантаження модуля ClassicLadder реального часу (classicladder_rt) можливе з файлу HAL або безпосередньо за допомогою команди halcmd. Перший рядок завантажує модуль ClassicLadder реального часу. Другий рядок додає функцію classicladder.0.refresh до сервопотоку. Цей рядок змушує ClassicLadder оновлюватися зі швидкістю сервопотоку.
loadrt classicladder_rt addf classicladder.0.refresh servo-thread
Швидкість потоку, в якому працює ClassicLadder, безпосередньо впливає на швидкість реагування на вхідні та вихідні дані. Якщо ви можете вмикати та вимикати перемикач швидше, ніж ClassicLadder може це помітити, то, можливо, вам потрібно пришвидшити потік. Найшвидша швидкість, з якою ClassicLadder може оновлювати сходинки, становить одну мілісекунду. Ви можете помістити його в швидший потік, але він не буде оновлюватися швидше. Якщо ви помістите його в потік, повільніший за одну мілісекунду, ClassicLadder буде оновлювати щаблі повільніше. Поточний час сканування буде відображатися на дисплеї секції, він округлюється до мікросекунд. Якщо час сканування перевищує одну мілісекунду, можливо, вам доведеться скоротити драбину або помістити її в повільніший потік.
3.3. Змінні
Під час завантаження модуля ClassicLadder в режимі реального часу можна налаштувати кількість об’єктів кожного типу. Якщо ви не налаштуєте кількість об’єктів, ClassicLadder використовуватиме значення за замовчуванням.
| Назва об’єкта | Назва змінної | Значення за замовчуванням |
|---|---|---|
Кількість сходинок |
(numRungs) |
100 |
Кількість бітів |
(numBits) |
20 |
Кількість змінних у словах |
(numWords) |
20 |
Кількість таймерів |
(numTimers) |
10 |
Кількість таймерів IEC |
(numTimersIec) |
10 |
Кількість моностабільних |
(numMonostables) |
10 |
Кількість лічильників |
(numCounters) |
10 |
Кількість бітових контактів входів HAL |
(numPhysInputs) |
15 |
Кількість вихідних бітових контактів HAL |
(numPhysOutputs) |
15 |
Кількість арифметичних виразів |
(numArithmExpr) |
50 |
Кількість секцій |
(numSections) |
10 |
Кількість символів |
(numSymbols) |
Авто |
Кількість входів S32 |
(numS32in) |
10 |
Кількість виходів S32 |
(numS32out) |
10 |
Кількість входів з плаваючою точкою |
(numFloatIn) |
10 |
Кількість виходів з плаваючим зчитуванням |
(numFloatOut) |
10 |
Найбільший інтерес представляють об’єкти numPhysInputs, numPhysOutputs, numS32in та numS32out.
Зміна цих чисел змінить кількість доступних бітових виводів HAL. numPhysInputs і numPhysOutputs контролюють кількість доступних бітових виводів HAL (увімкнено/вимкнено). numS32in і numS32out контролюють кількість доступних виводів HAL зі знаковими цілими числами (+- діапазон цілих чисел).
Наприклад (вам не потрібно змінювати все це, щоб змінити лише декілька):
loadrt classicladder_rt numRungs=12 numBits=100 numWords=10 numTimers=10 numMonostables=10 numCounters=10 numPhysInputs=10 numPhysOutputs=10 numArithmExpr=100 numSections=4 numSymbols=200 numS32in=5 numS32out=5
Щоб завантажити кількість об’єктів за замовчуванням:
loadrt classicladder_rt
4. Завантаження модуля ClassicLadder, що не працює в реальному часі
Команди ClassicLadder HAL повинні бути виконані до завантаження графічного інтерфейсу користувача, інакше пункт меню Ladder Editor не буде працювати. Якщо ви використовували майстер налаштування крокового двигуна, розмістіть всі команди ClassicLadder HAL у файлі custom.hal.
Щоб завантажити модуль, що не працює в реальному часі:
loadusr classicladder
|
Note
|
Можна завантажити лише один файл .clp. Якщо вам потрібно розділити драбину, використовуйте секції. |
Щоб завантажити файл рейдингу:
loadusr classicladder myladder.clp
Варіанти завантаження ClassicLadder
-
--nogui - (завантажується без редактора сходинок), зазвичай використовується після завершення налагодження.
-
--modbus_port=port - (завантажує номер порту Modbus)
-
--modmaster - (ініціалізує головний модуль MODBUS) має одночасно завантажувати програму рейкового шини, інакше TCP є портом за замовчуванням.
-
--modslave - (ініціалізує ведомий пристрій MODBUS) тільки TCP
Щоб використовувати ClassicLadder з HAL без EMC:
loadusr -w classicladder
Параметр -w вказує HAL не закривати середовище HAL, доки не завершиться робота ClassicLadder.
Якщо спочатку завантажити програму логічних конструкцій з опцією --nogui, а потім знову завантажити ClassicLadder без опцій, графічний інтерфейс відобразить останню завантажену програму логічних конструкцій.
В AXIS ви можете завантажити графічний інтерфейс з редактора файлів/схем…
5. ClassicLadder GUI
Якщо ви завантажите ClassicLadder з графічним інтерфейсом, він відобразить два вікна: вікно відображення розділів та вікно керування розділами.
5.1. Менеджер розділів
Під час першого запуску ClassicLadder ви отримаєте порожнє вікно менеджера розділів.
Це вікно дозволяє вам називати, створювати або видаляти розділи та вибирати мову, яку використовуватиме цей розділ. Так само ви називаєте підпрограму для викликів котушок.
5.2. Відображення розділу
Під час першого запуску ClassicLadder ви побачите порожнє вікно відображення розділу. Відображається один порожній рядок.
Більшість кнопок зрозумілі самі по собі:
Кнопка «Змінні» призначена для перегляду змінних, перемикайте її, щоб відображати одну, іншу, обидві, а потім жодної з вікон.
Кнопка «Налаштування» використовується для Modbus та показує максимальну кількість елементів рейкової логіки, які були завантажені модулем реального часу.
Кнопка «Символи» відобразить список символів для змінних, які можна редагувати (підказка: ви можете назвати входи, виходи, котушки тощо).
Кнопка «Вийти» завершить роботу програми, яка не працює в реальному часі, тобто Modbus та дисплей. Програма релейної логіки в реальному часі все ще працюватиме у фоновому режимі.
Прапорець у верхньому правому куті дозволяє вибрати, чи відображатимуться назви змінних, чи назви символів
Ви можете помітити, що під дисплеєм програми драбини є рядок із написом «Project failed to load…» (Не вдалося завантажити проект…). Це рядок стану, який надає інформацію про елементи програми драбини, на які ви натискаєте у вікні дисплея. Цей рядок стану тепер відображатиме назви сигналів HAL для змінних %I, %Q та першої %W (у рівнянні). Ви можете побачити деякі дивні мітки, такі як (103) у щаблях. Це відображається (навмисно) через стару помилку — під час стирання елементів старі версії іноді не стирали об’єкт із правильним кодом. Ви, можливо, помітили, що довга горизонтальна кнопка з’єднання іноді не працювала в старих версіях. Це було тому, що вона шукала «вільний» код, але знаходила щось інше. Число в дужках — це нерозпізнаний код. Програма драбини все одно працюватиме належним чином, щоб виправити це, видаліть коди за допомогою редактора та збережіть програму.
5.3. Змінні вікна
Це два вікна змінних: вікно стану бітів (булеве) та вікно спостереження (ціле число зі знаком). Кнопка Vars знаходиться у вікні відображення розділу. Перемикайте кнопку Vars, щоб відобразити одне, інше, обидва або жодне з вікон змінних.
Вікно стану бітів відображає деякі дані змінних типу «істина/хиба» (on/off). Зверніть увагу, що всі змінні починаються зі знака %. Змінні %I представляють вхідні бітові виводи HAL. Змінні %Q представляють котушку реле та вихідні бітові виводи HAL. Змінні %B представляють внутрішню котушку реле або внутрішній контакт. Три області редагування у верхній частині дозволяють вибрати 15 змінних, які будуть відображатися в кожному стовпці. Наприклад, якщо стовпець змінних %B має 15 записів, а ви ввели 5 у верхній частині стовпця, будуть відображатися змінні від %B5 до %B19. Прапорці дозволяють вручну встановлювати та скасовувати змінні %B, якщо програма релейної схеми не встановлює їх як виходи. Будь-які біти, які встановлені програмою як виходи під час роботи ClassicLadder, не можуть бути змінені і будуть відображатися як встановлені, якщо вони увімкнені, і як не встановлені, якщо вони вимкнені.
Вікно спостереження відображає стан змінної. Поле редагування поруч із ним містить число, збережене в змінній, а випадаюче меню поруч із ним дозволяє вибрати, чи буде число відображатися в шістнадцятковій, десятковій чи двійковій системі числення. Якщо у вікні символів для змінних слів визначено імена символів і в розділі вікна відображення встановлено прапорець «відображати символи», імена символів будуть відображатися. Щоб змінити відображувану змінну, введіть номер змінної, наприклад %W2 (якщо прапорець «Відображати символи» не встановлено) або введіть ім’я символу (якщо прапорець «Відображати символи» встановлено) поверх існуючого номера/імені змінної та натисніть клавішу Enter.
5.4. Вікно символів
Це список імен «символів», які слід використовувати замість імен змінних, що відображаються у вікні розділу, коли встановлено прапорець «відображати символи». Ви додаєте ім’я змінної (пам’ятайте про символ «%» і великі літери), ім’я символу. Якщо до змінної може бути підключений сигнал HAL (%I, %Q і %W, якщо ви завантажили s32 pin з модулем реального часу), то в розділі коментарів буде показано поточне ім’я сигналу HAL або його відсутність. Імена символів повинні бути короткими, щоб краще відображатися. Майте на увазі, що ви можете відобразити довші імена сигналів HAL змінних %I, %Q і %W, натиснувши на них у вікні розділу. Між цими двома можна відстежувати, до чого підключена програма драбини!
5.5. Вікно редактора
-
Add - додає сходинку після вибраної сходинки
-
Insert - вставляє сходинку перед вибраною сходинкою
-
«Видалити» – видаляє вибраний рядок
-
Modify - відкриває вибраний рядок для редагування
Починаючи з верхнього лівого зображення:
-
Вибір об’єктів, Ластик
-
Норморозімкнений вхід, нормальнорозімкнений вхід, вхід наростаючого фронту, вхід спадаючого фронту
-
Горизонтальне підключення, вертикальне підключення, довге горизонтальне підключення
-
Блок таймера IEC, блок лічильника, змінна порівняння
-
Старий блок таймера, старий моностабільний блок (їх замінили на таймер IEC)
-
КОТУШКИ - Норморозімкнений вихід, Норморозімкнений вихід, Вихід встановлення, Вихід скидання
-
Котушка стрибка, котушка виклику, змінне призначення
Короткий опис кожної з кнопок:
-
Selector - дозволяє вибирати існуючі об’єкти та змінювати інформацію про них.
-
Eraser - стирає об’єкт.
-
N.O. Contact - створює нормально відкритий контакт. Це може бути зовнішній контакт входу HAL-pin (%I), внутрішній бітовий контакт котушки (%B) або зовнішній контакт котушки (%Q). Контакт входу HAL-pin закритий, коли HAL-pin має значення true. Контакти котушки закриті, коли відповідна котушка активна (контакт %Q2 закривається, коли котушка %Q2 активна).
-
N.C. Contact - створює нормально замкнутий контакт. Він такий самий, як і нормально-розмикаючий контакт, за винятком того, що контакт розімкнутий, коли контакт HAL увімкнений або котушка активна.
-
Rising Edge Contact - створює контакт, який замикається, коли HAL-вивід переходить з положення «хибно» в «істина», або котушка переходить з неактивного в активний стан.
-
Falling Edge Contact - створює контакт, який замикається, коли HAL-вивід переходить з активного стану в хибний або котушка переходить з активного у вимкнений.
-
Horizontal Connection - створює горизонтальний зв’язок з об’єктами.
-
Vertical Connection - створює вертикальне з’єднання з горизонтальними лініями.
-
Horizontal Running Connection - створює горизонтальне з’єднання між двома об’єктами та є швидким способом з’єднання об’єктів, що знаходяться на відстані більше одного блоку один від одного.
-
IEC Timer - створює таймер і замінює «Таймер».
-
Timer - створює модуль таймера (замість нього використовуйте таймер IEC).
-
Monostable - створює одноразовий моностабільний модуль
-
«Лічильник» – створює модуль лічильника.
-
Compare - створює блок порівняння для порівняння змінної зі значеннями або іншими змінними, наприклад,
%W1<=5або%W1=%W2. Блок порівняння не можна розмістити в крайній правій частині відображення розділу. -
Variable Assignment - створює блок присвоєння, щоб ви могли присвоювати значення змінним, наприклад,
%W2=7або%W1=%W2. Функції ПРИСВЯЗУВАННЯ можна розміщувати лише в крайньому правому куті відображення розділу.
5.6. Вікно конфігурації
Вікно конфігурації відображає поточний стан проекту та містить вкладки налаштування Modbus.
6. Об’єкти драбини
6.1. КОНТАКТИ
Представляють собою перемикачі або релейні контакти. Вони керуються змінною літерою та цифрою, призначеною їм.
Змінна літера може бути B, I або Q, а число може бути до трьох цифр, наприклад, %I2, %Q3 або %B123. Змінна I контролюється вхідним контактом HAL з відповідним номером. Змінна B призначена для внутрішніх контактів, що керуються котушкою B з відповідним номером. Змінна Q керується котушкою Q з відповідним номером (як реле з декількома контактами). Наприклад, якщо контакт HAL classicladder.0.in-00 має значення true, то контакт %I0 N.O. буде увімкнений (замкнений, true, як завгодно). Якщо котушка %B7 «під напругою» (увімкнена, істинна тощо), то контакт %B7 N.O. буде увімкнений. Якщо котушка %Q1 «під напругою», то контакт %Q1 N.O. буде увімкнений (а контакт HAL classicladder.0.out-01 буде істинним).
-
«Н.О. контакт» - зображення:images/ladder_action_load.png[«Нормально розімкнутий контакт»] (Нормально розімкнутий). Коли змінна має значення «хибність», перемикач вимкнено.
-
«Н.З. контакт» - зображення:images/ladder_action_loadbar.png[«Нормально замкнутий контакт»] (Нормально замкнутий). Коли змінна має значення «хибність», перемикач увімкнено.
-
Rising Edge Contact - Коли змінна змінюється з хибного на істинне, перемикач увімкнений ІМПУЛЬСНО.
-
Falling Edge Contact - Коли змінна змінюється з істини на хибність, перемикач увімкнений ІМПУЛЬСНО.
6.2. ТАЙМЕРИ IEC
Представляють нові таймери зворотного відліку. Таймери IEC замінюють таймери та моностабільні таймери.
Таймери IEC мають 2 контакти.
-
I - вхідний контакт
-
Q - вихідний контакт
Є три режими - TON, TOF, TP.
-
TON - Коли вхідний сигнал таймера має значення «true», зворотний відлік починається та триває доти, доки вхідний сигнал залишається «true». Після завершення зворотного відліку, доки вхідний сигнал таймера залишається «true», вихідний сигнал буде «true».
-
TOF - Коли вхідний сигнал таймера має значення «true», він встановлює вихідний сигнал «true». Коли вхідний сигнал має значення «false», таймер починає зворотний відлік, а потім встановлює вихідний сигнал «false».
-
TP - Коли вхід таймера імпульсно перетворюється на "true" або утримується в такому положенні, таймер встановлює вихід у "true" до закінчення зворотного відліку таймера (одноразово)
Інтервали часу можна встановлювати, кратні 100 мс, секундам або хвилинам.
Також є змінні для таймерів IEC, які можна зчитувати та/або записувати в блоках порівняння або операції.
-
%TMxxx.Q - таймер завершено (логічне значення, читання/запис)
-
%TMxxx.P - пресет таймера (читання/запис)
-
%TMxxx.V - значення таймера (читання-запис)
6.3. ТАЙМЕРИ
Представляють таймери зворотного відліку. Це застаріло та замінено таймерами IEC.
Таймери мають 4 контакти.
-
E - увімкнути (вхід) запускає таймер, коли значення true, скидає, коли значення false
-
C - керування (вхід) має бути увімкнене для роботи таймера (зазвичай підключається до E)
-
D - виконано (вивід) true, коли таймер вичерпає час очікування, і доки E залишається true
-
R - running (вихід) true, коли таймер працює
Базовий час таймера може бути кратним мілісекундам, секундам або хвилинам.
Також є змінні для таймерів, які можна зчитувати та/або записувати в блоках порівняння або операції.
-
%Txx.R - Таймер xx працює (логічне значення, лише для читання)
-
%Txx.D - Таймер xx завершено (логічне значення, лише для читання)
-
%Txx.V - Поточне значення таймера xx (ціле число, лише для читання)
-
%Txx.P - Таймер xx попередньо встановлено (ціле число, читання або запис)
6.4. МОНОСТАЛИ
Представляють оригінальні одноразові таймери. Тепер це застаріло та замінено таймерами IEC.
Моностабільні реле мають 2 контакти, I та R.
-
I - вхід (input) запустить монотаймер.
-
R - running (вихід) буде істинним, поки працює таймер.
Контакт I чутливий до переднього фронту, тобто він запускає таймер тільки при зміні стану з false на true (або з вимкненого на увімкнений). Під час роботи таймера контакт I може змінюватися без впливу на роботу таймера. R буде true і залишатиметься true, поки таймер не дорахує до нуля. Базовий інтервал таймера може бути кратним мілісекундам, секундам або хвилинам.
Також є змінні для моностабільних об’єктів, які можна зчитувати та/або записувати в блоках порівняння або операції.
-
%Mxx.R - Моностабільний xx виконується (логічне значення, лише для читання)
-
%Mxx.V - Моностабільне поточне значення xx (ціле число, лише для читання)
-
%Mxx.P - Моностабільний xx пресет (ціле число, читання або запис)
6.5. ЛІЧИЛЬНИКИ
Представляють лічильники вгору/вниз.
Є 7 контактів:
-
R - reset (input) скине лічильник до 0.
-
P - пресет (вхід) встановить лічильник на номер пресету, призначений у меню редагування.
-
«U» – підрахунок (вхід) додасть одиницю до лічильника.
-
D - зворотний лічильник (вхід) відніме одиницю від лічильника.
-
E - Значення "під потоком" (вихід) буде істинним, коли лічильник перейде від 0 до 9999.
-
D - done (вивід) буде true, коли лічильник дорівнює попередньому значенню.
-
F - Переповнення (вихід) буде істинним, коли лічильник перевищить значення з 9999 до 0.
Контакти для лічильника вгору та вниз чутливі до фронту, тобто вони рахують лише тоді, коли стан контакту змінюється з хибного на істинне (або з вимкненого на ввімкнене, якщо вам зручніше).
Діапазон від 0 до 9999.
Також є змінні для лічильників, які можна зчитувати та/або записувати в блоках порівняння або операції.
-
'%C'xx
.D- Лічильник xx завершено (логічне, лише_читання) -
'%C'xx
.E- Лічильник xx порожній переповнення (логічне, лише для читання_) -
'%C'xx
.F- Лічильник xx повне переповнення (логічне, лише_читання) -
'%C'xx
.V- Поточне значення лічильника xx (ціле, читання або запис) -
'%C'xx
.P- Лічильник xx попередньо встановлено (ціле, читання або запис)
6.6. ПОРІВНЯТИ
Для арифметичного порівняння. Чи змінна %XXX = цьому числу (або обчисленому числу)
Блок порівняння буде істинним, коли порівняння має значення істинне. Ви можете використовувати більшість математичних символів:
-
+,-,*,/,=(стандартні математичні символи) -
<(менше ніж),>(більше ніж),<=(менше або дорівнює),>=(більше або дорівнює),<>(не дорівнює) -
(,)розділяють на групи, наприклад%IF1=2,&%IF2<5у псевдокоді перекладається як «якщо %IF1 дорівнює 2, а %IF2 менше 5, то порівняння є істинним». Зверніть увагу на кому, що розділяє дві групи порівнянь. -
^(показник степеня),%(модуль),&(і),|(або). - -
ABS(абсолютний),MOY(французькою – середній),AVG(середній)
Наприклад, ABS(%W2)=1, MOY(%W1,%W2)<3.
У рівнянні порівняння пробіли не допускаються. Наприклад, %C0.V>%C0.P є коректним виразом порівняння, тоді як %C0.V > %CO.P не є коректним виразом.
Внизу сторінки наведено список змінних, які можна використовувати для читання та запису в об’єкти релейно-контактної схеми. При відкритті нового блоку порівняння обов’язково видаліть символ # при введенні порівняння.
Щоб дізнатися, чи значення змінної слова №1 менше ніж у 2 рази перевищує поточне значення лічильника №0, синтаксис буде таким:
%W1<2*%C0.V
Щоб дізнатися, чи дорівнює S32in біт 2 10, синтаксис буде таким:
%IW2=10
Примітка: Порівняння використовує арифметичне дорівнювання, а не подвійне дорівнювання, до якого звикли програмісти.
6.7. ПРИЗНАЧЕННЯ ЗМІННИХ
Для присвоєння змінної, наприклад, присвоїти це число (або обчислене число) цій змінній %xxx, існують дві математичні функції MINI і MAXI, які перевіряють змінну на максимальне (0x80000000) і мінімальне значення (0x07FFFFFFF) (майте на увазі значення зі знаком) і не дозволяють їм виходити за межі.
Коли відкривається новий блок присвоєння змінних, обов’язково видаліть символ # під час введення присвоєння.
Щоб призначити значення 10 попередньому налаштуванню таймера IEC Timer 0, синтаксис буде таким:
%TM0.P=10
Щоб призначити значення 12 біту 3 s32out, синтаксис буде таким:
%QW3=12
|
Note
|
Коли ви присвоюєте значення змінній за допомогою блоку присвоєння змінної, це значення зберігається доти, доки ви не присвоїте нове значення за допомогою блоку присвоєння змінної. Останнє присвоєне значення буде відновлено при запуску LinuxCNC. |
На наступному малюнку показано приклад присвоєння та порівняння. %QW0 є бітом S32out, а %IW0 є бітом S32in. У цьому випадку вивід HAL classicladder.0.s32out-00 буде встановлений на значення 5, а коли вивід HAL classicladder.0.s32in-00 дорівнює 0, вивід HAL classicladder.0.out-00 буде встановлений на True.
6.8. КОТУШКИ
Котушки представляють собою котушки реле. Вони керуються змінною літерою та цифрою, призначеною їм.
Змінною літерою може бути B або Q, а числом може бути число до трьох цифр, наприклад, %Q3 або %B123. Котушки Q керують виводами HAL, наприклад, якщо %Q15 знаходиться під напругою, то вивід HAL classicladder.0.out-15 буде істинним. Котушки B є внутрішніми котушками, що використовуються для керування потоком програми.
-
N.O. COIL - Котушка реле: Коли котушка під напругою, її нормально розімкнутий (короткозамкнутий: Н.О.) контакт буде замкнутий (увімкнений, істина тощо), і струм може проходити.
-
N.C. COIL - Котушка реле, яка інвертує свої контакти: коли котушка під напругою, її контакт, який нормально замкнутий (короткозамкнений: Н.З.), розмикається (вимикається, хибний тощо), і потік струму переривається.
-
SET COIL - Котушка реле з фіксуючими контактами: Коли котушка під напругою, її нормально-розмикаючий контакт буде фіксовано замкнутим.
-
RESET COIL - Котушка реле з фіксуючими контактами: Коли котушка під напругою, її нормально-розмикаючий контакт буде розімкнутим.
-
«JUMP COIL» — котушка «goto»: коли котушка знаходиться під напругою, програма решітки переходить до сходинки (у розділі CURRENT) — точки переходу позначаються міткою сходинки. (Додайте мітки сходинок у розділі дисплея, у верхньому лівому полі мітки.)
-
«CALL COIL» — котушка «gosub»: коли котушка отримує живлення, програма переходить до розділу підпрограми, позначеного номером підпрограми — підпрограми позначені SR0 до SR9 (позначте їх у диспетчері розділів).
|
Warning
|
Якщо ви використовуєте нормально-розмикаючий контакт з нормально-розмикаючою котушкою, логіка працюватиме (коли котушка під напругою, контакт буде замкнутий), але це справді важко виконати! |
6.8.1. СТРИБОКОВА КОТУШКА
JUMP COIL використовується для «переходу» до іншого розділу, подібно до goto в мові програмування BASIC.
Якщо ви подивитеся у верхній лівий кут вікна відображення розділів, ви побачите невелике поле для підпису та довше поле для коментарів поруч із ним. Тепер перейдіть до Редактор → Змінити, потім поверніться до маленького поля та введіть назву.
Додайте коментар у розділі коментарів. Ця назва мітки є лише назвою цієї сходинки та використовується JUMP COIL для визначення місця призначення.
Розміщуючи СТРИБКОВУ КОТУШКУ, додайте її в крайнє праве положення та змініть мітку на сходинку, на яку ви хочете СТРИБНУТИ.
6.8.2. КОТУШКА ВИКЛИКУ
CALL COIL використовується для переходу до секції підпрограми з подальшим поверненням, подібно до gosub у мові програмування BASIC.
Якщо ви перейдете до вікна менеджера розділів, натисніть кнопку «Додати розділ». Ви можете назвати цей розділ, вибрати мову, яку він використовуватиме (колонки або послідовну), та вибрати його тип (головний або підпрограма).
Виберіть номер підпрограми (наприклад, SR0). Буде відображено порожній розділ, і ви зможете створити свою підпрограму.
Коли ви це зробите, поверніться до менеджера розділів і натисніть на ваш головний розділ (назва за замовчуванням prog1).
Тепер ви можете додати котушку виклику до вашої програми. Котушки виклику слід розміщувати в крайній правій позиції сходинки.
Не забудьте змінити мітку на номер підпрограми, який ви вибрали раніше.
7. Змінні ClassicLadder
Ці змінні використовуються в інструкціях COMPARE або OPERATE для отримання інформації про об’єкти рейкової коефіцієнта або зміни їх специфікацій, таких як зміна попереднього налаштування лічильника або перевірка завершення роботи таймера.
Список змінних:
-
%Bxxx - Бітова пам’ять xxx (логічне значення) -
%Wxxx - Пам’ять слів xxx (32 біти зі знаком цілого числа) -
%IWxxx - Пам’ять слів xxx (S32 на виводі) -
%QWxxx - Пам’ять слів xxx (вихідний контакт S32) -
%IFxx - Пам’ять слів xx (число з плаваючою комою в pin) (конвертовано в S32 в ClassicLadder) -
%QFxx - Пам’ять слів xx (вихідний висновок) (конвертовано в S32 у ClassicLadder) -
%T`__xx__.R` - Таймер xx працює (логічне значення, лише для читання користувачем) -
%T`__xx__.D` - Таймер xx завершено (логічне значення, лише для читання користувачем) -
%T`__xx__.V` - Поточне значення таймера xx (ціле число, лише для читання користувачем) -
%T`__xx__.P` – Попереднє налаштування таймера xx (ціле число) -
%TM`__xxx__.Q` - Таймер xxx завершено (логічне значення, читання/запис) -
%TM`__xxx__.P` - Таймер xxx пресет (ціле число, читання та запис) -
%TM`__xxx__.V` - Значення таймера xxx (ціле число, читання/запис) -
%M`__xx__.R` - Моностабільний xx виконується (логічне значення) -
%M`__xx__.V` - Моностабільне xx поточне значення (ціле число, лише для читання користувачем) -
%M`__xx__.P` - Моностабільний пресет xx (ціле число) -
%C`__xx__.D` - Лічильник xx завершено (логічне значення, лише для читання користувачем) -
%C`__xx__.E` - Лічильник xx порожній переповнення (логічне значення, лише для читання користувачем) -
%C`__xx__.F` - Лічильник xx повне переповнення (логічне значення, лише для читання користувачем) -
%C`__xx__.V` - Поточне значення лічильника xx (ціле число) -
%C`__xx__.P` - Попередньо встановлений лічильник xx (ціле число) -
%Ixxx - Фізичний вхід xxx (логічне значення) (вхідний біт HAL) -
%Qxxx - Фізичний вихід xxx (логічне значення) (біт виходу HAL) -
%Xxxx - Діяльність кроку xxx (послідовна мова) -
%X`__xxx__.V` – Час активності в секундах кроку xxx (послідовна мова) -
%Exx - Помилки (логічні, читання та запис (будуть перезаписані)) -
«Індексовані або векторизовані змінні» – це змінні, індексовані іншою змінною. Дехто може назвати це векторизованими змінними. Приклад:
%W0[%W4]=> якщо %W4 дорівнює 23, це відповідає %W23
8. Програмування GRAFCET (кінцевий автомат)
|
Warning
|
Це, мабуть, найменш використовувана і найменш зрозуміла функція ClassicLadder. Послідовне програмування використовується для того, щоб серія подій ладдеру завжди відбувалася у встановленому порядку. Послідовні програми не працюють самостійно. Завжди є також програма ладдеру, яка контролює змінні. Ось основні правила, що регулюють послідовні програми: |
-
Правило 1: Початкова ситуація - Початкова ситуація характеризується початковими кроками, які за визначенням перебувають в активному стані на початку операції. Повинно бути принаймні один початковий крок.
-
Правило 2: R2, Очищення переходу - Перехід може бути увімкненим або вимкненим. Він вважається увімкненим, коли всі безпосередньо попередні кроки, пов’язані з відповідним символом переходу, є активними, в іншому випадку він вимкнений. Перехід не може бути очищений, якщо він не увімкнений і пов’язана з ним умова переходу не є істинною.
-
Правило 3: R3, Еволюція активних кроків - Очищення переходу одночасно призводить до активного стану наступного кроку (кроків) і до неактивного стану попереднього кроку (кроків).
-
Правило 4: R4, Одночасне очищення переходів - Усі одночасно очищені переходи очищуються одночасно.
-
Правило 5: R5, Одночасна активація та деактивація кроку - Якщо під час роботи крок одночасно активується та деактивується, пріоритет надається активації.
Це вікно редактора SEQUENTIAL. (Починаючи з верхнього лівого кута):
Стрілка селектора, Ластик
Звичайний крок, Початковий (стартовий) крок
Перехід, Крок і перехід
Перехід-нижній зв’язок, Перехід-верхній зв’язок
Прохідний зв’язок-нижній, Прохідний зв’язок-верхній Стрибок
Зв’язок, Поле для коментарів
-
ORDINARY STEP - має унікальний номер для кожного
-
STARTING STEP - Послідовна програма повинна мати його. Саме тут програма почне свою роботу.
-
TRANSITION - показує змінну, яка має бути істинною, щоб керування перейшло до наступного кроку.
-
«КРОК І ПЕРЕХІД» – поєднані для зручності
-
TRANSITION LINK-DOWNSIDE - розділяє логічний потік на одну з двох можливих ліній залежно від того, який із наступних кроків є істинним першим (логіка «Подумай АБО»)
-
TRANSITION LINK=UPSIDE - об’єднує дві логічні лінії (АБО) назад в одну
-
PASS-THROUGH LINK-DOWNSIDE - розділяє логічний потік на два рядки, ОБИДВА з яких мають бути істинними для продовження (думка І логіка)
-
PASS-THROUGH LINK-UPSIDE - об’єднує дві паралельні логічні лінії (логіка І) знову разом
-
JUMP LINK - з’єднує кроки, які не розташовані один під одним, наприклад, з’єднує останній крок з першим
-
COMMENT BOX - використовується для додавання коментарів
Щоб використовувати посилання, у вас вже мають бути розміщені кроки. Виберіть тип посилання, а потім по черзі вибирайте два кроки або транзакції. Це вимагає практики!
При послідовному програмуванні: змінна %X`__xxx__ (наприклад, `%X5) використовується для перевірки, чи активний крок. Змінна %X`__xxx__.V` (наприклад, %X5.V) використовується для перевірки, як довго крок був активним. Змінні %X і %X.v використовуються в логіці LADDER. Змінні, призначені переходам (наприклад, %B), контролюють, чи логіка перейде до наступного кроку. Після того, як крок став активним, змінна переходу, яка спричинила його активацію, більше не контролює його. Останній крок повинен JUMP LINK повернутися тільки до початкового кроку.
9. Modbus
Що слід врахувати:
-
Modbus — це програма, яка не працює в реальному часі, тому на сильно завантаженому комп’ютері можуть виникати проблеми із затримкою.
-
Modbus насправді не підходить для подій у реальному часі, таких як керування положенням двигунів або керування аварійною зупинкою.
-
Для роботи Modbus має бути запущений графічний інтерфейс ClassicLadder.
-
Modbus ще не повністю завершений, тому він не виконує всі функції Modbus.
Щоб ініціалізувати MODBUS, потрібно вказати це під час завантаження програми ClassicLadder, яка не працює в реальному часі.
loadusr -w classicladder --modmaster myprogram.clp
Параметр -w змушує HAL чекати, поки ви закриєте ClassicLadder, перш ніж закривати сеанс реального часу. ClassicLadder також завантажує підлеглий сервер TCP Modbus, якщо ви додасте --modserver у командному рядку.
-
1 - котушки для зчитування
-
2 - читання вхідних даних
-
3 - читання регістрів зберігання
-
4 - читання вхідних регістрів
-
5 - написати окремі котушки
-
6 - запис в один регістр
-
8 - ехо-тест
-
15 - написати кілька котушок
-
16 - запис кількох регістрів
Якщо ви не вкажете --modmaster під час завантаження програми ClassicLadder, яка не працює в реальному часі, ця сторінка не відображатиметься.
-
«SERIAL PORT» – для IP-адреси порожнє поле. Для послідовного порту – розташування/назва драйвера послідовного порту, наприклад, /dev/ttyS0 (або /dev/ttyUSB0 для перетворювача USB-послідовний порт).
-
SERIAL SPEED - Слід встановити швидкість, на яку встановлено ведений пристрій - підтримуються 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200.
-
PAUSE AFTER TRANSMIT - Пауза (мілісекунди) після передачі та перед отриманням відповіді, деяким пристроям потрібен довше часу (наприклад, перетворювачі USB-послідовний порт).
-
PAUSE INTER-FRAME - Пауза (мілісекунди) після отримання відповіді від підлеглого пристрою. Це встановлює робочий цикл запитів (це пауза для КОЖНОГО запиту).
-
REQUEST TIMEOUT LENGTH - Тривалість (мілісекунди), перш ніж ми вирішимо, що підлеглий пристрій не відповів.
-
MODBUS ELEMENT OFFSET - використовується для зміщення номерів елементів на 1 (для розбіжностей у нумерації виробників).
-
DEBUG LEVEL - Встановіть це значення на 0-3 (0, щоб припинити виведення інформації про налагодження, окрім помилок відсутності відповіді).
-
READ COILS/INPUTS MAP TO - Виберіть, які змінні, що зчитують котушки/входи, будуть оновлюватися. (B або Q).
-
WRITE COILS MAP TO - Виберіть, з яких змінних, що записують котушки, будуть оновлюватися (B, Q або I).
-
READ REGISTERS/HOLDING - Виберіть, які змінні, що зчитують регістри, будуть оновлюватися (W або QW).
-
WRITE REGISTERS MAP TO - Виберіть, з яких змінних, що зчитують регістри, будуть оновлюватися (W, QW або IW).
-
SLAVE ADDRESS - Для послідовного порту ідентифікаційний номер веденого пристрою зазвичай встановлюється на веденому пристрої (зазвичай 1-256). Для IP-адреси веденого пристрою та, за бажанням, номер порту.
-
TYPE ACCESS - Це вибирає код функції MODBUS для надсилання до веденого пристрою (наприклад, який тип запиту).
-
COILS / INPUTS - Входи та котушки (біти) зчитуються/записуються в змінні I, B або Q (вибір користувача).
-
REGISTERS (WORDS) - Регістри (слова/числа) відповідають змінним IW, W або QW (вибір користувача).
-
1st MODBUS ELEMENT - Адреса (або номер регістра) першого елемента в групі (не забудьте правильно встановити ЗМІЩЕННЯ ЕЛЕМЕНТА MODBUS).
-
NUMBER OF ELEMENTS - Кількість елементів у цій групі.
-
LOGIC - Тут можна перевернути логіку.
-
1st%I%Q IQ WQ MAPPED - Це початкова кількість змінних %B, %I, %Q, %W, %IW або %QW, які відображаються на/з групи елементів modbus (починаючи з першого номера елемента modbus).
У наведеному вище прикладі: номер порту - для мого комп’ютера /dev/ttyS0 був моїм послідовним портом.
Швидкість послідовного порту встановлена на рівні 9600 бод.
Адреса веденого пристрою встановлена на 12 (на моєму частотному перетворювачі я можу встановити її від 1 до 31, тобто я можу взаємодіяти максимум з 31 частотним перетворювачем в одній системі).
Перший рядок налаштовано на 8 вхідних бітів, починаючи з першого номера регістра (регістр 1). Таким чином, номери регістрів 1-8 відображаються на змінні %B ClassicLadder, починаючи з %B1 і закінчуючи %B8.
Другий рядок встановлений для 2 вихідних бітів, починаючи з дев’ятого номера регістра (регістр 9), тому номери регістрів 9-10 відображаються на змінні %Q ClassicLadder, починаючи з %Q9 і закінчуючи %Q10.
Третій рядок призначений для запису 2 регістрів (по 16 біт кожен), починаючи з 0-го регістра (регістр 0), тому номери регістрів 0-1 відображаються на змінні %W ClassicLadder, починаючи з %W0 і закінчуючи %W1.
Легко зробити помилку «off-by-one», оскільки іноді елементи Modbus посилаються, починаючи з одиниці, а не з 0 (насправді, згідно зі стандартом, так і повинно бути!). Для цього можна скористатися перемикачем «Modbus element offset» (Зсув елемента Modbus).
У документації до вашого ведомого пристрою Modbus буде вказано, як налаштовано регістри – стандартного способу немає.
Рівень ПОСЛІДОВНИЙ ПОРТ, ШВИДКІСТЬ ПОРТІВ, ПАУЗА та НАЛАГОДЖЕННЯ можна редагувати (значення застосовуються після закриття вікна конфігурації, хоча радіокнопки застосовуються негайно).
Щоб скористатися функцією echo, виберіть функцію echo та додайте номер підлеглого пристрою, який ви хочете перевірити. Вам не потрібно вказувати жодних змінних.
Число 257 буде надіслано на вказаний вами номер підлеглого пристрою, і підлеглий пристрій має надіслати його назад. Щоб побачити повідомлення, вам потрібно запустити ClassicLadder у терміналі.
10. Налаштування MODBUS
Серійний:
-
ClassicLadder використовує протокол RTU (не ASCII).
-
8 бітів даних, парність не використовується, а 1 стоп-біт також відомий як 8-N-1.
-
Швидкість передачі даних має бути однаковою для веденого та головного пристроїв. ClassicLadder може мати лише одну швидкість передачі даних, тому всі ведені пристрої повинні бути налаштовані на однакову швидкість.
-
Міжкадрова пауза – це час для паузи після отримання відповіді.
-
MODBUS_TIME_AFTER_TRANSMIT — це тривалість паузи після надсилання запиту та до отримання відповіді (це, очевидно, допомагає з USB-конвертерами, які є повільними).
10.1. Інформація про MODBUS
-
ClassicLadder може використовувати розподілені входи/виходи на модулях, що використовують протокол Modbus ("головний": опитування підлеглих пристроїв).
-
Підлеглі пристрої та їхні входи/виходи можна налаштувати у вікні конфігурації.
-
Доступні 2 ексклюзивні режими: Ethernet з використанням Modbus/TCP та послідовний з використанням Modbus/RTU.
-
Парність не використовується.
-
Якщо ім’я порту для послідовного порту не вказано, буде використано режим TCP/IP…
-
Адреса веденого пристрою – це адреса веденого пристрою (Modbus/RTU) або IP-адреса.
-
IP-адресу можна вказати за номером порту (xx.xx.xx.xx:pppp), інакше за замовчуванням використовуватиметься порт 9502.
-
Для тестів було використано 2 продукти: Modbus/TCP (Adam-6051, https://www.advantech.com) та послідовний Modbus/RTU (https://www.ipac.ws).
-
Див. приклади: adam-6051 and modbus_rtu_serial.
-
Веб-посилання: https://www.modbus.org та це цікаве: https://www.iatips.com/modbus.html
-
СЕРВЕР MODBUS TCP ВКЛЮЧЕНО
-
ClassicLadder має інтегрований сервер Modbus/TCP. Порт за замовчуванням – 9502 (попередній стандарт 502 вимагав, щоб застосунок запускався з правами root).
-
Список підтримуваних кодів функцій Modbus: 1, 2, 3, 4, 5, 6, 15 та 16.
-
Таблиця відповідності бітів та слів Modbus насправді не є параметричною та відповідає безпосередньо змінним %B та %W.
Більше інформації про протокол Modbus можна знайти в інтернеті.
10.2. Помилки зв’язку
Якщо трапиться помилка зв’язку, з’явиться вікно з попередженням (якщо працює графічний інтерфейс) і %E0 буде істинним. Modbus продовжить спроби зв’язку. %E0 можна використовувати для прийняття рішення на основі помилки. Таймер можна використовувати для зупинки машини в разі закінчення часу очікування тощо.
11. Налагодження проблем Modbus
Хороший довідник по протоколу: https://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf. Якщо ви запускаєте linuxcnc/classicladder з терміналу, він буде виводити команди Modbus і відповіді ведених пристроїв.
Тут ми налаштовуємо ClassicLadder на запит до веденого пристрою 1, щоб прочитати регістри утримання (код функції 3), починаючи з адреси 8448 (0x2100). Ми запитуємо повернення 1 елемента даних (шириною 2 байти). Ми відображаємо його на змінну ClassicLadder, починаючи з 2.
Зверніть увагу, що на цьому зображенні ми встановили рівень налагодження на 1, тому повідомлення Modbus виводяться на термінал. Ми зіставили наші регістри читання та запису зі змінними %W ClassicLadder, тому наші повернуті дані будуть у %W2, як на іншому зображенні, де ми зіставили дані, починаючи з 2-го елемента.
11.1. Запит
Розглянемо приклад читання одного регістра зберігання з номером 8448 Decimal (0x2100 Hex).
Дивлячись у довіднику протоколу Modbus:
| Ім’я | кількість байтів | Значення (hex) |
|---|---|---|
Код функції |
(1 байт) |
3 (0x03) |
Початкова адреса |
(2 байти) |
0 - 65535 (0x0000 до 0xFFFF) |
Кількість регістрів |
(2 байти) |
1 до 125 (0x7D) |
Контрольна сума |
(2 байти) |
Розраховується автоматично |
Ось приклад надісланої команди, як її надруковано в терміналі (усі шістнадцяткові):
INFO CLASSICLADDER Модуль вводу/виводу Modbus для надсилання: Lgt=8 <- Адреса веденого пристрою-1. Код функції-3 Дані-21 0 0 1 8E 36
Значення (Hex):
-
Lgt = 8 = повідомлення має довжину 8 байтів, включаючи номер підлеглого пристрою та номер контрольної суми
-
Номер веденого пристрою = 1 (0x1) = Адреса веденого пристрою 1
-
Код функції = 3 (0x3) = читання регістра зберігання
-
Початок з адреси = старший байт 33 (0x21), молодший байт 0 (0x00) = комбінована адреса = 8448 (0x2100)
-
Кількість регістрів = 1 (0x1) = повернути 1 2-байтовий регістр (регістри зберігання та читання завжди мають ширину 2 байти)
-
Контрольна сума = старший байт 0x8E, молодший байт 0x36 = (0x8E36)
11.2. Відповідь на помилку
Якщо є відповідь про помилку, вона надсилає код функції плюс 0x80, код помилки та контрольну суму. Отримання відповіді про помилку означає, що ведений пристрій бачить команду запиту, але не може надати дійсні дані. Дивіться довідник протоколу Modbus:
| Ім’я | Кількість байтів | Значення (hex) |
|---|---|---|
Код помилки |
1 байт |
131 (0x83) |
Код винятку |
1 байт |
1-4 (0x01 до 0x04) |
Контрольна сума |
(2 байти) |
Розраховується автоматично |
Значення коду винятку:
-
1 - недопустима функція
-
2 - незаконна адреса даних
-
3 - недопустиме значення даних
-
4 - збій веденого пристрою
Ось приклад отриманої команди, надрукованої в терміналі (усі шістнадцяткові):
INFO CLASSICLADDER- Modbus I/O module received: Lgt=5 -> (Slave address-1 Function code-83 ) 2 C0 F1
Значення (шістнадцяткове):
-
Номер веденого пристрою = 1 (0x1) = Адреса веденого пристрою 1
-
Код функції = 131 (0x83) = помилка під час читання регістра зберігання
-
Код помилки = 2 (0x2) = запитується недійсна адреса даних
-
Контрольна сума = (0x8E36)
11.3. Відповідь на дані
Шукаємо відповідь у довіднику протоколу Modbus:
| Ім’я | кількість байтів | Значення (hex) |
|---|---|---|
Код функції |
1 байт |
3 (0x03) |
Кількість байтів |
1 байт |
2 x N* |
Значення реєстру |
N* x 2 байти |
повернене значення запитуваної адреси |
Контрольна сума |
(2 байти) |
розраховується автоматично |
*N = Кількість регістрів
Ось приклад отриманої команди, надрукованої в терміналі (усі шістнадцяткові):
INFO CLASSICLADDER- Отримано модуль вводу/виводу Modbus: Lgt=7 -> (Адреса веденого пристрою-1 Код функції-3 2 0 0 B8 44)
значення (Hex):
-
Номер веденого пристрою = 1 (0x1) = Адреса веденого пристрою 1
-
Запитаний код функції = 3 (0x3) = запитується читання регістра зберігання
-
кількість байтових регістрів = 2 (0x1) = повернути 2 байти (кожне значення регістра має ширину 2 байти)
-
значення старшого байта = 0 (0x0) = значення старшого байта адреси 8448 (0x2100)
-
значення молодшого байта = 0 (0x0) = значення старшого байта адреси 8448 (0x2100)
-
Контрольна сума = (0xB844)
(високі та низькі байти об’єднуються для створення 16-бітного значення, а потім передаються до змінної ClassicLadder.) Реєстри читання можуть бути зіставлені з %W або %QW (внутрішня пам’ять або виходи HAL). Реєстри запису можуть бути відображені з %W, %QW або %IW (внутрішня пам’ять, виходи HAL або входи HAL). Номер змінної починається з номера, введеного в стовпці сторінки налаштування реєстру вводу-виводу Modbus: «Перша відображена змінна». Якщо в одному читанні/записі запитується кілька регістрів, то номери змінних йдуть послідовно після першого.
11.4. Помилки MODBUS
-
У блоках порівняння функція %W=ABS(%W1-%W2) приймається, але обчислюється неправильно. Наразі допустимою є лише %W0=ABS(%W1).
-
Під час завантаження програми релейної логіки вона завантажить інформацію про Modbus, але не накаже ClassicLadder ініціалізувати Modbus. Ви повинні ініціалізувати Modbus під час першого завантаження графічного інтерфейсу, додавши --modmaster.
-
Якщо менеджер розділів розмістити поверх відображення розділу, через смугу прокручування та натиснути кнопку «Вихід», програма, яка не працює в реальному часі, аварійно завершить роботу.
-
При використанні --modmaster необхідно одночасно завантажувати програму рейдерів, інакше працюватиме лише TCP.
-
Читання/запис кількох регістрів у Modbus має помилки контрольної суми.
12. Налаштування ClassicLadder
У цьому розділі ми розглянемо кроки, необхідні для додавання ClassicLadder до конфігурації, згенерованої майстром StepConf. На сторінці розширених параметрів конфігурації майстра StepConf поставте позначку навпроти "Включити" ClassicLadder PLC".
12.1. Додайте модулі
Якщо ви використовували майстер StepConf для додавання ClassicLadder, ви можете пропустити цей крок.
Щоб вручну додати ClassicLadder, спочатку потрібно додати модулі. Це робиться шляхом додавання кількох рядків до файлу custom.hal.
Цей рядок завантажує модуль реального часу:
loadrt classicladder_rt
Цей рядок додає функцію ClassicLadder до потоку серво:
addf classicladder.0.refresh servo-thread
12.2. Додавання логіки сходів
Запустіть конфігурацію та виберіть «Файл/Редактор драбини», щоб відкрити графічний інтерфейс ClassicLadder. Ви побачите порожнє вікно «Відображення розділів» та «Менеджер розділів», як показано вище. У вікні Section Display відкрийте редактор. У вікні редактора виберіть Modify. Тепер з’явиться вікно Properties, а Section Display покаже сітку. Сітка є одним щаблем драбини. Щіль може містити гілки. Простий щабель має один вхід, лінію з’єднання та один вихід. Щіль може мати до шести горизонтальних гілок. Хоча в одному прогоні може бути більше одного контуру, результати непередбачувані.
Тепер натисніть на поле N.O. у вікні редактора.
Тепер клацніть у верхній лівій сітці, щоб розмістити вхідний сигнал N.O. у сходинці.
Повторіть вищевказані кроки, щоб додати вихід N.O. у верхній правій сітці, і використовуйте горизонтальне з’єднання, щоб з’єднати їх. Результат повинен виглядати так, як показано нижче. Якщо ні, використовуйте ластик, щоб видалити непотрібні ділянки.
Тепер натисніть кнопку OK у вікні редактора. Тепер ваше відображення розділу має виглядати так:
Щоб зберегти новий файл, виберіть «Зберегти як» та введіть йому ім’я. Розширення .clp буде додано автоматично. За замовчуванням для його збереження має бути використано каталог запущеної конфігурації.
Знову ж таки, якщо ви використовували майстер StepConf для додавання ClassicLadder, ви можете пропустити цей крок.
Щоб вручну додати сходинку, вам потрібно додати рядок до вашого файлу custom.hal, який завантажить ваш файл сходинки. Закрийте сеанс LinuxCNC та додайте цей рядок до вашого файлу custom.hal.
loadusr -w classicladder --nogui MyLadder.clp
Тепер, якщо ви запустите конфігурацію LinuxCNC, ваша програма рейдингу також буде працювати. Якщо ви виберете "Файл/Редактор рейдингів", створена вами програма відобразиться у вікні відображення розділу.