Драйвер протокола приборов серии Мультитест


Главная / ЭКВМ / Программы для ЭКВМ / Работа с оборудованием

Анализатор жидкости pH-метр-иономер-кислородомер МУЛЬТИТЕСТ ИПЛ-513

Драйвер предназначен для организации обмена данными через последовательный порт по протоколу приборов серии МУЛЬТИТЕСТ.

Для работы с драйвером требуется предварительно ознакомиться с протоколом связи приборов.

Текст драйвера с комментариями в формате PDF: drivermtest.pdf (279 кб)

Драйвер может применяться в практических целях для построения систем контроля и мониторинга химического состава и физических параметров водных сред. Для этого может быть использован измерительно-вычислительный комплекс на базе ЭВМ Электроника МК-152 и аналитических приборов серии Мультитест.

Программа может быть использована как пример построения перемещаемого драйвера, работающего с оборудованием по последовательному порту. На основе приведенного примера можно самостоятельно разработать драйвер для других устройств, поддерживающих обмен по интерфейсу RS-232C (Стык С2).

Размещение подпрограммы драйвера в памяти программ и используемые регистры данных

Подпрограмма драйвера размещается в памяти программ ЭВМ с начала любой страницы (адрес кратный числу 100) и занимает три последовательно расположенные страницы.

Параметры команды протокола передаются в регистрах R7-R9. Содержащиеся в регистрах R99-R102 значения изменяются при работе подпрограммы. Содержимое остальных регистров данных не изменяется.

Вызов подпрограммы

Перед вызовом подпрограммы в регистры загружаются значения: R7 - параметр Z; R8 - параметр R; R9 - сетевой номер. Обращение к подпрограмме производится соответствующей командой с косвеной или прямой расширенной адресацией по адресу начала подпрограммы в памяти.

При каждом вызове происходит однократная посылка команды запроса в соответствии с установленными параметрами. Принятое по протоколу числовое значение в формате float преобразуется в число в формате ЭВМ.

Значения регистров функций последовательного порта устанавливаются при каждом вызове подпрограммы.

Возвращаемые значения

Подпрограмма возвращает в регистре X стека значение 0 при успешном окончании обмена, значения 1-255 при возникновении ошибок в соответствии с протоколом или значение 256 при отсутствии связи с прибором.

В регистре стека Y возвращается число, полученное от опрашиваемого устройства, или нулевое значение при возникновении ошибок.

Текст подпрограммы драйвера

  x0 x1 x2 x3 x4 x5 x6 x7 x8 x9
00x ИП4 9 9 П4 КП4 ИП0 КП4 ИПА КП4
01x РРИП 90 41 0 , 0 1 × K[x] 1
02x 0 0 × РП 99 2 5 0 + ПА
03x КППА Сх РРП 90 80 РРП 90 82 ИП9 РРП
04x 90 82 4 РРП 90 82 Сх РРП 90 82
05x 1 6 РРП 90 82 ИП7 РРП 90 82 ИП8
06x РРП 90 82 7 П0 Сх РРП 90 80 РРИП
07x 90 82 + FL0 69 РИП 99 2 7 0
08x + ПА КППА РРП 90 82 8 РРП 90 77
09x РРИП 90 77 Fx=0 90 3 0 РРП 90 50
10x РРИП 90 75 Fx=0 24 РРИП 90 50 Fx=0 00
11x РИП 99 2 8 5 + ПА КППА Сх В↑
12x 2 5 6 В/О Сх РРП 90 85 РРИП 90
13x 87 Fx=0 10 РРИП 90 87 ИП9 - Fx=0 10
14x РРИП 90 86 3 + П0 Сх РРП 90 85
15x РРИП 90 87 + FL0 50 РИП 99 2 7
16x 0 + ПА КППА РРИП 90 87 - Fx=0 10
17x 4 РРП 90 85 РРИП 90 86 3 3 -
18x Fx<0 90 РИП 99 2 0 8 + ПА КБПА
19x РИП 99 2 8 5 + ПА КППА 7 РРП
20x 90 85 РРИП 90 86 0 В/О Сх РРП
21x 90 31 РРП 90 30 4 П0 7 РРП 90
22x 85 РРИП 90 87 РРП 90 34 FL0 21 РИП
23x 99 2 8 5 + ПА КППА РРИП 90 38
24x 0 В/О 0FFh 0FFh 0FFh 0FFh 0FFh 0FFh 0FFh 0FFh
25x Сх РРП 90 72 РРП 90 74 0 9 РРП
26x 90 71 5 РРП 90 73 РРП 90 70 В/О
27x В↑ В↑ 2 5 6 П0 ÷ K[x] ИП0
28x × - В/О 0FFh 0FFh 9 9 П4 КИП4 КИП4
29x П0 КИП4 ПА П4 В/О      

Описание подпрограммы

Смещение Выполняемые действия
00-09 Сохранение регистров R0, R4, RA в R100-102 для последующего восстановления
10-24 Вычисление базового адреса для перемещения подпрограммы и сохранение его в R99
25-30 Инициализация порта с использованием подпрограммы по адресу 250
31-62 Формирование команды опроса. Загрузка буфера передачи: в 35 - начальный нуль, 38-41 - сетевой номер, 42-49 - длина, 50-54 - параметр K=16 (10h), 55-62 - параметры Z и R
63-74 Подсчет суммы байтов буфера передачи
75-85 Вычисление контрольной суммы с использованием подпрограммы 270 и помещение контрольной суммы в буфер передачи
86-89 Передача команды
90-94 Ожидание окончания передачи
95-99 Установка времени ожидания приема (300 мс)
100-109 Ожидание окончания приема и проверка тайм-аута
110-123 Выход по тайм-ауту и ошибкам формата пакета
124-139 Проверка буфера приема: 124-132 - неверный заголовок, 133-139 - неверный сетевой номер
140-155 Вычисление контрольной суммы пакета в буфере приема: 140-145 - в R0 вычисляется длина пакета, 146-149 - переход на начало буфера, 150-155 - цикл
156-163 Вычисление контрольной суммы, обращение к подпрограмме 270
164-169 Сравнение с принятой контрольной суммой, переход на 110 при ошибке
170-181 Проверка кода команды K>20h, переход на обработку ошибки протокола
182-189 Переход на обработку принятого числа
190-207 Выход по ошибке протокола
208-241 Преобразование принятого числа из float в формат ЭВМ и выход из подпрограммы драйвера
242-269 Подпрограмма инициализации регистров последовательного порта: 8 бит данных, автоприем, 9600 бит/с, время ожидания около 6 мс
270-284 Подпрограмма вычисления вычета по модулю 256 (остатка от деления на 256)
285-296 Восстановление регистров R0, R4, RA

Пример использования

Предположим, что приведенная выше подпрограмма загружена с адреса 100. Следующая программа, выполняет непрерывный опрос параметра по протоколу Мультитест и выводит в регистр Х значение числа, в регистр Y - состояние обмена (0-нет ошибок, 1-255 ошибка протокола, 256 - нет связи). Программа занимает 7 байт с нулевого адреса. В связи с небольшими размерами запишем программу в одну строку без указания адресов:

РПП; 01; 00; ↔; К ЭКР; БП; 00

Перед запуском в регистры R7-R9 следует занести необходимые значения. Например, для считывания значения ЭДС из первого канала pH-метра-иономера Мультитест ИПЛ с сетевым номером 1 (параметры Z=10h, R=10h) в регистры следует занести следующие значения: R7=16, R8=16, R9=1.

Программа запускается командами В/О, С/П.

Останов программы производится нажатием клавиши С/П.



НПП "СЕМИКО" (383) 271-01-25 (многоканальный)