Win32api для последовательной связи в Excel VBA - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть устройства сбора данных, с которых я хотел бы получить информацию. Я начал небольшой проект в Python 3.5 с использованием pyserial для связи с устройством. Я могу отправлять команды и получать данные.

import serial
ser = serial.Serial()
ser.port = 'COM1'
ser.baudrate = 9600
ser.parity = PARITY_NONE
ser.timeout=.5
ser.open()
ser.write(b'#02\r')
print(ser.readline())
ser.close()

Это отправляет команду для извлечения данных из буфера, и когда я использую команду readline, я извлекаю данные.

b'>-999999-999999-999999-999999                     -999999\r'

Я создал таблицу Excel для размещения таблиц данных и критериев тестирования, по которым я оцениваю производительность наших машин. Первоначально это было для ручного пользовательского ввода, но я решил попробовать и посмотреть, смогу ли я автоматизировать это непосредственно в Excel. Я просмотрел несколько веб-страниц, нашел несколько компаний, которые просят оплатить код и т. Д. Наконец-то я остановился на работе, проделанной Scarms , которая использует WIN32API для работы с последовательным вводом-выводом против . оригинальный драйвер mscomm32.ocx.

Я смог перенести его файлы в свой проект и использовал пример кода для запуска. Я могу отправить сообщение и визуально проверить его с устройства, через которое я обмениваюсь информацией, но я не получаю никакого ответа от моего конечного устройства сбора данных.

strData = "#02\r"
lngSize = Len(strData)
lngStatus = CommWrite(intPortID, strData)

Переменная strData является строкой. При отправке сообщения с использованием pyserial перед ним стоит буква «b», которая (насколько мне известно) сигнализирует о его кодировании в биты перед отправкой через последовательный порт.

Я пытался просмотреть код modCOMM, который добавляется в VBA из кода, предоставленного по ссылке выше, но, похоже, я никак не могу получить информацию. Я неправильно отправляю информацию с помощью WIN32API?

Как правильно отправить эту команду по шине, чтобы получить ответ от конечного устройства?

Конечным устройством, о котором идет речь, является Advantech ADAM 4017 +.

...