Есть задача.
Нужно сделать телеграфный контроллер.
Использую Мегу162
Сом1 цепляется к ПК на скорости 9600
Сом2 цепляется на телеграфный канал на скорости 50
С ПК в контроллер по Сом1 присылаются байты. Контроллер фильтрует их:команды исполняет, а данные отправляет транзитом через Сом2 в телеграфный канал.
С телеграфного канала приходит только текст, в котором встречаются командные комбинации символов. Из этих комбинаций контроллер фильтрует только команду "Запрос автоответа"
Остальные команды фильтрует софт на ПК.
С Сом1 я использовал Inkey (см. код) - находил байты сравнивая буфер с 0, т.к. ни команды ни данные в моем протоколе не имеют нулевых байтов
Какую команду использовать для Com2 ? Тут могут с телеграфного канала и нулевой байт прислать.
$regfile = M162def.dat 'подключаем библиотек Мега162 $crystal = 2000000 'устанавливаем частоту системной синхронизации Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 2 , Databits = 8 , Clockpol = 0 'настраиваем СОМ1 Config Com2 = 50 , Synchrone = 0 , Parity = None , Stopbits = 2 , Databits = 5 , Clockpol = 0 'настраиваем СОМ2 Open "com1:" For Binary As #1 'открываем порт для связи с ПК ' Open "com2:" For Binary As #2 'открываем порт для связи с телеграфныс каналом 'имена констант для команд поступающих с ПК на контроллер Const Datb_minus = &HA3 'установить минус на выходе Тлг ' Const Datb_plus = &HAC 'установить плюс на выходе Тлг Const Sbros_contr = &HAA 'програмный сброс контроллера Const Pol_nast = &HA5 'прочитать настройки из контроллера Const Pol_pol = &HA9 'получить полярность на телеграфном входе 'имена констант для ответных команд c контроллера на ПК Const Per_pol_plus = &H90 'на телеграфном входе плюс Const Per_pol_minus = &H97 'на телеграфном входе минус Const Per_nast = &H81 'передача настроек на ПК Dim Autootvet_svoy As String * 20 'автоответ контроллера Dim Buf_com1 As Byte 'входной буфер на СОМ1 Dim Buf_com2 As Byte 'входной буфер на Сом2 'проверяем значение байта в буфере 'если значение не равно 0, то поступил байт с ПК 'проверяем его значение, если команда то переходим на выполнение 'если данные для передачи, то передаем на ТЛГ выход Buf_com1 = Inkey(#1) 'проверяем буфер If Buf_com1 > 0 Then Select Case Buf_com1 'проверяем значение Case &HA3 : Goto D_minus Case &HAC : Goto D_plus Case &HAA : Goto Sbros Case &HA5 : Goto P_nast Case &HA9 : Goto P_pol Case Else : Goto Tlg_send End Select End If 'конец проверки