![]() |
Работа с com-портом
Помогите написать программу работы с com-портом на Visual С++.
Надо связать два компа и научить их общаться посредством порта. Проблема состоит в приеме данных. |
тут без тредов не обойтись. иначе если чтение зациклить, то программа глючить будет.
поищи на http://www.delphikingdom.ru/, там хоть и дельфа, но функции winAPI используются |
Смотри здесь:
http://sources.ru/cpp/cpp_com_port.shtml |
http://msdn.microsoft.com/library/de...sdn_serial.asp
Лучшее об'яснение по работе с серийными портами в Вин32. Рабочий код внутри (аппликация MTTTY ). Для нормальной работы таки нужны треды и Overlapped I/O. |
Цитата:
|
Цитата:
http://www.delphikingdom.ru/asp/view...723&mode=print |
ничего сложного!
просто открой для записи файл с именем "СОМ1" с помощью ф-ции CreateFile и пиши туда байты... а чтение я непробовал - но вероятно просто опять же открыть файл с именем "СОМ1" для чтения... |
Не все так просто...
Записать данные в порт и передать их дальше я могу. А вот как прочесть их на другом компе? :idontnow: |
Гхы.. запускаешь прогу на другом компе и читаешь из порта. Можно спаять кабелек и слать с одного порта на другой. Все как rkorchagin сказал.
Треды - типа параллельных процессов в Винде. Если не запараллелить чтение,запись и интерфейс - то одно будет тормозить другое, и прога будет глючить. Не забудь определить буффера обмена побольше - особенно на высоких скоростях- ставь 10-50 мег. |
Цитата:
|
Ну блин ваще :(
Вот интересно, те, кто дает советы тут, хоть раз что-нибудь работающее и законченное делал с этим самым комом?
1 Лучше пользоваться компонентами специально сделанными. 1.1 Берите mscomm, которы родной микросовтовский активикс. С другими бывают некоторые непонятки и глюки (по крайней мере с теми с котрыми я пробовал). 2 Треды использовать желательно, но не обязательно, если правильно сделать (проверять есть ли в буфере столько, сколько собрались читать), то все работает замечательно и без тредов!!! 3 По поводу чтения из порта на другом компе... Я не знаю, ты из вообще перд этим кабелем соеденил? Точно соеденил? А кабель у тебя нуль-модемный??? (Кабель от модема не подойдет, т.к. о модемный). Если не знаешь, чем отличаются, см. в сети. Ифы навалом. Если у тебя кабель правельный, то читаешь, так же как и пишешь, только наоборот. Рас разобрался как писать, то читать, также, только вместо "Write", пишешь "Read". Это все описано даже в хелпе. ЗЫЖ Я писал на делфи, но разници в принципе все равно нет. |
Цитата:
Но если говорить про компоненты то советую обратить внимание на Greenleaf CommX - http://www.microway.com.au/catalog/list_comm.htm Покруче чем mscomm, но к сожалению не бесплатен. |
На API слишком геморройно. Смысла особого нет. Я первый раз делал прогу для работы с желзкой исключительно на API (просто не знал, и лень было искать что есть mscomm).
Я не утверждаю, что mscomm вер совершенства. Просто он простой и ПРАВИЛЬНО работающий. Я когда пробовал разные компаненты, заработал как положено только он. Работать надо было не с модемом (с ним все работали хорошо), а опять же с контроллером. Кстати, никаких потоков не пользовал. MsComm тоже не совсем бесплатен... но это все лечится, а если лечить по каким-то соображениям нельзя, то для рантайм он бесплатен. |
Вариации для VBA
Граждане, помогите, подскажите
Нужно сделать прожку (предположительно на ВБА, которая должна записывать/считывать инфу через сом-порт. Опыт програмирования у меня не большой, но программа простенькая и как заставить ее работать я приблизительно представляю. Проблема в том, что в документации по ВБА я не нашел способа обращения к ком-порту, т.е. я прочитал, что COM1, COM2, LPT и пр. это зарезервированные имена, но вот как к ним обращаться я понятия не имею. Подскажите как это сделать в ВБА или подскажите альтернативный способ решения проблемы (считанные с устройства данные мне бы хотелось получать в Эксель) Заранее спасибо |
на VBA это вряд ли получится. на VB можно
|
Я как то делал на VBA, в Exel считывал данные с микрометра, который был подключен через Com порт. Использовал IO ActiveX Communications module фирмы JSPayne (_http://www.jspayne.com/io/home.html), там все просто получаеться. Единственная проблема оно денег стоит. Хотя я тогда нашел где-то лекарство.
|
проще ( IMHO ) самому наваять нужную функциональность ( на том же шарпе ) и вызвать этот модуль в екселе
|
Цитата:
Как наваять? в каком шарпе? Цитата:
|
написать на C#, можно и на любом другом нормальном языке программирования ( хоть на том же visual basic' е )
|
Цитата:
|
|
metrim
Модуль работы с COM портом Как раз для VBA должно быть _http://msa.polarcom.ru/st/d_1000338.htm |
metrim
нельзя. потому как VBA -- не полноценный язык программирования ( и работает через прослойку виртуальной машины ). МС просто не считает что такая функциональность нужна в ворде/екселе/... к тому же они дали возможность подключать внешние модули, написанные на нормальных языках. а что еще нужно? |
dyr_farot
Напрямую средствами VBA может порт как файл и нельзя открыть, но всё-таки VBA довольно мощный язык. Можно вызывать API-функции и использовать AxtiveX компоненты, а этого более чем достаточно для того, чтобы написать что-то своё, не отвлекаясь на использование "нормальных" языков. См. например ссылку в моём предыдущем посте http://www.imho.ws/showthread.php?p=1113694#post1113694 |
так и я о том же -- все, что нужно для офиса пишемна ВБА, если нужно что-то большее -- подключаем модули, написанные на языке на уровень пониже
|
| Часовой пояс GMT +4, время: 12:40. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.