ЖУРНАЛ СТА №2/2023

force). Если переменная зафиксирова- на, значение будет сброшено до ука- занного значения в конце каждого цик- ла (перед записью на выходы). В столбце “Force” окна “Watchlist” OpenPCS будет отображать, является ли переменная в настоящее время зафик- сированной или нет (рис. 32). Фиксация только сбрасывает пере- менную в конце каждого цикла. Моди- фикации в течение одного цикла воз- можны и не предотвращаются. Удале- ние переменной из списка наблюдения автоматически отключит фиксацию этой переменной. GETTASKINFO – инструмент профилирования Для профилирования задач, требова- тельных к времени исполнения, разра- ботчики Firmware GCAN предусмотре- ли функциональный блок GETTASK- INFO (рис. 34). Во встроенной справке содержится краткая информация о GETTASKINFO : GETTASKINFO returns information about the execution time of the last cycle of the current task. This function block has no input parameters. Output Count: DWORD; (*number of cycles this task is executed *) LastCT: TIME; (*time needed for last cycle*) AverageCT: TIME; (*average time needed for execution*) MinCT: TIME; (*minimum time needed for execution*) MaxCT: TIME; (*maximum time needed for execution*) State: DWORD; (*not yet used Чтобы проиллюстрировать его функ- ции, внесём изменения в программу DIO_AIO, создав предварительно пере- менную экземпляра ФБ GETTASKINFO и ряд вспомогательных переменных (рис. 35). Для того чтобы заметно увеличить время выполнения программы, вставим цикл, содержащий 1000 умножений пе- ременной с плавающей точкой mult (рис. 36). В окно watch list добавим вновь соз- данную переменную avrt (рис. 37). Видно, что среднее время выполне- ния задачи DIO_AIO составляет 8 мс. Так как львиную долю времени зани- мает умножение с плавающей точкой, можно дополнительно сделать вывод, что умножение выполняется пример- но за 8 мкс. Заключение Для семейства ПЛК GCAN (GCAN-PLC- 400, GCAN-PLC-510, GCAN-PLC-511) ха- рактерны удобное, испытанное вре- менем конструктивное исполнение; прекрасная поддержка популярных сетевых интерфейсов и протоколов; удачно сбалансированный набор моду- лей ввода-вывода и модулей расшире- ния функций контроллера; простая в изучении, удобная бесплатная среда программирования OpenPCS, включаю- щая инструментарий онлайн-отладки приложений; развитая библиотека Firmware, содержащая большой набор специализированных функций и функ- циональных блоков. ПЛК прекрасно подходят для реали- зации небольших и средних по числу входных сигналов проектов. Наличие в номенклатуре повторителей узла сети CANopen, Modbus RTU, Modbus TCP (GCAN-IO-8000, GCAN-IO-8100) позво- ляет легко расширять с помощью модулей GCAN возможности ввода- вывода уже существующих систем или систем на основе ПЛК других произво- дителей. Авторы надеются, что смогут помочь заинтересованным читателям преодо- леть естественный барьер первона- чального изучения ПЛК GCAN. ● Литература 1. GCAN-PLC-510 Programmable Logic Control- ler User manual. 2. GC-1018 8-channel digital input module (NPN) User manual. 3. GC-2018 8-channel digital output module (NPN) User manual. 4. GC-3624 4-channel analog input module (-10V~+10V) User manual. 5. GC-4662 2-channel analog output module (0V~+5V) User manual. 6. ГОСТ Р МЭК 61131-3-2016. 7. Петров И.В. Программируемые контрол- леры. Стандартные языки и приёмы при- кладного проектирования / под ред. проф. В.П. Дьяконова. М.: СОЛОН-Пресс, 2004. 256 c. 8. Романов С. Изучаем Structured Text стан- дарта МЭК 61131-3". 9. OpenPCS Programing System. User Manual. Version 7.0. Авторы – сотрудники фирмы ПРОСОФТ Телефон: (495) 234-0636 E-mail: info@prosoft.ru СТА 2/2023 30 www.cta.ru ОБ ЗОРЫ GETTSI:GETTASKINFO; (*ФБ для профилирования программы*) d_count: dword; (* Количество циклов выполнения задачи*) mint: time; (* Минимальное время выполнения задачи*) maxt: time; (* Максимальное время выполнения задачи*) avrt: time; (* Среднее время выполнения задачи*) mult:real:=1.31; (*Просто переменная с плавающей точкой*) Index: int; (*Счётчик цикла*) GETTSI(); (*Получим результат профилирования DIO_AIO*) d_count:=GETTSI.COUNT; (* Количество циклов выполнения задачи*) mint:= GETTSI.MINCT; (* Минимальное время выполнения задачи*) maxt:= GETTSI.MAXCT; (* Максимальное время выполнения задачи*) avrt:= GETTSI.AVERAGECT; (* Среднее время выполнения задачи*) (*Выполним 1000 умножений с плавающей точкой*) FOR Index :=1 TO 1000 BY 1 DO mult:=mult*mult; END_FOR; mult:=1.31; (* Восстановим первоначальное значение переменной*) Рис. 35. Объявление переменных для профилирования Рис. 36. Фрагмент исходного кода профилирования программы DIO_AIO Рис 37. Окно "Watchlist". Результат профилирования

RkJQdWJsaXNoZXIy MTQ4NjUy