Страница 1 из 1
Прочитать COM порт
Добавлено: 08 Март 2026, 11:07
Андрей
Всех приветствую !
Возникла задача взять данные с COM порта. Изучив форум, вижу что топики старые и что-то у меня ничего не получается. Да собственно как получится, если нет в системе никакого WinComm.dll ?
Module('WinComm.dll')
CreateFile(*CString lpFileName, ULONG DesiredAccess, ULONG ShareMode, |
ULONG SecurityAttributes=0, ULONG CreationDisposition, ULONG Flags, |
UnSigned TemplateFile=0),UnSigned, PASCAL,RAW,Name('CreateFileA'),DLL(TRUE)
Не поделится ли кто примером работающего кода ?
Прочитать COM порт
Добавлено: 08 Март 2026, 12:01
finsoftrz
Заодно отправка смс через модем.
Прочитать COM порт
Добавлено: 08 Март 2026, 16:52
Андрей
Спасибо !
Еще бы парочку строчек кода примера, мне только чтение
Начало типа такого как понял
FsComL.Init('COM3')
FsComL.SetUpString('baud=9600')
А само чтение - как там использовать эту функцию и проверять буфер порта ?
FsComL.Read(l:buf,?,?)
Прочитать COM порт
Добавлено: 08 Март 2026, 17:57
finsoftrz
Подключение да, примерно так. Лучше вариант, который поддерживает более одной цифры в номере com порта. После запуска процедуры инициализация класса:
Код: Выделить всё
if FsComScan.Init('\\.\COM' & PAR:DevScanCom)=0
message('Ошибка подключения сканера: ' & clip(FsComScan.LastError))
else
if FsComScan.SetUpString('baud=9600 parity=N data=8 stop=1')=0
message('Ошибка при установке параметров порта: ' & clip(FsComScan.LastError))
.
.
Перед завершением процедуры:
Для чтения надо на окно повесить таймер. В событии обработки EVENT:Timer прописать код чтения, типа такого:
Код: Выделить всё
window{PROP:TIMER}=0
Loc:BarCode=''
loop
if FsComScan.Read(Loc:Buffer,1,Loc:BytesRead)=0
break
.
if Loc:BytesRead=0
break
.
if Loc:Buffer[1] = '<10>'
cycle
.
if Loc:Buffer[1] = '<02>'
cycle
.
if Loc:Buffer[1] = '<03>'
cycle
.
if Loc:Buffer[1] = '<13>' !завершение штрих-кода
break
.
Loc:BarCode = clip(Loc:BarCode) & Loc:Buffer[1]
.
if Loc:BarCode<>''
loc:shtrih=Loc:BarCode
.
window{PROP:TIMER}=100
В примере переменные
Код: Выделить всё
loc:shtrih string(150)
Loc:BarCode string(150)
Loc:Buffer cstring(255)
Loc:BytesRead ulong
Прочитать COM порт
Добавлено: 08 Март 2026, 22:42
Андрей
Благодарю !
Но что-то у меня не получается, не пойму как так.
Объявляю экземпляр хоть в локальных, хоть в глобальных
FsComL FsCom
Проверка подключения проходит. Однако когда добавляю основную обработку в таймере, получаю ошибку
на
if FsComL.Read(Loc:Buffer,1,Loc:BytesRead)=0
Unknown function label и No matching prototype available
Прочитать COM порт
Добавлено: 09 Март 2026, 7:39
finsoftrz