Введение
Довольно часто операторам систем управления приходится на практике использовать различные терминальные устройства, работающие через последовательный порт. Простота и большая функциональность таких устройств сохраняют актуальность их применения и в современном технологичном мире.
Благодаря своей компактности и наличию всех необходимых для терминального устройства составляющих практически любую панель оператора можно использовать в качестве терминального пульта. Для этого потребуется лишь небольшая программа, которая может быть отдельной частью системы управления.
Рассмотрим на конкретном примере готовый пример такого проекта и программы.
Проект
В качестве панели оператора была использована распространённая модель MT8072iP компании Weintek [1]. Данная семидюймовая панель имеет цветной сенсорный графический экран с разрешением 800×480 пикселов и несколько коммуникационных интерфейсов, среди которых присутствует последовательный порт RS-232. Данный порт позволяет подключать панель оператора к микроконтроллерам, компьютерам или к другой панели оператора, имеющей аналогичный порт. Для осуществления такого подключения потребуется всего лишь три провода, соединяющие между собой сигнальные цепи: TxD, RxD и GND. Схема подобного соединения между панелью оператора и компьютером показана на рис. 1.

Аналогичным образом можно подключить панель оператора к другой панели оператора или к микропроцессорному устройству.
Программа
С помощью свободно распространяемой среды разработки EasyBuilder Pro создан рабочий программный проект для панели оператора. Описание среды разработки и способы загрузки приложения в панель оператора приведены в статье [2]. Основой проекта служит заготовка, которая автоматически формируется средой разработки при создании нового проекта.
В системных параметрах проекта необходимо добавить новое устройство в соответствии с окном, приведённым на рис. 2.

Здесь задаётся формат интерфейса RS-232, который будет использоваться в терминальном обмене данными.
Главное и единственное окно программы представлено на рис. 3.

Данное окно содержит один строковый элемент ASCII в поле отправки и четыре строковых элемента ASCII в поле приёма. Каждая из строк имеет максимально допустимый для данных элементов размер в 64 символа.
Инициализация этих строк производится с помощью макроса Init. В этом макросе приведена карта памяти панели оператора. Код макроса Init с подробными комментариями приведён в листинге 1.
Листинг 1. Код макроса Init
// Макрос инициализации
macro_command main()
// Карта памяти панели оператора
// LW0...LW255 – Буфер приёма
// LW2000...LW2255 – Буфер отправки
// LW3000 – Указатель начала строки в памяти x
// LW3001 – Счётчик отправленных символов n
// LW3002 – Количество принятых символов k
unsigned short m[256]={0} // Массив строк
unsigned short d=0 // Переменная данных
FILL(m[0], ' ', 256) // Заполнить весь массив строк символом пробела
SetData(m[0], "Local HMI", LW, 0, 256) // Записать массив строк в память панели оператора
SetData(d, "Local HMI", LW, 3000, 1) // Обнулить указатель начала строки в памяти x
SetData(d, "Local HMI", LW, 3001, 1) // Обнулить счётчик отправленных символов n
SetData(d, "Local HMI", LW, 3002, 1) // Обнулить количество принятых символов k
end macro_command
При нажатии на поле отправки в окне панели автоматически появится виртуальная клавиатура для ввода любых доступных символов. Завершение ввода производится виртуальной кнопкой «Enter», очистка – кнопкой «Clear», а закрытие клавиатуры – кнопкой «Esc».
Для отправки набранной строки применён элемент «Битовый переключатель» с именем «Отправить», используемый в качестве программной кнопки, который вызывает макрос Send_RS-232. Код этого макроса приведён в листинге 2.
Листинг 2. Код макроса Send_RS-232
// Макрос отправки строки символов в порт RS-232
macro_command main()
unsigned char tx[256]={0} // Массив символов строк
unsigned short n=0 // Счётчик отправленных символов
unsigned short i=0 // Переменная цикла
FILL(tx[0], 0, 256) // Обнулить массив
GetData(tx[0], "Local HMI", LW, 2000, 256) // Читать из памяти символы строк в массив
for i=0 to 255 // Проверка массива
if tx[i] <> 0 then // Если элемент массива не нулевой
OUTPORT(tx[i], "RS-232", 1) // Отправить элемент массива в порт RS-232
n=n+1 // Считать отправленные символы
end if
next i
SetData(n, "Local HMI", LW, 3001, 1) // Записать счётчик в память
// Beep() // Формировать звуковой сигнал окончания отправки
end macro_command
Для очистки поля приёма применён элемент «Битовый переключатель» с именем «Очистить». Он позволяет вызывать макрос Init, который и производит очистку памяти поля приёма.
Последний, третий макрос, который используется в программе, имеет имя Read_RS-232. Он постоянно опрашивает порт RS-232 с периодичностью 100 мс и помещает принятые символы в буфер памяти приёмника. Код макроса Read_RS-232 приведён в листинге 3.
Листинг 3. Код макроса Read_RS-232
// Макрос регулярного чтения порта RS-232
macro_command main()
unsigned char rx[256]={0} // Массив 8-разрядных символов строк
unsigned short rxu[256]={0} // Массив 16-разрядных символов строк
unsigned short k=0 // Количество принятых символов
unsigned short x=0 // Указатель начала строки в памяти
unsigned short i=0 // Переменная цикла
FILL(rx[0], 0, 256) // Обнулить массив 8-разрядных символов строк
INPORT2(rx[0], "RS-232", k, 1) // Читать порт RS-232
// TRACE("k=%u", k) // Отладочная информация
if k>0 then // Если приняты символы из порта RS-232
SetData(k,"Local HMI", LW, 3002, 1) // Записать количество принятых символов в память
for i=0 to 255
rxu[i]=rx[i] // Копировать массив
next i
GetData(x,"Local HMI", LW, 3000, 1) // Читать указатель начала строки в памяти
SetData(rxu[0],"Local HMI", LW, x, k) // Записать массив 16-разрядных символов строк в память
x=x+k // Вычислить смещение указателя
if x>255 then // Если указатель превысил границу
x=0 // Обнулить указатель
end if
SetData(x,"Local HMI", LW, 3000, 1) // Записать указатель в память
Beep() // Формировать звуковой сигнал окончания приёма символов
end if
end macro_command
Протестировать программу можно с помощью любого компьютера с установленной на нём терминальной программой или с помощью двух панелей оператора, подключив их между собой.
Заключение
Рабочий проект можно загрузить с сайта журнала и модернизировать его под конкретные задачи.
В данном проекте была использована библиотечная виртуальная клавиатура с латинскими буквами. При необходимости использования других национальных символов можно создать клон этой клавиатуры и назначить для неё нужные коды символов.
Кроме того, можно подключить к панели оператора физическую клавиатуру через интерфейс USB и использовать её для ввода символов. Для этого нужно изменить в атрибутах строкового элемента ASCII из поля отправки свойство ввода данных путём снятия отметки «Использовать всплывающую клавиатуру».
Окно программы можно оформить в соответствии с необходимым дизайном и стилем, соответствующим используемому комплексу системы управления.
Проект можно перенастроить и компилировать для загрузки в любой другой тип панели Weintek с необходимым размером экрана.
Литература
- URL: https://www.weintek.net/MT8072iP.html.
- Вальпа О. Интеллектуальное освещение // СТА. 2025. № 2. С. 52.
© СТА-ПРЕСС, 2025
Если вам понравился материал, кликните значок — вы поможете нам узнать, каким статьям и новостям следует отдавать предпочтение. Если вы хотите обсудить материал —не стесняйтесь оставлять свои комментарии : возможно, они будут полезны другим нашим читателям!

