работа с сом портом win api | |
---|---|
alw39 Сообщений: 17 Дата регистрации: 04.12.2009 |
Доброго всем дня.
Пытаюсь отправить данные в сом из VFP9 посредством win api не могу решить проблему с WriteFile DECLARE INTEGER WriteFile IN kernel32 INTEGER hFile ,STRING @ lpBuf, INTEGER swSize, INTEGER lpBtWritten, INTEGER lpOverlapped *lpBuf="qwer" *=WriteFile(hPort,@lpBuf,len(lpBuf),lpBtWritten,0) =WriteFile(hPort,"qwer",4,0,0) во всех вариантах правильно передается первый символ остальные упаковывает во второй и выводит в виде буквы уй намекая видимо чтоб отстал. Насколько помню аналогичная функция send(hSocket, @cBuffer,len(cBuffer),0) в VFP отрабатывала корректно и отсылала весь буфер, можно конечно передавать по символу но это как то не по феншую. Этот же фрагмент на Си работает но хотел уйти от работы с таблицей через odbc, а тут свои грабли. Может кто сталкивался с ситуацией и вариант с передачей по байту не так уж и плох? |
Re: работа с сом портом win api | |
---|---|
sphinx Сообщений: 31179 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
А так?
------------------ "Veni, vidi, vici!"(с) |
Re: работа с сом портом win api | |
---|---|
alw39 Сообщений: 17 Дата регистрации: 04.12.2009 |
К сожалению результат без изменений. Первый символ "2" второй "уй".
Что подумал , возможно я криво инициализирую порт структyрой DCB, попробую завтра переделать через стандартное WIN окно настройки СОМ Исправлено 1 раз(а). Последнее : alw39, 23.01.17 19:40 |
Re: работа с сом портом win api | |
---|---|
sphinx Сообщений: 31179 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
|
Re: работа с сом портом win api | |
---|---|
alw39 Сообщений: 17 Дата регистрации: 04.12.2009 |
Спасибо, завтра буду разбираться.
|
Re: работа с сом портом win api | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
Возможно. Ещё и режимы надо смотреть, синхронные/асинхронные, размер буфера... ------------------ WBR, Igor |
Re: работа с сом портом win api | |
---|---|
alw39 Сообщений: 17 Дата регистрации: 04.12.2009 |
код взял рабочий на Си, вот в сокращенном виде hSerial = ::CreateFile(sPortName,GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); DCB dcbSerialParams = {0}; dcbSerialParams.DCBlength=sizeof(dcbSerialParams); dcbSerialParams.BaudRate=CBR_9600; dcbSerialParams.ByteSize=8; dcbSerialParams.StopBits=ONESTOPBIT; dcbSerialParams.Parity=NOPARITY; BOOL iRet = WriteFile (hSerial,data,dwSize,&dwBytesWritten ,NULL); в фоксе как не извращался над структурой и через CommConfigDialog("com2",0,@lpDCB) и напрямую в неё пытался писать реакции нет , WriteFile передает один байт если для передачи один и два если передаем >=2, причем работает так если все команды инициализации структуры закомментированы, видимо используются параметры порта из диспетчера устройств. Бросаю эту затею, два дня впустую это перебор, возвращаюсь к варианту Си - Odbc-dbf. |
Re: работа с сом портом win api | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
На си можно fll нарисовать и напрямую дёргать из фокса.
------------------ WBR, Igor |
Re: работа с сом портом win api | |
---|---|
alw39 Сообщений: 17 Дата регистрации: 04.12.2009 |
посмотрел что возвращает в структуру GetCommState(hPort,@lpDCB), а возвращает она 28 байт в порядке little-endian и забил эти данные в структуру в виде строки
DCBlength=chr(28)+chr(0)+chr(00)+chr(0) BaudRate=chr(128)+chr(37)+chr(0)+chr(0) fBiT =chr(1)+chr(0)+chr(0)+chr(0) wReserved=chr(0)+chr(0) XonLim=chr(128)+chr(0) XoffLim=chr(32)+chr(0) ByteSize=chr(8) Parity=chr(0) StopBits=chr(0) XonChar=chr(11) XoffChar=chr(13) ErrorChar=chr(0) EofChar=chr(0) EvtChar=chr(0) wReserved1=chr(0)+chr(0) lpDCB=DCBlength+BaudRate+fBiT+wReserved+XonLim+XoffLim+ByteSize+Parity+StopBits+XonChar+XoffChar+ErrorChar+EofChar+EvtChar+wReserved1 после этого строка начала передаваться но глюк с уй переодически проскакивает, видимо надо дальше копать настройки. Исправлено 2 раз(а). Последнее : alw39, 26.01.17 11:03 |
© 2000-2024 Fox Club  |