1. Счетчик с предустановкой

Чтобы иметь счетчик, который зацикливается, вам необходимо использовать вывод предустановки и вывод сброса. Когда вы создаете счетчик, установите предустановку на число, которого вы хотите достичь, прежде чем обнулить ее до 0. Логика заключается в том, что если значение счетчика превышает предустановленное значение, то счетчик сбрасывается, и если антипереполнение, счетчик устанавливается на предустановленное значение. Как вы можете видеть в примере, когда значение счетчика больше, чем заданное значение счетчика, срабатывает сброс счетчика, и значение теперь равно 0. Выход нижнего уровня %Q2 установит значение счетчика на заданное значение при обратном счете.

Счетчик с предустановкой
Figure 1. Счетчик с предустановкой

2. Отклонить дополнительные импульсы

В этом примере показано, как отклонить лишние импульсы на входе. Предположим, что входной импульс %I0 имеет раздражающую привычку давать дополнительный импульс, который портит нашу логику. TOF (задержка выключения таймера) предотвращает попадание дополнительного импульса на наш очищенный выход %Q0. Это работает так: когда таймер получает входной сигнал, выход таймера включается на время, установленное в настройках времени. Используя нормально закрытый контакт %TM0.Q, выход таймера блокирует любые дальнейшие входы от достижения нашего выхода до тех пор, пока не истечет время ожидания.

Отклонить дополнительный импульс
Figure 2. Отклонить дополнительный импульс

3. Внешний аварийный останов

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

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

Сначала нам нужно открыть цикл аварийного останова в основном файле 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

Далее мы запускаем нашу конфигурацию и строим лестницу, как показано здесь.

E-Stop Section Display
Figure 3. E-Stop Section Display

После построения лестницы выберите Save As и сохраните лестницу как estop.clp.

Теперь добавьте следующую строку в файл custom.hal.

# Load the ladder
loadusr classicladder --nogui estop.clp

I/O назначения

  • %I0 = Ввод с панели PyVCP, имитирующий аварийный останов (флажок)

  • %I1 = Ввод от аварийного останова LinuxCNC

  • %I2 = Ввод импульса сброса аварийного останова LinuxCNC

  • %I3 = Ввод от кнопки сброса панели PyVCP

  • %Q0 = Вывод в LinuxCNC для разрешения

  • %Q1 = Выход на контакт включения внешней платы драйвера (используйте выход Н.З., если на вашей плате есть контакт запрета)

Затем мы добавляем следующие строки в файл custom_postgui.hal.

# E-Stop example using PyVCP buttons to simulate external components

# The PyVCP checkbutton simulates a normally closed external E-Stop
net ext-estop classicladder.0.in-00 <= pyvcp.py-estop

# Request E-Stop Enable from LinuxCNC
net estop-all-ok iocontrol.0.emc-enable-in <= classicladder.0.out-00

# Request E-Stop Enable from PyVCP or external source
net ext-estop-reset classicladder.0.in-03 <= pyvcp.py-reset

# This line resets the E-Stop from LinuxCNC
net emc-reset-estop iocontrol.0.user-request-enable => classicladder.0.in-02

# This line enables LinuxCNC to unlatch the E-Stop in ClassicLadder
net emc-estop iocontrol.0.user-enable-out => classicladder.0.in-01

# This line turns on the green indicator when out of E-Stop
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 E-Stop
Figure 4. AXIS E-Stop

Обратите внимание, что в этом примере, как и в реальной жизни, вы должны очистить удаленный аварийный останов (имитируемый флажком), прежде чем аварийный останов AXIS или внешний сброс переведут вас в режим ВЫКЛ. Если кнопка аварийного останова на экране AXIS была нажата, вам придется нажать ее еще раз, чтобы очистить ее. Вы не можете выполнить сброс с внешнего устройства после выполнения аварийного останова в AXIS.

4. Timer/Operate пример

В этом примере мы используем блок Operate для присвоения значения предустановке таймера в зависимости от того, включен или выключен вход.

Timer/Operate пример
Figure 5. Timer/Operate пример

В этом случае %I0 имеет значение true, поэтому предустановленное значение таймера равно 10. Если %I0 было ложным, предустановленное значение таймера будет равно 5.