Как передавать произвольные данные по сети из программы PMP20?
Для обмена посылками произвольного вида служит протокол свободного сокета — сетевой аналог свободного формата на последовательном порту. Отправка выполняется инструкцией S_SEND, приём — инструкцией S_RCV, и обе работают только в паре с инструкциями открытия и закрытия сокета.
Операнды у них одинаковые: первый — номер сокета, второй — адрес локального регистра, откуда берутся или куда кладутся данные, третий — количество данных. Отправка выполняется по нарастающему фронту; приём может выполняться и по фронту, и по обычному условию включения.
Ограничение по объёму жёсткое и определяется размером кэша контроллера: за одну отправку и за один приём проходит 1000 байт. Посылку большего размера придётся резать на части самостоятельно.
Три роли, в которых работает свободный сокет: контроллер сам устанавливает соединение с удалённым сервером; контроллер ждёт подключения клиента; контроллер работает без установления соединения и слушает заданный локальный порт. Роль задаётся операндами инструкции открытия сокета, дальнейшая работа с данными во всех трёх случаях одинакова.
Что остаётся на программе. Контроллер передаёт и принимает сырые байты — разбор посылки, проверка целостности, перевод символов в числа пишутся вручную. Здесь же пригодится поле блока параметров, куда контроллер кладёт фактическое число принятых байт: по нему проверяют, что прибор ответил посылкой ожидаемой длины, а не оборвал передачу.
Типичные потребители такого обмена — весовые терминалы, сканеры, измерительные приборы и системы верхнего уровня со своим форматом посылки.
Прикреплённая документация
Георгий Жуков
Ведущий инженер