1. Концепции языка релейных схем

ClassicLadder — это тип языка программирования, первоначально реализованный в промышленных ПЛК (он называется языком релейных схем). Он основан на концепции контактов и катушек реле и может использоваться для построения логических проверок и функций способом, знакомым многим системным интеграторам. Лестница состоит из ступенек, которые могут иметь ответвления и напоминают электрическую цепь. Важно знать, как оцениваются лестничные программы при запуске.

Кажется естественным, что каждая строка будет оцениваться слева направо, затем следующая строка вниз и т. д., но в лестничной логике это не работает. Релейная логика scans ступеньки 3 раза, чтобы изменить состояние выходов.

  • входные данные считываются и обновляются

  • выясняется логика

  • выходы настроены

Поначалу это может сбить с толку, если выходные данные одной строки считываются входными данными другой цепочки. Будет одно сканирование, прежде чем второй вход станет true после установки выхода.

Еще одна ошибка при программировании лестниц — правило "Last One Wins". Если у вас есть один и тот же выход в разных местах вашей лестницы, состояние последнего будет таким, как установлено для выхода.

2. Языки

Наиболее распространенным языком, используемым при работе с ClassicLadder, является ladder. ClassicLadder также поддерживает Sequential Function Chart (Grafcet).

3. Компонентов

В ClassicLadder есть два компонента.

  • Модуль реального времени classicladder_rt

  • Модуль не в реальном времени (включая ГИП) classicladder

3.1. Файлы

Обычно компоненты ClassicLadder помещаются в файл custom.hal, если вы работаете с конфигурацией, созданной StepСonf. Их нельзя размещать в файле custom_postgui.hal, иначе меню Ladder Editor будет неактивно.

Note
Файлы релейных диаграмм (.clp) не должны содержать пробелов в имени.

3.2. Модуль реального времени

Загрузка модуля реального времени ClassicLadder (classicladder_rt) возможна из файла HAL или напрямую с помощью инструкции halcmd. Первая строка загружает в реальном времени модуль ClassicLadder. Вторая строка добавляет функцию classicladder.0.refresh в servo thread. Эта строка заставляет ClassicLadder обновляться со скоростью servo thread.

loadrt classicladder_rt
addf classicladder.0.refresh servo-thread

Скорость потока, в котором работает ClassicLadder, напрямую влияет на скорость реагирования на входные и выходные данные. Если вы можете включать и выключать переключатель быстрее, чем ClassicLadder это заметит, возможно, вам придется ускорить поток. Максимальное время, с которым ClassicLadder может обновлять ступени, составляет одну миллисекунду. Вы можете поместить его в более быстрый поток, но он не будет обновляться быстрее. Если вы поместите его в поток медленнее одной миллисекунды, ClassicLadder будет обновлять ступени медленнее. На дисплее секции будет отображаться текущее время сканирования, оно округляется до микросекунд. Если время сканирования превышает одну миллисекунду, вы можете сократить лестницу или поместить ее в более медленный поток.

3.3. Переменные

При загрузке модуля реального времени ClassicLadder можно настроить количество объектов релейной логики каждого типа. Если вы не настроите количество объектов релейной логики, ClassicLadder будет использовать значения по умолчанию.

Table 1. Количество переменных по умолчанию
Имя объекта Имя переменной Значение по умолчанию

Количество ступенек

(numRungs)

100

Количество бит

(numBits)

20

Количество word переменных

(numWords)

20

Количество таймеров

(numTimers)

10

Количество таймеров IEC

(numTimersIec)

10

Количество monostables

(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 не будет работать. Если вы использовали мастер настройки Stepper, поместите все команды ClassicLadder HAL в файл custom.hal.

Чтобы загрузить модуль не в реальном времени:

loadusr classicladder
Note
Можно загрузить только один файл .clp. Если вам нужно разделить лестницу, используйте секции.

Чтобы загрузить файл релейной логики:

loadusr classicladder myladder.clp

Параметры загрузки ClassicLadder

  • --nogui - (загружается без ladder editor), обычно используется после завершения отладки.

  • --modbus_port=port - (загружает номер порта Modbus)

  • --modmaster - (инициализирует ведущее устройство MODBUS) должен одновременно загрузить программу релейной логики, иначе TCP является портом по умолчанию.

  • --modslave - (инициализирует ведомое устройство MODBUS) только TCP

Чтобы использовать ClassicLadder с HAL без EMC:

loadusr -w classicladder

Параметр -w сообщает HAL не закрывать среду HAL до завершения работы ClassicLadder.

Если вы сначала загрузите лестничную программу с опцией --nogui, а затем снова загрузите ClassicLadder без опций, ГИП отобразит последнюю загруженную лестничную программу.

В AXIS вы можете загрузить ГИП из File/Ladder Editor…

5. ClassicLadder ГИП

Если вы загрузите ClassicLadder с графическим интерфейсом, он отобразит два окна: отображение разделов и менеджер разделов.

5.1. Менеджер разделов

При первом запуске ClassicLadder вы получаете пустое окно Менеджера разделов.

Окно Менеджера разделов по умолчанию
Figure 1. Окно Менеджера разделов по умолчанию

Это окно позволяет вам называть, создавать или удалять разделы и выбирать, какой язык будет использовать этот раздел. Так же можно назвать подпрограмму для обработчиков вызовов.

5.2. Отображение раздела

При первом запуске ClassicLadder вы получаете пустое окно отображения разделов. Отображается одна пустая ступень.

Окно отображения раздела по умолчанию
Figure 2. Окно отображения раздела по умолчанию

Большинство кнопок говорят сами за себя:

Кнопка Vars предназначена для просмотра переменных, переключайте ее для отображения одного, другого, обоих, а затем ни одного окна.

Кнопка Config используется для Modbus и показывает максимальное количество элементов релейной схемы, загруженных с помощью модуля реального времени.

Кнопка Symbols отобразит редактируемый список символов для переменных (подсказка как вы можете назвать входы, выходы, катушки и т. д.).

Кнопка Quit закроет программу, работающую не в режиме реального времени, т. е. Modbus и дисплей. Программа релейной логики в реальном времени по-прежнему будет работать в фоновом режиме.

Флажок в правом верхнем углу позволяет выбрать, будут ли отображаться имена переменных или имена символов

Вы могли заметить, что под отображением программы релейной логики есть строка с надписью "Project failed to load…". Это строка состояния, которая дает вам информацию об элементах релейной схемы, на которые вы нажимаете в окне отображения. В этой строке состояния теперь будут отображаться имена сигналов HAL для переменных %I, %Q и первого %W (в уравнении). На ступенях вы можете увидеть забавные метки, например (103). Это отображается (специально) из-за старой ошибки - при стирании элементов старые версии иногда не удаляли объект с правильным кодом. Вы могли заметить, что длинная горизонтальная кнопка подключения иногда не работала в старых версиях. Это произошло потому, что он искал free код, но нашел что-то еще. Число в скобках — это нераспознанный код. Программа релейной логики по-прежнему будет работать корректно, для исправления сотрите коды редактором и сохраните программу.

5.3. Окна переменных

Это два окна переменных: Bit Status Window (окно состояния бита) (логическое значение) и Watch Window (окно наблюдения) (целое число со знаком). Кнопка Vars находится в окне Section Display Window. Переключите кнопку Vars, чтобы отобразить одно, другое, оба окна, а затем ни одного окна переменных.

Окно статуса бита
Figure 3. Окно статуса бита

Окно состояния бита отображает некоторые логические переменные (вкл/выкл). Обратите внимание, что все переменные начинаются со знака %. Переменные %I представляют контакты входных битов HAL. %Q представляет катушки реле и контакты выходных битов HAL. %B представляет собой внутреннюю катушку реле или внутренний контакт. Три области редактирования вверху позволяют вам выбрать, какие 15 переменных будут отображаться в каждом столбце. Например, если в столбце переменная %B было 15 записей, а вы ввели 5 в верхней части столбца, будут отображены переменные от %B5 до %B19. Флажки позволяют вам устанавливать и отключать переменные %B вручную, если программа релейной логики не устанавливает их в качестве выходных данных. Любые биты, которые установлены программой как выходные данные во время работы ClassicLadder, не могут быть изменены и будут отображаться как отмеченные, если они включены, и не отмеченные, если выключены.

Окно просмотра
Figure 4. Окно просмотра

Окно просмотра (Watch Window) отображает статус переменной. Поле редактирования рядом с ним — это число, хранящееся в переменной, и выпадающий список рядом с ним, который позволяет вам выбрать, будет ли число отображаться в шестнадцатеричном, десятичном или двоичном формате. Если в окне символов определены имена символов для отображения словесных переменных и в окне отображения раздела установлен флажок display symbols, имена символов будут отображаться. Чтобы изменить отображаемую переменную, введите номер переменной, например %W2 (если флажок display symbols не установлен) или введите имя символа (если флажок display symbols установлен) поверх существующего номера/имени переменной и нажмите клавишу Enter.

5.4. Окно символов

Окно символьных имен
Figure 5. Окно символьных имен

Это список имен символов, которые можно использовать вместо имен переменных, которые будут отображаться в окне раздела, когда установлен флажок display symbols. Вы добавляете имя переменной (помните символ % и заглавные буквы), имя символа. Если к переменной может быть подключен сигнал HAL (%I, %Q и %W — если вы загрузили контакт s32 с модулем реального времени), то в разделе комментариев будет показано текущее имя сигнала HAL или его отсутствие. Имена символов должны быть короткими, чтобы они лучше отображались. Имейте в виду, что вы можете отобразить более длинные имена сигналов HAL для переменных %I, %Q и %W, кликнув на них в окне раздела. Между тем, нужно иметь возможность отслеживать, с чем связана программа релейной логики!

5.5. Окно редактора

Окно редактора
Figure 6. Окно редактора
  • Add - добавляет ступень после выбранной цепочки

  • Insert - вставляет цепочку перед выбранной цепочкой

  • Delete - удаляет выбранную цепочку

  • Modify - открывает выбранную цепочку для редактирования

Начиная с верхнего левого изображения:

  • Селектор объекта, Стиратель

  • Н.Р. вход, Н.З. вход, вход по фронту, вход по срезу

  • Горизонтальное соединение Вертикальное соденинение, Длинное горизонтальное соединение

  • Блок таймера IEC, Блок счетчика, Сравнить переменную

  • Блок старого таймера, Блок старый моностабильный (эти блоки были заменены Таймером IEC)

  • КАТУШКИ - Н.Р. выход, Н.З. выход, установить выход, сбросить выход

  • Катушка перехода, катушка вызова, назначение переменной

Краткое описание каждой из кнопок:

  • Селектор - позволяет выбирать существующие объекты и изменять информацию.

  • Стиратель - стирает объект.

  • Н.Р. контакт - создает нормально разомкнутый контакт. Это может быть входной контакт внешнего контакта HAL (%I), контакт внутреннего бита катушки (%B) или контакт внешней катушки (%Q). Входной контакт HAL-контакта замкнут, когда HAL-контакт находится в состоянии true. Контакты катушки замыкаются, когда соответствующая катушка активна (контакт %Q2 замыкается, когда катушка %Q2 активна).

  • Н.З. Контакт - создает нормально замкнутый контакт. Это то же самое, что и Н.Р. контакт, за исключением того, что контакт разомкнут, когда контакт HAL true или катушка активна.

  • Контакт по фронту - создает контакт, который замыкается, когда контакт HAL переходит из состояния False в состояние true или когда катушка из неактивного состояния в активное.

  • Контакт по срезу - создает контакт, который замыкается, когда контакт HAL переходит из состояния true в состояние false или катушка из состояния активно в состояние не активно.

  • Горизонтальное соединение - создает горизонтальную связь с объектами.

  • Вертикальное соединение - создает вертикальное соединение с горизонтальными линиями.

  • Горизонтальное рабочее соединение - создает горизонтальное соединение между двумя объектами и является быстрым способом соединить объекты, находящиеся на расстоянии более одного блока друг от друга.

  • IEC Таймер - создает таймер и заменяет Timer.

  • Timer - создает модуль таймера (вместо него используется таймер IEC).

  • Monostable - создает одноразовый моностабильный модуль

  • Счетчик - создает модуль счетчика.

  • Сравнение - создает блок сравнения для сравнения переменной со значениями или другими переменными, например. %W1<=5 или %W1=%W2. Сравнение не может быть размещено в самой правой части экрана раздела.

  • Назначение переменной - создает блок присвоения, позволяющий присваивать значения переменным, например. %W2=7 или %W1=%W2. Функции НАЗНАЧЕНИЯ можно разместить только в самой правой части дисплея раздела.

5.6. Окно конфигурации

Окно конфигурации показывает текущий статус проекта и содержит вкладки настройки Modbus.

Окно конфигурации
Figure 7. Окно конфигурации

6. Объекты релейной логики

6.1. КОНТАКТЫ

Представляют переключатели или контакты реле. Они управляются присвоенной им буквой и номером переменной.

Переменная буква может быть B, I или Q, а число может состоять из трех цифр, например %I2, %Q3 или %B123. Переменная I управляется входным контактом HAL с соответствующим номером. Переменная B предназначена для внутренних контактов, управляемых катушкой B с соответствующим номером. Переменная Q управляется катушкой Q с соответствующим номером (как в реле с несколькими контактами). Например, если вывод HAL classicladder.0.in-00 имеет значение true, то %I0 Н.Р. контакт будет включен (замкнут, true, как бы вы его ни называли). Если катушка %B7 находится под напряжением (включена, true и т. д.), то %B7 Н.Р. контакт будет включен. Если катушка %Q1 находится под напряжением, то %Q1 Н.Р. контакт будет включен (и контакт HAL classicladder.0.out-01 будет true).

  • Н.Р. Контакт - Нормально Разомкнутый Контакт (Normally Open) Когда переменная имеет значение false, переключатель выключен.

  • Н.З. Контакт - Нормально Замкнутый Контакт (Normally Closed) Когда переменная имеет значение false, переключатель включен.

  • Контакт по фронту - Когда значение переменной меняется с false на true, переключатель включается ИМПУЛЬСНО.

  • Контакт по срезу - Когда переменная меняется с true на false, переключатель включается ИМПУЛЬСНО.

6.2. IEC ТАЙМЕРЫ

Представляют новые таймеры обратного отсчета. Таймеры IEC заменяют таймеры и моностабильные устройства.

Таймеры IEC имеют 2 контакта.

  • I - входной контакт

  • Q - выходной контакт

Есть три режима - TON, TOF, TP.

  • TON - Когда входной сигнал таймера true, начинается обратный отсчет, который продолжается до тех пор, пока вход остается true . После завершения обратного отсчета и до тех пор, пока входной сигнал таймера остается true, выходной сигнал будет true.

  • TOF - Когда входной сигнал таймера равен true, устанавливает выходной сигнал true. Когда входной сигнал false, таймер ведет обратный отсчет, а затем устанавливает выходной сигнал false.

  • TP - Когда на входе таймера подается импульс true или удерживается true, таймер устанавливает выход в true до тех пор, пока таймер не начнет обратный отсчет. (одно срабатывание)

Временные интервалы можно задавать кратными 100&8239; мс, секундам или минутам.

Существуют также переменные для таймеров IEC, которые можно читать и/или записывать в блоках сравнения или управления.

  • %TMxxx.Q - таймер завершен (логический, чтение и запись)

  • %TMxxx.P - предустановка таймера (чтение запись)

  • %TMxxx.V - значение таймера (чтение и запись)

6.3. ТАЙМЕРЫ

Представляют таймеры обратного отсчета. Это устарело и заменено таймерами IEC.

Таймеры имеют 4 контакта.

  • E - разрешить (вход) запускает таймер когда true, сбрасывает когда переходит в false

  • C - управление (вход) должно быть включено, чтобы таймер запустился (обычно подключается к E)

  • D - завершено (вывод) true когда время таймера истекает и пока E остается true

  • R - работает (вывод) true, когда таймер работает

База таймера может быть кратна миллисекундам, секундам или минутам.

Существуют также переменные для таймеров, которые можно читать и/или записывать в блоках сравнения или управления.

  • %Txx.R - Таймер xx работает (логическое значение, только чтение)

  • %Txx.D - Таймер xx выполнен (логическое значение, только чтение)

  • %Txx.V - Текущее значение таймера xx (целое число, только чтение)

  • %Txx.P - Предустановка таймера xx (целое число, чтение или запись)

6.4. МОНОСТАБИЛЬНЫЕ

Представляют оригинальные одноразовые таймеры. Сейчас они устарели и заменены таймерами IEC.

Моностабильники имеют 2 контакта I и R.

  • I - вход (вход) запустит работу моно-таймера.

  • R - работа (выход) будет true, пока таймер работает.

Контакт I чувствителен к фронту, что означает, что он запускает таймер только при изменении состояния с false на true (или с выкл на вкл). Во время работы таймера контакт I может изменяться, не влияя на работающий таймер. R будет true и останется true до тех пор, пока таймер не завершит отсчет до нуля. База таймера может быть кратна миллисекундам, секундам или минутам.

Существуют также переменные для моностабильных таймеров, которые можно читать и/или записывать в блоках сравнения или управления.

  • %Mxx.R - Моностабильный xx работает (логическое значение, только чтение)

  • %Mxx.V - Моностабильный текущее значение xx (целое число, только чтение)

  • %Mxx.P - Предустановка xx моностабильного таймера (целое число, чтение или запись)

6.5. СЧЕТЧИКИ

Представляют счетчики прямого/обратного отсчета.

Есть 7 контактов:

  • R - сброс (вход) сбросит счетчик на 0.

  • P - предустановка (вход) установит счетчик на число предустановки, назначенное в меню редактирования.

  • U - прямой отсчет (вход) добавит единицу к отсчету.

  • D - обратный счет (вход) вычитает единицу из отсчета.

  • E - начало отсчета (выход) будет истинным, когда счетчик возобновится от 0 до 9999.

  • D - завершен (выход) будет true, когда отсчет будет равен предустановке.

  • F - переполнение (выход) будет true когда остчет перезапускается от 9999 к 0.

Контакты прямого и обратного счета чувствительны к фронту, что означает, что они учитываются только тогда, когда контакт меняется с false на true (или с выключенного на включенный, если вы предпочитаете).

Диапазон от 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, то сравнение true. Обратите внимание на запятую, разделяющую две группы сравнений.

  • ^ (экспонента), % (модуль), & (и), | (или),. -

  • ABS (абсолютное), MOY (французское усреднение), AVG (усреднение)

Например ABS(%W2)=1, MOY(%W1,%W2)<3.

В уравнении сравнения не допускаются пробелы. Например, %C0.V>%C0.P является допустимым выражением сравнения, а %C0.V > %CO.P не является допустимым выражением.

Ниже на странице приведен список переменных, которые можно использовать для чтения и записи в объекты релейной логики. При открытии нового блока сравнения обязательно удалите символ # при вводе сравнения.

Чтобы понять, меньше ли в два раза word переменная #1 текущего значения счетчика #0, синтаксис будет:

%W1<2*%C0.V

Чтобы узнать, равен ли 2-й бит S32in 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.

Пример назначения/сравнения
Figure 8. Пример релейной логики назначения/сравнения
images/Assignment_Expression.png
Figure 9. Пример выражения присваивания
images/Comparison_Expression.png
Figure 10. Пример сравнительного выражения

6.8. КАТУШКИ

Катушки представляют собой катушки реле. Они управляются присвоенной им буквой и номером переменной.

Буква переменной может быть B или Q, а число может состоять из трех цифр, например, %Q3 или %B123. Катушки Q управляют выходными контактами HAL, например. если %Q15 находится под напряжением, то контакт HAL classicladder.0.out-15 будет true. Катушки B — это внутренние катушки, используемые для управления потоком программы.

  • N.O. COIL -Катушка реле: когда катушка находится под напряжением, ее контакт, который обычно нормально разомкнутый (сокращенно: Н.Р.), будет замкнут (включен, true и т. д.), и ток может пройти.

  • N.C. COIL - Катушка реле которое инвертирует свои контакты: когда на катушку подается напряжение, ее нормально замкнутый контакт (сокращенно: НЗ) размыкается (выключается, false и т. д.), и ток прерывается.

  • SET COIL - Катушка реле с фиксирующими контактами: когда катушка находится под напряжением, ее Н.Р контакт будет зафиксирован замкнутым.

  • RESET COIL - Катушка реле с фиксирующими контактами: когда катушка находится под напряжением, ее Н.Р. контакт будет зафиксирован разомкнутым.

  • JUMP COIL - Катушка goto: когда катушка находится под напряжением, программа релейной логики переходит на ступень (в разделе CURRENT) - точки перехода обозначаются меткой ступени. (Добавьте метки ступеней в поле меток в верхнем левом углу отображения раздела.)

  • CALL COIL - Катушка gosub: когда на катушку подается напряжение, программа переходит к разделу подпрограммы, обозначенному номером подпрограммы - подпрограммы обозначаются от SR0 до SR9 (назначьте их в диспетчере разделов).

Warning
Если вы используете НЗ контакт с НЗ катушкой, логика будет работать (когда катушка находится под напряжением, контакт будет замкнут), но за этим действительно трудно уследить!

6.8.1. КАТУШКА ПЕРЕХОДА

JUMP COIL используется для JUMP в другой раздел, как переход в языке программирования BASIC.

Если вы посмотрите в верхний левый угол окна отображения разделов, вы увидите небольшое поле с меткой и более длинное поле для комментариев рядом с ним. Теперь перейдите в Editor→Modify, затем вернитесь в маленькое поле и введите имя.

Продолжайте и добавьте комментарий в разделе комментариев. Это имя метки является именем только этой ступени и используется JUMP COIL для определения того, куда идти.

Размещая JUMP COIL, добавьте ее в крайнее правое положение и измените метку на ступеньку, на которую вы хотите JUMP.

6.8.2. КАТУШКА ВЫЗОВА

CALL COIL используется для перехода к разделу подпрограммы и последующего возврата, как gosub в языке программирования BASIC.

Если вы перейдете в окно менеджера разделов, нажмите кнопку add section. Вы можете назвать этот раздел, выбрать, какой язык он будет использовать (лестничный или последовательный), и выбрать тип (основной или подпрограмма).

Выберите номер подпрограммы (например, SR0). Появится пустой раздел, и вы сможете создать свою подпрограмму.

Когда вы это сделаете, вернитесь к менеджеру разделов и щелкните свой основной раздел (имя по умолчанию prog1).

Теперь вы можете добавить CALL COIL в свою программу. CALL COIL должны быть размещены в крайнем правом положении ступеньки.

Не забудьте изменить метку на номер подпрограммы, который вы выбрали ранее.

7. Переменные ClassicLadder

Эти переменные используются в COMPARE или OPERATE для получения информации или изменения характеристик объектов релейной логики, например, для изменения предустановки счетчика или проверки завершения работы таймера.

Список переменных:

  • %Bxxx - Битовая память xxx (Boolean)

  • %Wxxx - Память слов (word) xxx (32 бита целое число со знаком)

  • %IWxxx - Память слов (word) xxx (S32 входной контакт)

  • %QWxxx - Память слов (word) xxx (S32 выходной контакт)

  • %IFxx - Память слов(word)xx (Вещественный входной контакт) (преобразован в S32 в ClassicLadder)

  • %QFxx - Память слов (word) xx (Вещественный выходной контакт) (преобразован в S32 в ClassicLadder)

  • %T`__xx__.R` - Таймер xx запущен (Boolean, только для чтения пользователем)

  • %T`__xx__.D` - Таймер xx завершен (Boolean, только для чтения пользователем)

  • %T`__xx__.V` - Таймер_xx_ текущее значение (целое число, только для чтения пользователем)

  • %T`__xx__.P` - Таймер_xx_ предустановка (целое число)

  • %TM`__xxx__.Q` - Таймер_xxx_ готов(Boolean, чтение запись)

  • %TM`__xxx__.P` - Таймер_xxx_ предустановка (целое число, чтение запись)

  • %TM`__xxx__.V` - Таймер_xxx_ значение (целое число, чтение запись)

  • %M`__xx__.R` - Моностабильный_xx_ запущен (Boolean)

  • %M`__xx__.V` - Моностабильный_xx_ текущее значение (целое число, только для чтения пользователем)

  • %M`__xx__.P` - Моностабильный_xx_ предустановка (целое число)

  • %C`__xx__.D` - Счетчик_xx_ готов (Boolean, только для чтения пользователем)

  • %C`__xx__.E` - Счетчик_xx_ пустое переполнение(Boolean, только для чтения пользователем)

  • %C`__xx__.F` - Счетчик_xx_ полное переполнение (Boolean, только для чтения пользователем)

  • %C`__xx__.V` - Счетчик_xx_ текущее значение (целое число)

  • %C`__xx__.P` - Счетчик_xx_ предустановка (целое число)

  • %Ixxx - Физический ввод_xxx_ (Boolean) (HAL входной бит)

  • %Qxxx - Физический вывод_xxx_ (Boolean) (HAL выходной бит)

  • %Xxxx - Активность шага_xxx_ (последовательный язык)

  • %X`__xxx__.V` - Время активности в секундах шага xxx (последовательный язык)

  • %Exx - Ошибки (Boolean, чтение запись (будет перезаписан))

  • Indexed or vectored variables - Это переменные, индексированные другой переменной. Некоторые могут назвать это векторными переменными. Пример: %W0[%W4] => если %W4 равно 23, это соответствует %W23

8. Программирование GRAFCET (конечный автомат)

Warning
Вероятно, это наименее используемая и наиболее плохо понятая функция ClassicLadder. Последовательное программирование используется для обеспечения того, чтобы серия событий релейной логики всегда происходила в заданном порядке. Последовательные программы не работают в одиночку. Всегда существует также лестничная программа, которая управляет переменными. Вот основные правила, регулирующие последовательные программы:
  • Правило 1: Исходная ситуация. Исходная ситуация характеризуется начальными шагами, которые по определению находятся в активном состоянии в начале операции. Должен быть хотя бы один начальный шаг.

  • Правило 2: R2, Очистка перехода. Переход либо разрешен, либо отключен. Говорят, что он включен, когда все непосредственно предшествующие шаги, связанные с соответствующим символом перехода, активны, в противном случае он отключен. Переход не может быть очищен, если он не включен и связанное с ним условие перехода не true.

  • Правило 3: R3, Эволюция активных шагов. Очистка перехода одновременно приводит к активному состоянию следующего шага(ов) и к неактивному состоянию непосредственно предшествующего шага(ов).

  • Правило 4: R4, Одновременная очистка переходов. Все одновременно очищаемые переходы очищаются одновременно.

  • Правило 5: R5, Одновременная активация и деактивация шага. Если во время работы шаг одновременно активируется и деактивируется, приоритет отдается активации.

Это окно редактора ПОСЛЕДОВАТЕЛЬНОСТИ. (Начиная с верхнего левого угла):
Selector arrow, Eraser (Курсор выделения, Стиратель)
Ordinary step, Initial (Starting) step (Обычный шаг, Начальный (стартовый) шаг)
Transition, Step and Transition (Переход, Шаг и переход)
Transition Link-Downside, Transition Link-Upside (Переходная ссылка-нижняя часть, Переходная ссылка-верхняя часть)
Pass-through Link-Downside, Pass-through Link-Upside Jump (Сквозная ссылка–нижняя сторона, Сквозная ссылка-переход верхняя часть)
Link, Comment Box + (Ссылка, Поле для комментариев)

Окно редактора последовательности
Figure 11. Окно редактора последовательности
  • ORDINARY STEP - имеет уникальный номер для каждого

  • STARTING STEP - в последовательной программе он должен быть. Здесь программа запустится.

  • TRANSITION - показывает переменную, которая должна иметь значение true, чтобы управление перешло к следующему шагу.

  • STEP AND 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 используются в лестничной логике. Переменные, назначенные переходам (например, %B), контролируют, перейдет ли логика к следующему шагу. После того, как шаг стал активным, переменная перехода, вызвавшая его активацию, больше не имеет над ним контроля. Последний шаг должен JUMP LINK обратно только к начальному шагу.

9. Modbus

Что следует учитывать:

  • Modbus — это программа, работающая не в режиме реального времени, поэтому на сильно загруженном компьютере у нее могут возникнуть проблемы с задержкой.

  • Modbus не совсем подходит для событий в реальном времени, таких как управление положением двигателей или управление аварийным остановом.

  • Для работы Modbus должен быть запущен ГИП ClassicLadder.

  • Modbus не полностью завершен, поэтому он не выполняет все функции Modbus.

Чтобы инициализировать MODBUS, вы должны указать это при загрузке программы ClassicLadder, работающей не в реальном времени.

Загрузка Modbus
loadusr -w classicladder --modmaster myprogram.clp

Параметр -w заставляет HAL ждать, пока вы не закроете ClassicLadder, прежде чем закрыть сеанс реального времени. ClassicLadder также загружает подчиненное устройство TCP Modbus, если вы добавите --modserver в командной строке.

Функции Modbus
  • 1 - чтение катушек

  • 2 - чтение входов

  • 3 - читать регистры временного хранения

  • 4 - прочитать входные регистры

  • 5 - писать одиночные катушки

  • 6 - записать один регистр

  • 8 - тест эхо

  • 15 - записать несколько катушек

  • 16 - записать несколько регистров

Если вы не укажете --modmaster при загрузке программы ClassicLadder, работающей не в реальном времени, эта страница не будет отображаться.

Конфиг I/O
Figure 12. Modbus I/O Конфиг
Config Coms
Figure 13. Конфигурация связи Modbus
  • 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 — IP-адрес ведомого устройства плюс, при необходимости, номер порта.

  • TYPE ACCESS - Здесь выбирается код функции MODBUS для отправки ведомому устройству (например, тип запроса).

  • COILS / INPUTS - Входы и катушки (биты) считываются/записываются в переменные I, B или Q (выбирает пользователь).

  • REGISTERS (WORDS) - Регистры (слова/цифры) сопоставляются с переменными IW, W или QW (выбирает пользователь).

  • 1st MODBUS ELEMENT - Адрес (или номер регистра) первого элемента в группе (не забудьте правильно установить MODBUS ELEMENT OFFSET).

  • NUMBER OF ELEMENTS - Количество элементов в этой группе.

  • LOGIC - Здесь можно инвертировать логику.

  • 1st%I%Q IQ WQ MAPPED - Это начальное количество переменных %B, %I, %Q, %W, %IW или %QW, которые отображаются в группу элементов modbus или из нее (начиная с первого номера элемента modbus).

В приведенном выше примере: Номер порта — для моего компьютера /dev/ttyS0 был моим последовательным портом.

Последовательная скорость установлена на 9600 бод.

Адрес подчиненного устройства установлен на 12 (на моем VFD я могу установить его от 1 до 31, что означает, что я могу общаться максимум с 31 VFD в одной системе).

Первая строка настроена на 8 входных битов, начиная с первого номера регистра (регистр 1). Таким образом, номера регистров 1–8 сопоставляются с переменными %B ClassicLadder, начиная с %B1 и заканчивая %B8.

Вторая строка настроена на 2 выходных бита, начиная с номера девятого регистра (регистр 9), поэтому номера регистров 9–10 отображаются в переменные ClassicLadder %Q , начиная с %Q9 и заканчивая %Q10.

Третья строка настроена на запись в 2 регистра (по 16 бит каждый), начиная с номера регистра 0th (регистр 0), поэтому номера регистров 0-1 отображаются в переменные ClassicLadder %W, начиная с %W0 и заканчивая %W1.

Легко допустить ошибку отклонения на единицу, поскольку иногда ссылки на элементы modbus начинаются с единицы, а не с 0 (на самом деле по стандарту так и должно быть!). Чтобы помочь в этом, вы можете использовать переключатель смещения элемента Modbus.

В документации к вашему ведомому устройству Modbus будет указано, как настраиваются регистры — стандартного способа не существует.

SERIAL PORT, PORT SPEED, PAUSE, и уровень DEBUG доступны для редактирования (значения применяются когда вы закрываете окно конфигурации, хотя Radio-кнопки применяются немедленно).

Чтобы использовать функцию эха, выберите функцию эха и добавьте номер ведомого устройства, которое вы хотите протестировать. Вам не нужно указывать какие-либо переменные.

Число 257 будет отправлено на указанный вами номер подчиненного устройства, и ведомое устройство должно отправить его обратно. Чтобы увидеть сообщение, вам понадобится запустить ClassicLadder в терминале.

10. Настройки MODBUS

Serial:

  • ClassicLadder использует протокол RTU (не ASCII).

  • 8 бит данных, четность не используется, 1 стоповый бит это так же известно как 8-N-1.

  • Скорость передачи данных должна быть одинаковой для ведомого и ведущего устройства. ClassicLadder может иметь только одну скорость передачи данных, поэтому для всех ведомых устройств должна быть установлена одинаковая скорость.

  • Пауза между кадрами — это время паузы после получения ответа.

  • MODBUS_TIME_AFTER_TRANSMIT — это продолжительность паузы после отправки запроса и до получения ответа (видимо, это помогает с медленными USB-конвертерами).

10.1. Информация о MODBUS

  • ClassicLadder может использовать распределенные входы/выходы на модулях, использующих протокол Modbus ("master": опрос ведомых устройств).

  • Ведомые устройства и их ввод/вывод можно настроить в окне конфигурации.

  • Доступны 2 эксклюзивных режима: Ethernet с использованием Modbus/TCP и последовательный режим с использованием Modbus/RTU.

  • Никакая четность не используется.

  • Если имя порта для последовательного порта не задано, будет использоваться режим TCP/IP…

  • Адрес ведомого устройства — это адрес ведомого устройства (Modbus/RTU) или IP-адрес.

  • IP-адрес может быть дополнен требуемым номером порта (xx.xx.xx.xx:pppp), иначе по умолчанию будет использоваться порт 9502.

  • 2 products have been used for tests: a Modbus/TCP one (Adam-6051, https://www.advantech.com) and a serial Modbus/RTU one (https://www.ipac.ws).

  • См. примеры: adam-6051 и modbus_rtu_serial.

  • Web links: https://www.modbus.org and this interesting one: https://www.iatips.com/modbus.html

  • MODBUS TCP SERVER INCLUDED

  • ClassicLadder имеет встроенный сервер Modbus/TCP. Порт по умолчанию — 9502. (Предыдущий стандарт 502 требует, чтобы приложение запускалось с правами root).

  • Список поддерживаемых кодов функций Modbus: 1, 2, 3, 4, 5, 6, 15 и 16.

  • Таблица соответствия битов и слов Modbus на самом деле не является параметрической и напрямую соответствует переменным %B и %W.

Более подробную информацию о протоколе Modbus можно найти в Интернете.

10.2. Ошибки связи

Если возникнет ошибка связи, появится всплывающее окно с предупреждением (если запущен ГИП), и значение %E0 будет true. 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.

Настройка регистра ввода-вывода конфигурации
Figure 14. Настройка регистра ввода/вывода Modbus

Обратите внимание, что на этом изображении мы установили уровень отладки на 1, чтобы сообщения Modbus выводились на терминал. Мы сопоставили наши регистры хранения для чтения и записи с переменными %W ClassicLadder, поэтому возвращаемые данные будут в %W2, как и в другом изображении, где мы сопоставили данные, начиная со второго элемента.

Настройка коммуникации
Figure 15. Настройка связи Modbus

11.1. Запрос

Давайте рассмотрим пример чтения одного регистра хранения по адресу 8448 Decimal (0x2100 Hex).

Глядя в ссылку на протокол Modbus:

Table 2. Запрос чтения регистра временного хранения
Имя количество байтов Значение (hex)

Код функции

(1 Byte)

3 (0x03)

Начальный адрес

(2 Bytes)

0 - 65535 (0x0000 to 0xFFFF)

Количество регистров

(2 Bytes)

1 to 125 (0x7D)

Контрольная сумма

(2 bytes)

Рассчитывается автоматически

Вот пример отправленной команды, напечатанной в терминале (все Hex):

INFO CLASSICLADDER-   Modbus I/O module to send: Lgt=8 <-  Slave address-1  Function code-3  Data-21 0 0 1 8E 36

Значение (Hex):

  • Lgt = 8 = сообщение имеет размер 8 байт, включая номер ведомого и число контрольной суммы

  • Номер ведомого = 1 (0x1) = Slave address 1

  • Function code = 3 (0x3) = прочитать регистр временного хранения

  • Начать с адреса = старший байт 33 (0x21) младший байтe 0 (0x00) = комбинированный адрес = 8448 (0x2100)

  • Число регистров = 1 (0x1) = вернуть 1 2-байтовый регистр (регистры хранения и чтения всегда имеют ширину 2 байта)

  • Контрольная сумма = старший байт 0x8E младший байт 0x36 = (0x8E36)

11.2. Ответ об ошибке

Если есть ответ об ошибке, он отправляет код функции плюс 0x80, код ошибки и контрольную сумму. Получение ответа об ошибке означает, что ведомое устройство видит команду запроса, но не может предоставить действительные данные. Глядя в ссылку на протокол Modbus:

Table 3. Возвращена ошибка для кода функции 3 (чтение регистра временного хранения)
Имя Количество байтов Значение (hex)

Код ошибки

1 Byte

131 (0x83)

Код исключения

1 Byte

1-4 (0x01 to 0x04)

Контрольная сумма

(2 bytes)

Рассчитывается автоматически

Значение кода исключения:

  • 1 - недопустимая функция

  • 2 - недопустимый адрес данных

  • 3 - Недопустимое значение данных

  • 4 - сбой ведомого устройства

Вот пример полученной команды, напечатанной в терминале (все Hex):

INFO CLASSICLADDER-   Modbus I/O module received: Lgt=5 ->   (Slave address-1  Function code-83 ) 2 C0 F1

Значение (Hex):

  • Номер ведомого = 1 (0x1) = Slave address 1

  • Код функции = 131 (0x83) = ошибка при чтении регистра временного хранения

  • Код ошибки = 2 (0x2) = запрошен недопустимый адрес данных

  • Контрольная сумма = (0x8E36)

11.3. Ответ данных

Просмотрите ссылку на протокол Modbus для ответа:

Table 4. Ответ данных для кода функции 3 (чтение регистра временного хранения)
Имя количество байтов Значение (hex)

Код функции

1 Byte

3 (0x03)

Число байтов

1 Byte

2 x N*

Значение регистра

N* x 2 Bytes

возвращаемое значение запрошенного адреса

Контрольная сумма

(2 bytes)

рассчитывается автоматически

*N = Number of registers

Вот пример полученной команды, напечатанной в терминале (все Hex):

INFO CLASSICLADDER-   Modbus I/O module received: Lgt=7 ->   (Slave address-1  Function code-3 2 0 0 B8 44)

значение (Hex):

  • Номер ведомого = 1 (0x1) = Slave address 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: First variable mapped. Если за одно чтение/запись запрашивается несколько регистров, то номера переменных идут последовательно после первого.

11.4. Ошибки MODBUS

  • В блоках сравнения функция %W=ABS(%W1-%W2) принимается, но не вычисляется должным образом. в настоящее время разрешен только %W0=ABS(%W1).

  • При загрузке программы релейной логики она загружает информацию Modbus, но не говорит ClassicLadder инициализировать Modbus. Вы должны инициализировать Modbus при первой загрузке ГИП, добавив --modmaster.

  • Если менеджер разделов расположен в верхней части экрана раздела, поперек полосы прокрутки и при нажатии кнопки exit, программа, работающая не в режиме реального времени, аварийно завершает работу.

  • При использовании --modmaster вы должны одновременно загрузить программу релейной логики, иначе будет работать только TCP.

  • чтение/запись нескольких регистров в Modbus приводит к ошибкам контрольной суммы.

12. Настройка ClassicLadder

В этом разделе мы рассмотрим шаги, необходимые для добавления ClassicLadder в конфигурацию, созданную мастером StepConf. На странице дополнительных параметров конфигурации мастера StepConf установите флажок "Include ClassicLadder PLC".

Stepconf ClassicLadder
Figure 16. StepConf ClassicLadder

12.1. Добавление модулей

Если вы использовали мастер StepConf для добавления ClassicLadder, вы можете пропустить этот шаг.

Чтобы добавить ClassicLadder вручную, вам необходимо сначала добавить модули. Это делается добавлением пары строк в файл custom.hal.

Эта строка загружает модуль реального времени:

loadrt classicladder_rt

Эта строка добавляет функцию ClassicLadder в поток сервопривода:

addf classicladder.0.refresh servo-thread

12.2. Добавление лестничной логики

Теперь запустите свою конфигурацию и выберите "File/Ladder Editor", чтобы открыть графический интерфейс ClassicLadder. Вы должны увидеть пустое окно Section Display и Sections Manager, как показано выше. В окне Section Display откройте Редактор. В окне редактора выберите Modify. Теперь появляется окно Properties , и в Section Display отображается сетка. Сетка — это одна ступенька лестницы. Ступенька может содержать ветви. Простая ступенька имеет один вход, соединительную линию и один выход. Ступенька может иметь до шести горизонтальных ветвей. Несмотря на то, что в одной ступеньке можно использовать более одной трассы, результаты непредсказуемы.

Section Display с сеткой
Figure 17. Section Display с сеткой

Теперь нажмите на Н.Р. вход в окне редактора.

Окно редактора
Figure 18. Окно редактора

Теперь щелкните в верхней левой сетке, чтобы разместить Н.Р. Войдите в лестницу.

Section Display с вводом
Figure 19. Section Display с вводом

Повторите вышеуказанные шаги, чтобы добавить Н.Р. выход в верхнюю правую сетку и используйте горизонтальное соединение, чтобы соединить их. Это должно выглядеть следующим образом. Если нет, используйте Eraser, чтобы удалить ненужные участки.

Section Display со ступенькой
Figure 20. Section Display со ступенькой

Теперь нажмите кнопку ОК в окне Editor. Теперь ваш Section Display должен выглядеть так:

Section Display завершен
Figure 21. Section Display завершен

Чтобы сохранить новый файл, выберите Save As и дайте ему имя. Расширение .clp будет добавлено автоматически. По умолчанию в качестве места для его сохранения должен использоваться текущий каталог конфигурации.

Диалог Save As
Figure 22. Диалог Save As

Опять же, если вы использовали мастер StepConf для добавления ClassicLadder, вы можете пропустить этот шаг.

Чтобы вручную добавить лестницу, вам нужно добавить в файл custom.hal строку, которая будет загружать ваш файл лестницы. Закройте сеанс LinuxCNC и добавьте эту строку в файл custom.hal.

loadusr -w classicladder --nogui MyLadder.clp

Теперь, если вы запустите конфигурацию LinuxCNC, ваша лестничная программа также будет работать. Если вы выберете "File/Ladder Editor", созданная вами программа появится в окне Section Display.