MSComm.CommPort не принимает значения > 16. Что делать?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

MSComm.CommPort не принимает значения > 16. Что делать?

Сообщение Костя » 29.03.2005 (Вт) 9:39

Существуют 40 удалённых датчиков, работающих с RS232. Под UDP, и уж, тем более, TCP/IP их настроить невозможно. Поэтому для связи через Ethernet приходится создавать на компе виртуальные COM-порты, и работать с ними. Однако максимальное значение, которое можно присвоить MSComm.CommPort = 16, т.е. больше, чем с 16-ю датчиками работать невозможно. Пытался отредактировать MSComm32 через PE Explorer - ничего не получается (не видно ничего, что отвечало бы за максимальное значение .CommPort). Что делать?
Всё бывает!

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 29.03.2005 (Вт) 9:52

Глупо, но может две машины.
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 29.03.2005 (Вт) 11:16

Тогда уж три придётся ставить! :) И на третьей плюс ещё писать прогу для обработки данных, поступающих с первых двух...
Всё бывает!

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 29.03.2005 (Вт) 11:56

у меня была такая же проблема только с модемами. как оказалось два модема одновременно не берут трубу. я свой серверок повесил не нескольких машинах, а работают они с одной базой данных. в твоем случае можно написать еще софтину, которая будет обрабатывать данные, а те что на портах только читать.

может быть так. :?
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 29.03.2005 (Вт) 12:28

Но всё же хотелось бы применить менее капиталоёмкое решение... :?
Всё бывает!

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Re: MSComm.CommPort не принимает значения > 16. Что делат

Сообщение codemaster » 29.03.2005 (Вт) 12:47

Костя писал(а):Существуют 40 удалённых датчиков, работающих с RS232. Под UDP, и уж, тем более, TCP/IP их настроить невозможно. ?


Как выглядит физически подключение датчика к RS232 ?
//<-
Mit freundlichen Grüßen
//->

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 29.03.2005 (Вт) 13:08

Датчик подключён к терминалу через последовательный порт, а терминал подключён к Eithernet'у. Фактически через eithernet передаются данные в формате RS232.
Всё бывает!

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 29.03.2005 (Вт) 13:19

Костя писал(а):Датчик подключён к терминалу через последовательный порт, а терминал подключён к Eithernet'у. Фактически через eithernet передаются данные в формате RS232.


т.е. один датчик - один терминал?
//<-
Mit freundlichen Grüßen
//->

Inferno
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 26.01.2005 (Ср) 1:06

Сообщение Inferno » 29.03.2005 (Вт) 19:25

Если вы уж сотворили датчики, то можно было бы задуматся и о мультиплексорах.
Самый простой вариант перекинуть датчики на LPT порт. А еще лучше совместить мультиплексоры с LPT, тогда появится такое пространство что у вас датчиков не хватит :)))

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 30.03.2005 (Ср) 4:49

Тут дело не в мультиплексорах, и не в том, сколько датчиков на один терминал. Просто проводится циклический опрос каждого датчика по отдельности, по другому - никак.
Всё бывает!

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 30.03.2005 (Ср) 10:51

Костя писал(а):Просто проводится циклический опрос каждого датчика по отдельности, по другому - никак.


Как раз через мультиплексор это можно и решить.
(кстати какова скорость rs232 ?)

Еще как вариант есть чипы PIC и пр. при помощи их запросто можно реализовать контроллеры для ваших датчиков.
//<-
Mit freundlichen Grüßen
//->

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 30.03.2005 (Ср) 12:10

Там система такая, что каждому терминалу даётся свой айпишник, потом виртуальный com-порт привязывается к этому адресу, и ведётся циклический опрос виртуальных портов. Терминал (не поддерживающий винду) запрограммирован на ответ по входящему запросу. Конечно, можно реализовать всё через контроллеры и т.д., но это - долго и дорого, потому как система уже реализована и практически работает. Если уж на то пошло, проще терминалы перепрограммировать, да и вообще это всё не в моей компетенции. Поэтому хотелось бы с MSComm32 разобраться, чтобы не надо было перепрограммировать терминалы на поддержку UDP. Хотя, канеш, и так приспособиться можно, но всё-таки...
Всё бывает!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.03.2005 (Ср) 12:33

Может перевести все на чистое API?
Тогда будешь ограничен 255 портами.
Lasciate ogni speranza, voi ch'entrate.

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 30.03.2005 (Ср) 13:25

У меня API Quide нет :cry: ...
Всё бывает!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.03.2005 (Ср) 13:43

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 01.04.2005 (Пт) 8:47

Спасибо. Нашёл функции ReadComm и WriteComm, находящиеся в user.dll, но в user32.dll их уже нет. Ни у кого user.dll не завалялся?
Всё бывает!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.04.2005 (Пт) 19:22

Костя писал(а):Спасибо. Нашёл функции ReadComm и WriteComm, находящиеся в user.dll, но в user32.dll их уже нет. Ни у кого user.dll не завалялся?

user.dll никогда не было в природе. Был user.exe, но давно (и ты всё равно не сможешь из VB6 работать с 16-битными библиотеками)
Поищи эти функции в kernel32.dll :-)
Изображение

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 07.04.2005 (Чт) 12:01

В kernell32 этих функций нет. В итоге я решил всё делать через OpenFile. Однако при

com = CreateFile("COM6", GENERIC_read, 0, ByVal 0&, OPEN_EXISTING, 0, ByVal 0&)

com возвращает -1. Никто не знает почему?
Всё бывает!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 194

    TopList