:: Visual Foxpro, Foxpro for DOS
работа с сом портом 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, а тут свои грабли.
Может кто сталкивался с ситуацией и вариант с передачей по байту не так уж и плох?
Ratings: 0 negative/0 positive
Re: работа с сом портом win api
sphinx

Сообщений: 31179
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
А так?

DECLARE INTEGER WriteFile IN WIN32API ;
INTEGER hFile, ;
STRING lpBuffer, ;
INTEGER nNumberOfBytesToWrite, ;
INTEGER @ lpNumberOfBytesWritten, ;
INTEGER lpOverlapped
lcData = DTOC( DATETIME() )
lnBytesWritten = 0
llRes = WriteFile(lhFileHandle, lcData, LEN(lcData), @lnBytesWritten, 0)


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: работа с сом портом win api
alw39

Сообщений: 17
Дата регистрации: 04.12.2009
К сожалению результат без изменений. Первый символ "2" второй "уй".
Что подумал , возможно я криво инициализирую порт структyрой DCB, попробую завтра переделать через стандартное WIN окно настройки СОМ



Исправлено 1 раз(а). Последнее : alw39, 23.01.17 19:40
Ratings: 0 negative/0 positive
Re: работа с сом портом win api
sphinx

Сообщений: 31179
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Здесь есть пример Игоря Королева: forum.foxclub.ru


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: работа с сом портом win api
alw39

Сообщений: 17
Дата регистрации: 04.12.2009
Спасибо, завтра буду разбираться.
Ratings: 0 negative/0 positive
Re: работа с сом портом win api
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
alw39
Что подумал , возможно я криво инициализирую порт структyрой DCB
Возможно. Ещё и режимы надо смотреть, синхронные/асинхронные, размер буфера...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: работа с сом портом win api
alw39

Сообщений: 17
Дата регистрации: 04.12.2009
Igor Korolyov
режимы надо смотреть
код взял рабочий на Си, вот в сокращенном виде
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.
Ratings: 0 negative/0 positive
Re: работа с сом портом win api
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
На си можно fll нарисовать и напрямую дёргать из фокса.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
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
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 23 Артём kornienko_ru Guest (Гостей: 20)

© 2000-2024 Fox Club 
Яндекс.Метрика