Перейти к содержанию
    

uvw

Участник
  • Постов

    7
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Контакты

  • ICQ
    Array
  1. пожалуй, DPL прав! скорее всего так и происходит... я об этом подумал... но позже чем следовало, одной доки мне не дослали(прикрепил в аттаче) вторая часть документации на контроллер от разработчиков... блин, не могли в один файл запихнуть... попаду на работу, попробую поковырять... RS232_485.pdf
  2. veter, Давай, буду очень признателен ;) присылай на [email protected] or [email protected] если что придумается... я в аське (почти круглосуточно) ICQ# 342610002
  3. При установке DTR_CONTROL_DISABLE данные на контроллер не приходят вообще... Хе, а осциллографа у меня нет ;) и наврядли когда-то появится... я ж говорю, до этого никогда с "железом" не работал... по-сути дела, мне вооюще должно быть по-барабану что там за устройство, как оно работает и т.д. главное знать структуру посылки и структуру ответа, вот и все... а тем чем я занимаюсь, вообще должны, по-идее заниматься разработчики контроллера... а то, что это получается... там мы хотим работать, а там не хотим... ну, да ладно, это не важно... важно то, что оно должно работать, вот и оббиваю штукатурку головой ;) я уже облазил весь www.RS232.ru, перечитал кучу материала...но, никак не найду источник проблемы и метод устранения... с помошью WinDriver'a, тоже что-то не получается... хотя, код драйвера он генерит сам, главное настроить ресурсы устройства, а, потом, зарегить новый драйвер(удалив перед этим виндозный)... я в шоке. а всем, кто принимает участие в обсуждении, большой :a14:
  4. Фуухх, я уже окончательно запутался.... выкладываю настройку DCB .... DriverHandle = CreateFile (Com_Name, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (DriverHandle == INVALID_HANDLE_VALUE) { return (DriverHandle); } else { SetupComm (DriverHandle, 1024, 1024); GetCommState (DriverHandle, &Our_DCB); Our_DCB.BaudRate = DCB_Baud_Rate; Our_DCB.fParity = 0; Our_DCB.fOutxCtsFlow = 0; Our_DCB.fOutxDsrFlow = 0; Our_DCB.fDtrControl = DTR_CONTROL_ENABLE; Our_DCB.fDsrSensitivity = NULL; Our_DCB.fTXContinueOnXoff = 0; Our_DCB.fOutX = 0; Our_DCB.fInX = 0; Our_DCB.fErrorChar = 0; Our_DCB.fNull = 0; Our_DCB.fRtsControl = RTS_CONTROL_DISABLE; Our_DCB.fAbortOnError = 0; Our_DCB.ByteSize = 8; Our_DCB.Parity = NOPARITY; Our_DCB.StopBits = ONESTOPBIT; SetCommState (DriverHandle, &Our_DCB); SetCommMask (DriverHandle, EV_TXEMPTY); } .... А потом вызываю WriteFile... Данные приходят на контроллер, причем правильно им "понимаются"... а при вызове ReadFile нет ни одного быйта в очереди... а вот что происходит в паскале... {проверка контроллера на СОМ1} {в первом байте -младший адрес, идентификатор} {во втором байте-старший адрес, идентификатор, тип модуля, интервал ответа} {третий байт (первый байт массива)-команда, идентификатор, интервал между ответами} {если нужно передать данные, то следующие байт(ы) массива-данные} {последний байт-контрольная сумма} program com; uses crt,dos; var a,b,c,n,rs,P:byte; rs_old:pointer; r:registers; KS:word; I:byte; const MAX:byte = 1;{1-если нет данных} {команда---данные} BUF:array[1..10] of byte = ($e0, $8f,$8f,$8f,$8f,$8f,$8f,$8f,$8f,$8f); label no_RX_,no_0,no_1,no_2,no_RX__,yes_key; begin KS:=0; I:=0; port[$3fb]:=$83;{без паритета} port[$3f8]:=$06; port[$3f9]:=$00;{19200бод} port[$3fb]:=$03; port[$3f9]:=$00; port[$3fc]:=$03; {настроить преобразователь RS232/485 на передачу} delay(500); b:=0; KS:=0; {--ФОРМИРОВАНИЕ МЛАДШЕГО АДРЕСА с битами идентификатора, типа модуля--} P:=$00; KS:=P; port[$3f8]:=P;{передать адрес младший} no_0: rs:=port[$3fd]; rs:=rs and 64; if rs<>64 then goto no_0 else {goto yes_key;} {-------------------------------------} {--ФОРМИРОВАНИЕ СТАРШЕГО АДРЕСА с битами идентификатора, типа модуля и интервала ответа--} P:=$70; KS:=KS+P; port[$3f8]:=P;{передать адрес старший} no_1: rs:=port[$3fd]; rs:=rs and 64; if rs<>64 then goto no_1 else {goto yes_key;} {----------------------------} {--СФОРМИРОВАТЬ КОМАНДУ с битом идентификатора и интервалом между байтами ответа--} {если необходимо передать данные- изменить индекс и уст. данные массива} while (I < MAX) do begin I:=I+1; P:=BUF[I]; KS:=KS+P; port[$3f8]:=P;{передать команду И ДАННЫЕ} no_2: rs:=port[$3fd]; rs:=rs and 64; if rs<>64 then goto no_2 else end; {goto yes_key;} {----------------------------} {--СФОРМИРОВАТЬ К.С. с битом идентификатора--} KS:=KS and $00ff; P:=KS; P:=P or $80; port[$3f8]:=P;{передать КС} port[$3fc]:=$02;{настроить преобразователь RS232/485 на прием} write('com '); {----------------------------} {--ПРИНЯТЬ ВСЕ ПОДРЯД--} no_RX_: if memw[0:$41a]<>memw[0:$41c] then goto yes_key; rs:=port[$3fd]; rs:=rs and 1; if rs<>1 then goto no_RX_ else a:=port[$3f8];a:=a and 127; {стереть, для вывода на экран, бит идентификатор} write(a,';'); goto no_RX_; yes_key: writeln(KS); end. end Может кто что подскажет....
  5. Могу привести исходник на паскале, присланный разработчиками железки, и свой, на С++ который пытаюсь переписать с паскалевской и перевести на WinAPI... Был бы благодарен, если укжете в чем ошибка...
  6. Спасибо, но эту статью я недавно читал (на сайте www.rs232.ru) но, дело в том, что я никак не могу получить вообще ничего от контроллера... Я пробовал событийную модель(с помощью Overlapped и WaitCommEvent) с различными масками. Как поется, "Крикну, а в ответ - тишна"... Тут вопрос стоит в прямом обращении к порту, а это возможно только при наличии соответстующего драйвера(во всяком случае, в Win200/XP и им подобным) Для написания драйвера, посоветовали использовать WinDriver... Если кто ее использовал при работе с СОМ портом, подскажите плизз!!!
  7. Здравствуйте, уважаемые! Если кто сталкивался, помогите плизз. Долбаюсь уже 2 недели, и ничего не получается. Ситуация следующая: Есть некий контроллер и общается он с компьютером через RS232, в Win98 все работает, а вот Операционка Win2000 блокирует прямое обращение к портам. Мне подсказали прогу WinDriver для обхода этой проблемы... но опять-же, для LPT порта там есть стандартная заготовка, которая прекрасно работает... а о СОМ порте ни слова. Сразу оговорюсь, я не являюсь системным программистом и с железом дел никогда не имел... а тут пришлось ;) Искренне надеюсь на Вашу помощь. Заранее спасибо. З.Ы. Я впервые на этом форуме, и вполне возможно что запостил тему не совсем в тот раздел куда следовало бы. ЗЗ.ЫЫ Работать с этой штукой через CreateFile/ReadFile/WriteFile тоже не получается, в ReadFile постоянно нули возвращаются, хотя команда сформирована верно и контроллером принята...
×
×
  • Создать...