1. Лічильник упаковки

Щоб отримати лічильник, який «обертається», необхідно використовувати вивід попереднього встановлення та вивід скидання. При створенні лічильника встановіть попереднє значення на число, яке ви хочете досягти перед поверненням до 0. Логіка полягає в тому, що якщо значення лічильника перевищує попереднє значення, то лічильник скидається, а якщо підтікання увімкнено, то значення лічильника встановлюється на попереднє значення. Як ви можете бачити в прикладі, коли значення лічильника перевищує попередньо встановлене значення, запускається скидання лічильника, і значення стає 0. Вихід нижньої межі %Q2 встановить значення лічильника на попередньо встановлене значення при зворотному відліку.

Лічильник упаковки
Figure 1. Лічильник упаковки

2. Відхилити зайві імпульси

Цей приклад показує, як відхилити зайві імпульси з входу. Припустимо, що вхідний імпульс %I0 має неприємну властивість видавати зайвий імпульс, який псує нашу логіку. TOF (Timer Off Delay) запобігає надходженню зайвого імпульсу до нашого очищеного виходу %Q0. Це працює таким чином: коли таймер отримує вхідний сигнал, вихід таймера залишається увімкненим протягом заданого часу. Використовуючи нормально закритий контакт %TM0.Q, вихід таймера блокує будь-які подальші вхідні сигнали, що надходять до нашого виходу, до закінчення часу очікування.

Відхилити додатковий імпульс
Figure 2. Відхилити додатковий імпульс

3. Зовнішній аварійний зупинник

Приклад зовнішньої аварійної зупинки знаходиться в папці /config/classicladder/cl-estop. Він використовує панель PyVCP для імітації зовнішніх компонентів.

Для підключення зовнішнього аварійного зупинника до LinuxCNC та забезпечення його спільної роботи із внутрішнім аварійним зупинником, потрібне кілька з’єднань через ClassicLadder.

Спочатку нам потрібно відкрити цикл E-Stop у головному файлі HAL, закоментувавши його, додавши знак фунта, як показано, або видаливши наступні рядки.

# net estop-out <= iocontrol.0.user-enable-out
# net estop-out => iocontrol.0.emc-enable-in

Далі ми додаємо ClassicLadder до нашого файлу custom.hal, додавши ці два рядки:

loadrt classicladder_rt
addf classicladder.0.refresh servo-thread

Далі ми запускаємо нашу конфігурацію та будуємо сходи, як показано тут.

Дисплей секції аварійної зупинки
Figure 3. Дисплей секції аварійної зупинки

Після побудови драбини виберіть «Зберегти як» та збережіть драбину як estop.clp

Тепер додайте наступний рядок до вашого файлу custom.hal.

# Завантажити драбину
loadusr classicladder --nogui estop.clp

I/O завдання

  • %I0 = Вхідні дані з панелі PyVCP, що імітує аварійну зупинку (прапорець)

  • %I1 = Вхідні дані від аварійної зупинки LinuxCNC

  • %I2 = Вхідні дані від імпульсу скидання аварійної зупинки LinuxCNC

  • %I3 = Вхідні дані з кнопки скидання панелі PyVCP

  • %Q0 = Вивід до LinuxCNC для активації

  • %Q1 = Вихід на контакт увімкнення зовнішньої плати драйвера (використовуйте вихід N/C, якщо ваша плата має контакт вимикання)

Далі ми додаємо наступні рядки до файлу custom_postgui.hal

# Приклад аварійної зупинки з використанням кнопок PyVCP для імітації зовнішніх компонентів

# Кнопка перевірки PyVCP імітує нормально замкнутий зовнішній аварійний стоп
net ext-estop classicladder.0.in-00 <= pyvcp.py-estop

# Запит на ввімкнення аварійної зупинки від LinuxCNC
net estop-all-ok iocontrol.0.emc-enable-in <= classicladder.0.out-00

# Запит на ввімкнення аварійної зупинки від PyVCP або зовнішнього джерела
net ext-estop-reset classicladder.0.in-03 <= pyvcp.py-reset

# Цей рядок скидає аварійну зупинку з LinuxCNC
net emc-reset-estop iocontrol.0.user-request-enable => classicladder.0.in-02

# Цей рядок дозволяє LinuxCNC розблокувати аварійний стоп у ClassicLadder
net emc-estop iocontrol.0.user-enable-out => classicladder.0.in-01

# Ця лінія вмикає зелений індикатор після виходу з аварійної зупинки.
net estop-all-ok => pyvcp.py-es-status

Далі ми додаємо наступні рядки до файлу panel.xml. Зверніть увагу, що його потрібно відкрити за допомогою текстового редактора, а не за допомогою програми для перегляду html за замовчуванням.

<pyvcp>
<vbox>
<label><text>"E-Stop Demo"</text></label>
<led>
<halpin>"py-es-status"</halpin>
<size>50</size>
<on_color>"green"</on_color>
<off_color>"red"</off_color>
</led>
<checkbutton>
<halpin>"py-estop"</halpin>
<text>"E-Stop"</text>
</checkbutton>
</vbox>
<button>
<halpin>"py-reset"</halpin>
<text>"Reset"</text>
</button>
</pyvcp>

Тепер запустіть вашу конфігурацію, і вона має виглядати ось так.

Екстрена зупинка AXIS
Figure 4. Екстрена зупинка AXIS

Зверніть увагу, що в цьому прикладі, як і в реальному житті, ви повинні скинути дистанційну аварійну зупинку (імітовану прапорцем) перед тим, як аварійна зупинка AXIS або зовнішній скид переведуть вас у режим ВИМКНЕНО. Якщо на екрані AXIS була натиснута аварійна зупинка, ви повинні натиснути її ще раз, щоб скинути. Ви не можете виконати скид із зовнішнього пристрою після того, як ви виконали аварійну зупинку в AXIS.

4. Приклад таймера/операції

У цьому прикладі ми використовуємо блок Operate для призначення значення попередньому налаштуванню таймера залежно від того, чи вхід увімкнено чи вимкнено.

Приклад таймера/операції
Figure 5. Приклад таймера/операції

У цьому випадку %I0 має значення true, тому значення попереднього налаштування таймера дорівнює 10. Якщо %I0 має значення false, попередньо налаштоване значення таймера дорівнюватиме 5.