В реальных сценариях часто нужно по определённой логике и последовательности управлять запуском и остановкой встроенных функциональных модулей TSMaster. В TSMaster есть C/Python-мини-программы и графические программы, и разработчик может программно точно управлять их выполнением. В статье — как через C-код управлять запуском и остановкой встроенных модулей TSMaster.

Ключевые слова: run_form, stop_form, C-мини-программа, COM.

1. Функции run_form и stop_form

Во встроенных мини-программах TSMaster есть функции run_form и stop_form — они управляют запуском и приостановкой рабочих окон TSMaster. Например, окном передачи CAN / CAN FD можно управлять из мини-программы: запускать и останавливать отправку сообщений (рис. 1). Описания функций — в таблицах (рис. 2, 3).

Функции run_form и stop_form
Рис. 1. Управление окном передачи CAN / CAN FD
Описание run_form
Рис. 2. Описание функции run_form
Описание stop_form
Рис. 3. Описание функции stop_form

2. Управление запуском и остановкой других мини-программ из мини-программы

Функции run_form и stop_form управляют запуском и остановкой окон TSMaster — а это, естественно, и окна C-мини-программ, Python-мини-программ и графических программ. Так мини-программы могут из кода взаимно управлять запуском и приостановкой друг друга.

На рис. 4 созданы две C-мини-программы с именами окон «C Code Editor [1]» и «C Code Editor [2]»: в событии клавиши мини-программы 1 реализовано управление мини-программой 2, а в событиях запуска и остановки мини-программы 2 информация печатается в системные сообщения.

Взаимное управление мини-программ
Рис. 4. Управление мини-программой 2 из мини-программы 1

В некоторых тестовых сценариях мини-программы нужно по очереди циклически запускать и останавливать. Для этого в каждой мини-программе в месте, где текущая должна завершиться, вызывайте terminate_application, а в событии завершения программы через run_form запускайте следующую C-мини-программу. На рис. 5 каждая мини-программа через две секунды после запуска завершает себя и запускает следующую — реализовано циклическое управление C-мини-программами 1, 2 и 3.

Циклическое управление мини-программами
Рис. 5. Циклическое управление мини-программами 1–3

Важный нюанс: при передаче имени окна как параметра имя нужно вводить полностью. Например, на рис. 4 для управления мини-программой указывается полное имя «C Code Editor [1]», а не просто «1» — иначе в окне системных сообщений появится ошибка «окно не найдено».

3. Управление мини-программами через COM

TSMaster открывает COM-интерфейс, чтобы внешние программы могли вызывать и управлять проектом TSMaster, но прямых аналогов run_form и stop_form для управления мини-программами в проекте через COM нет. Это не значит, что управлять мини-программами извне нельзя: в управляемом проекте TSMaster держите постоянно запущенную мини-программу, которая по событию изменения переменной управляет запуском и остановкой остальных мини-программ. Тогда внешняя программа через COM-интерфейс системных переменных косвенно управляет мини-программами проекта.

Шаги управления мини-программами TSMaster через COM:

  1. Шаг 1. В управляемом проекте TSMaster настройте автозапускаемую мини-программу: свяжите в ней событие изменения переменной и в этом событии управляйте другими мини-программами через run_form и stop_form (рис. 6).
  2. Шаг 2. Во внешней программе, вызывающей COM-компонент, загрузите управляемый проект TSMaster функцией load_project, настройте число каналов и привязку (mapping), затем запустите проект функцией connect.
  3. Шаг 3. Через set_system_var_generic присвойте значение системной переменной проекта TSMaster — это вызовет событие изменения переменной в C-мини-программе, которая через run_form и stop_form запустит или остановит нужные мини-программы (рис. 7).
Мини-программа-диспетчер
Рис. 6. Мини-программа-диспетчер с событием изменения переменной
Управление через COM
Рис. 7. Управление мини-программами из внешней программы через COM