OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 18 Ноябрь, 2019 12:50

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 40 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: COM-порт
СообщениеДобавлено: Четверг, 13 Ноябрь, 2008 21:00 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2316
Откуда: Россия, Томск
Илья Ермаков писал(а):
А USB ведь логически в Виндах как разновидность COM завиртуален? Можно так же работать? И шнуры небось спаять можно?
Вот это да!

Тут два вопроса: 1) можно ли к USB подключить устройство, которое будет видеться в системе как COM-порт; 2) можно ли к COM-порту подключить устройство, которое станет работать как USB. Первое решается покупкой переходника USB2COM (и, часто, установкой прилагающихся драйверов), второе не решается в принципе. Если посмотреть внутрь того же USB2COM, то там мы увидим чип, который при подаче питания по определённому протоколу представляется системе: "Привет, я - COM-порт!" В COM ничего подобного не предусмотрено, там и спрашивать никто ничего не будет: подключили - и на здоровье, делайте дальше сами что хотите.

Не даром ведь при подключении мышки или флэшки система сама узнаёт, что именно за устройство подключено. На даром и фотоаппарат может флэшкой прикинуться. Там целый протокол и классификация устройств, толстая книжка про USB есть.

Лучше скажите, Илья, заработал ли пример? Удалось ли что-то сделать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: COM-порт
СообщениеДобавлено: Четверг, 13 Ноябрь, 2008 21:05 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2316
Откуда: Россия, Томск
Axcel писал(а):
Называются почему-то "нульмодемным" кабелем.
"Нульмодемным" называется по числу необходимых модемов. При работе с более длинными кабелями цифровой сигнал затухает из-за сопротивления проводника. Использование модема позволяет увеличить дальность передачи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: COM-порт
СообщениеДобавлено: Четверг, 13 Ноябрь, 2008 21:08 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2316
Откуда: Россия, Томск
Илья Ермаков писал(а):
А USB ведь логически в Виндах как разновидность COM завиртуален? Можно так же работать? И шнуры небось спаять можно?
В USB одно устройство всегда ведущее, а второе ведомое (master/slave). В принципе, можно и два компа соединить, но кто-то на нижнем уровне всё равно должен будет представляться, так что всё равно через USB2COM проще - там для этого уже специальный чип, и всё работает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: COM-порт
СообщениеДобавлено: Четверг, 13 Ноябрь, 2008 21:45 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9155
Откуда: Россия, Орёл
Про модули - пока ещё не пробовал, некогда. Попробую на днях.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: COM-порт
СообщениеДобавлено: Четверг, 13 Ноябрь, 2008 22:35 
Аватара пользователя

Зарегистрирован: Суббота, 15 Март, 2008 20:00
Сообщения: 297
Откуда: Київ, Україна
Илья Ермаков писал(а):
А USB ведь логически в Виндах как разновидность COM завиртуален? Можно так же работать? И шнуры небось спаять можно?

Что то я вопроса непонял :(

Александр Ильин писал(а):
В USB одно устройство всегда ведущее, а второе ведомое (master/slave).

Ну не всегда, есть же USB OTG.

Александр Ильин писал(а):
В принципе, можно и два компа соединить, но кто-то на нижнем уровне всё равно должен будет представляться, так что всё равно через USB2COM проще - там для этого уже специальный чип, и всё работает.


Все равно не понимаю, про что идет речь. Держал в руках(и не только) один USB-USB шнурок для связи компов, реализация довольно сложная. Я не понимаю, зачем компы через USB соеденять? Или я что то упустил?.

Немного про USB2COM (самые дешевые решения):
СP2101 или подобный
FT232R или младьше(в младьших версиях обвязки больше)

Дешево и сердито ATMEGA8 (не помню с ATTINY получится или нет...)

Ну еще много кристалов есть, но это самые просты решения на счет цены и сложности распайки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: COM-порт
СообщениеДобавлено: Четверг, 13 Ноябрь, 2008 23:07 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1437
Та ваще, не стоит оно того!
Или COM, или USB!
На новом ноуте у меня тока три usb разъёма + чего-то ещё (не COM) + что-то радиочастотное ( но я его в биосе вырубил нафик)...
И (ещё раз) - ваще! Ждём июня 2009 с презентацией стандарта USB 3.0 !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: COM-порт
СообщениеДобавлено: Пятница, 14 Ноябрь, 2008 06:32 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1026
А у наладонников кредл какой порт использует?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: COM-порт
СообщениеДобавлено: Пятница, 14 Ноябрь, 2008 11:26 
Аватара пользователя

Зарегистрирован: Суббота, 15 Март, 2008 20:00
Сообщения: 297
Откуда: Київ, Україна
GUEST писал(а):
А у наладонников кредл какой порт использует?

USB-PORT (как slave)

Даже если есть в PocketPC USB-Host, у него еще и есть USB-PORT
есть расспайки кредлов и шнурков и там все можно детально глянуть.

Вообще то USB - придумали не "технари", а "менеджеры". Поэтому он такой сложный и запутаный получился :lol:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: COM-порт
СообщениеДобавлено: Пятница, 14 Ноябрь, 2008 20:08 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1437
bohdant писал(а):
Вообще то USB - придумали не "технари", а "менеджеры". Поэтому он такой сложный и запутаный получился :lol:

Даже более определённо - менеджеры от всем известной корпорации... :twisted:
Когда шла работа на выяснение наиболее перспективного задела по поводу связного универсального интерфейса, то была проделана титаническая (без шуток) работа менеджеров по реализации ещё сырого и не отработанного продукта( то, что потом стало USB1.0)... Но работа не с инженерами, а с аналогичными менеджерами в софтовых и железячных фирмах... "Пусть плохо, но - много!"
В результате, мы опять получили не чистый продукт с перспективой развития логичной базы с удобной надстройкой, а кусочное решение. Но! Зато с мощной поддержкой производителей...

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

"Схватить, что хоть немного дышит и лучше, чем у остальных, внедрить, приучить всех к этому, а потом - хоть трава не расти!" (тока - капуста! :twisted: :twisted: :twisted: )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: COM-порт
СообщениеДобавлено: Пятница, 17 Декабрь, 2010 14:26 

Зарегистрирован: Среда, 24 Декабрь, 2008 07:11
Сообщения: 13
Такой вопрос по COM порту. Нужно неблокирующая работа с ним. То есть один модуль читает другой пишет. Пусть они запущены под разными экземплярами BB. (тяжелая многопоточность). Каким образом можно наладить связь между этими модулями (какие средства в BB есть для этого).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: COM-порт
СообщениеДобавлено: Пятница, 17 Декабрь, 2010 14:29 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9155
Откуда: Россия, Орёл
Ну, например, возьмите стандартную подсистему Comm (см. документацию). И соедините по TCP на localhost.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: COM-порт
СообщениеДобавлено: Пятница, 17 Декабрь, 2010 14:34 

Зарегистрирован: Среда, 24 Декабрь, 2008 07:11
Сообщения: 13
В принципе можно и так сделать (программа для теста железа предназначена), я хотел узнать нет ли еще других способов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: COM-порт
СообщениеДобавлено: Пятница, 17 Декабрь, 2010 14:41 

Зарегистрирован: Среда, 24 Декабрь, 2008 07:11
Сообщения: 13
И еще вопрос вдогонку. Если один модуль откроет порт для чтения сможет ли другой открыть для записи не возникнет ли блокировки порта?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Май, 2015 06:53 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2430
Возможно будет полезен кому-нибудь пример получения доступных в системе COM-портов.

Код:
MODULE CommList;

   IMPORT SYSTEM, WinApi, Log;
   
   PROCEDURE Ports*;
   VAR
      bytesNeeded, returned, i: INTEGER;
      buffer: POINTER TO ARRAY OF SHORTCHAR;
      pInfo: WinApi.PORT_INFO_1;
   BEGIN
      IF (WinApi.EnumPorts(NIL, 1, NIL, 0, bytesNeeded, returned) = 0) &
         (WinApi.GetLastError() = WinApi.ERROR_INSUFFICIENT_BUFFER) THEN
         NEW(buffer, bytesNeeded);
         IF WinApi.EnumPorts(NIL, 1, buffer[0], bytesNeeded, bytesNeeded, returned) = 1 THEN
            FOR i:=0 TO returned - 1 DO
               pInfo := SYSTEM.VAL(WinApi.PORT_INFO_1, buffer[i * SIZE(WinApi.PORT_INFO_1)]);
               IF (pInfo.pName[0] = "C") & (pInfo.pName[1] = "O") & (pInfo.pName[2] = "M") THEN
                  Log.String(pInfo.pName$); Log.Ln
               END
            END
         END
      END
   END Ports;
   
END CommList.

^Q CommList.Ports


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Май, 2015 07:51 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 451
Откуда: Егорьевск
BlackBox-1.6 писал(а):
command error: code file for WINSPOOL.dll not found

Я пользуюсь таким способом.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Май, 2015 21:07 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2430
Alexander Shiryaev писал(а):
BlackBox-1.6 писал(а):
command error: code file for WINSPOOL.dll not found


В сборке центра и Цинна уже обновлен WinApi, должен быть не WINSPOOL.dll, а WINSPOOL.drv.
Код:
   PROCEDURE EnumPorts* ["WINSPOOL.drv", "EnumPortsA"] (pName: PtrSTR; Level: INTEGER; VAR [nil] pPorts: SHORTCHAR; cbBuf: INTEGER; VAR [nil] pcbNeeded: INTEGER; VAR [nil] pcReturned: INTEGER): BOOL;
   (*END EnumPorts;*)


Alexander Shiryaev писал(а):
Я пользуюсь таким способом.

У меня в Wine не показывает в реестре порты для USB2COM плат :(


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 31 Май, 2015 23:14 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 451
Откуда: Егорьевск
http://stackoverflow.com/questions/1388871/how-do-i-get-a-list-of-available-serial-ports-in-win32


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 01 Июнь, 2015 05:33 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2430
Alexander Shiryaev писал(а):

Буду пробовать твой метод и другие, оказалось, что EnumPorts в Wine всегда показывается четыре порта, даже если их нет, или есть больше.
Сейчас перебираю порты по очереди, как советуют в первом методе, но хотел как-то это оптимизировать. Думал, что EnumPorts — хорошее решение, но нет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 02 Июнь, 2015 06:23 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2430
Получается, что самый надежный метод, это попытка подключения к портам. Он работает в Wine. Есть недостаток в том, что если на отладочной плате, например, стоит джампер ISP-RESET, то при сканировании порта микроконтроллер перезагружается.

А для Windows действительно, быстрее сканировать реестр. Вот такой код для сборки центра работает корректно:
Код:
PROCEDURE  Ports*;
   VAR res, size,  i:  INTEGER;
      sw: WinApi.HANDLE;
      dwType: INTEGER;
      str, keyName: ARRAY 64 OF SHORTCHAR;
      port: ARRAY 8 OF CHAR;
      con : CommV24.Connection;
   BEGIN
      IF Dialog.IsWine() THEN
         FOR i := 0 TO 255 DO
            Strings.IntToString(i, port);
            CommV24.Open('COM' + port, 9600, {}, con);
            IF con # NIL THEN
               CommV24.Close(con);
               Log.String('COM' + port); Log.Ln
            END
         END
      ELSIF Dialog.IsWindows() THEN
         res := WinApi.RegOpenKeyW(WinApi.HKEY_LOCAL_MACHINE, "hardware\devicemap\serialcomm", sw);
         IF res = WinApi.ERROR_SUCCESS THEN
            i := 0;
            size := LEN(str);
            WHILE res # WinApi.ERROR_NO_MORE_ITEMS DO
               size := LEN(str);
               res := WinApi.RegEnumValueA(sw, i, keyName, size, NIL, NIL, 0, NIL);
               IF res = WinApi.ERROR_SUCCESS  THEN
                  size := LEN(str);
                  res := WinApi.RegQueryValueEx(sw, keyName,  NIL, dwType, SYSTEM.ADR(str), size);
                  IF res = WinApi.ERROR_SUCCESS  THEN
                     Log.String(keyName$ + " " + str$); Log.Ln;
                  END
               END;
               INC(i)
            END;
            res := WinApi.RegCloseKey(sw)
         END
      END
   END Ports;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 13 Август, 2015 18:46 
Аватара пользователя

Зарегистрирован: Воскресенье, 12 Апрель, 2015 18:12
Сообщения: 1133
Откуда: СССР v2.0 rc 1
Пока в ББ СОМ не читал, но под python это делается легко и под Win, и под wine, и под Lin) Понятно, придётся потаскать за собой 30 метров питона. Впрочем, под Lin -- с вероятностью 99% питон уже будет стоять)
Кстати, под wine ББ может читать данные из СОМ-порта методом z:/dev/com0. Если память не изменяет))) Под родной вендой ББ так сделать не может)))))))


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 40 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB