Как програмно работать с ком-портом посредством протокола mod-bus?

markyzz

Если возможно, то дайте хоть советы на первые шаги в эту сторону. А-то меня, как лоха-прогера, слегка пугают слова "работа с ком-портом" =)
Ну или ссылку на какую-нить страничку, где что-нить написано по первым шагам в эту сторону.
Заранее спасибо!

Dasar

Ос и язык какой?

markmsk

Я с ком-портом работал на VC++6.
Немного гиморно, но всё реально.

Werdna

в чем проблема? читаешь и пишешь в /dev/cuuaa иличего-то там, не помню

markyzz

винды,
а язык - более менее пофиг (borland delphi, builder c++, visual c++ )

markyzz

и как? =)

markyzz

что что, простите?
хде я?

Dasar

что-то типа:

HANDLE h = OpenFile("COM1", ...); //открываем com-порт
SetCommState(h, ...); //настраиваем скорость и параметры com-порта
SetCommTimeouts (h, ..);//настраиваем тайм-ауты
ReadFile(h, ...); //читаем из com-порта
WriteFile(h, ...); //пишем в com-порт
CloseFile(h);// закрываем com-порт

Dasar

А зачем тебе, вообще, это надо?
Вообще-то для работы с mod-bus-ом есть те же Opc-серверы, с которыми работать приятнее.

Lisiza

Только еще один notice: с COM-портом работать надо обязательно через асинхронные вызовы (Overlapped IO т.к. CommTimeouts при удачном стечении обстоятельств не срабатывают, и тред с ReadFile подвисает.
Я бы порекомендовал взять WFC и использовать CSerialFile, очень милый API под Win32/C++.

Dasar

> т.к. CommTimeouts при удачном стечении обстоятельств не срабатывают
это - миф

Lisiza

>> т.к. CommTimeouts при удачном стечении обстоятельств не срабатывают
> это - миф
Это не миф, это баги в реализации уж не знаю чего в системе. Проверено экспериментально, Windows 2000 Prof. При условии отключенного любого flow control (устройство на том конце иначе не умеет). Хочешь верь, хочешь не верь, дело твое.

Marinavo_0507

без flow control хуйово при любых обстоятельствах, разве нет?

Lisiza

если target устройство, с которым нужно общаться, его не умеет, то ничего тут не поделаешь.
Оставить комментарий
Имя или ник:
Комментарий: