MM16 » 20 окт 2008, 08:07
Данные на COM порт поступают от АЦП непрерывно. Программа приема должна успевать их вынимать из COM порта и обрабатывать быстрее, чем данные поступают. Это не всегда просто, особенно если Windows на долго "задумается". Под 98 и ME эта проблема более заметна, под XP менее.
Для работы с COM портом есть MSComm, который легко вызвать из VisualBasic. С ним можно работать и из Delphi, но там он не родной, могут быть мелкие проблемы. Для Delphi есть в интернете что то похожее, кажется называется BComPort. Наконец, можно работать с портом через вызов функций Windows. Это сложнее, но возможностей больше.
В MSComm есть буфера приема и передачи и средства считывания входных сигналов и задания выходных. Есть возможность задать настройки порта. Благодаря простоте использования именно этот объект использован в программе Get3.exe.
Программа в начале работы принимает несколько байт и ничего с ними не делает. Потов начинает просматривать поступающие байты до тех пор, пока не встретит байт в старшем бите которого 1. Начиная с этого байта все полученное разделяется на группы из трех байта. Из этих байтов извлекаются отсчеты АЦП и дискретный сигнал. Назначение битов в трехбайтовых группах описано в статье.
Пример строки для перевода байтов b1, b2, b3 в текстовую строку, записываемую в файл:
sss$=Str((b1 And 127) + (b2 And 7) * 128) & " " & Str((b2 And 112) \ 16 + (b3 And 127) * 8) & " " & Str((b2 And 8) \ 8)