COM-порт. Чтение/запись байта\слова\двайного слова

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

COM-порт. Чтение/запись байта\слова\двайного слова

Сообщение ~Виктор~ » 30.01.2007 (Вт) 13:44

Этот ворпрос уже поднималсо, но вразумительного ответа на канкретно заданный вапрос я извените так найти и не смог, посиму спрашиваю:

Необходимо прочитать(записать) байт(слово/двойное слово) с(в) COM1 порта.

Как это сделать?

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

Сообщение tyomitch » 30.01.2007 (Вт) 13:54

Comm Control
Изображение

~Виктор~
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 29.01.2007 (Пн) 15:53
Откуда: Албания

Сообщение ~Виктор~ » 30.01.2007 (Вт) 14:21

tyomitch

А как его подключить этот Comm Control?
Не смог найти его здаесь Project->References.
И далее как с ним работать?
Попадробней пожалусто

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 30.01.2007 (Вт) 14:32

это OCX

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

Сообщение GSerg » 30.01.2007 (Вт) 22:29

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

~Виктор~
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 29.01.2007 (Пн) 15:53
Откуда: Албания

Сообщение ~Виктор~ » 31.01.2007 (Ср) 8:23

GSerg да не гарячись ты попусту. этаж албанцкий :D
А ты лингвист штоль или за диржаву абидна?
Еще кот Лиапольт гаварил - ребзя давайте жить дружно!

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

Сообщение alibek » 31.01.2007 (Ср) 8:57

~Виктор~, строгое замечание. Рекомендую ознакомится с правилами форума.
Lasciate ogni speranza, voi ch'entrate.

~Виктор~
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 29.01.2007 (Пн) 15:53
Откуда: Албания

Сообщение ~Виктор~ » 19.02.2007 (Пн) 12:52

Писать в COM порт я понял нужно вот так:

MSComm1.Output = "AT"

а мне нужно послать в порт команду для устройства - 10h и FFh

как это сделать?
Ребзя, давайте жить дружно!

~Виктор~
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 29.01.2007 (Пн) 15:53
Откуда: Албания

Сообщение ~Виктор~ » 19.02.2007 (Пн) 13:03

Извините сам понял

qw = Chr(&H10)
MSComm1.Output = qw
qw = Chr(&HFF)
MSComm1.Output = qw
Ребзя, давайте жить дружно!

Cytron
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 266
Зарегистрирован: 15.02.2007 (Чт) 21:09

Сообщение Cytron » 19.02.2007 (Пн) 14:46

~Виктор~ писал(а):GSerg да не гарячись ты попусту. этаж албанцкий :D
А ты лингвист штоль или за диржаву абидна?
Еще кот Лиапольт гаварил - ребзя давайте жить дружно!

:lol: Ты бредишь?

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

Сообщение tyomitch » 19.02.2007 (Пн) 15:48

Cytron, устное замечание за флуд.
Изображение

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

Сообщение alibek » 20.02.2007 (Вт) 13:47

А зачем такие сложности? CommView проще.
Lasciate ogni speranza, voi ch'entrate.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 20.02.2007 (Вт) 14:12

Угу. А ещё, чтобы не таскать за собой кучу файлов, порт открываем через CreateFile и работаем стандартным API...

Кстати, никто не знает, можно ли без написания драйвера зарегистрировать в системе новый COM-порт и запросы к нему аппликухе передавать?
Изображение

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

Сообщение GSerg » 20.02.2007 (Вт) 14:14

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

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 20.02.2007 (Вт) 14:24

GSerg
Знаешь ведь, что можно :) . Другое дело, что придётся подменять параметры линкера и заменять obj-файл модуля с заглушками для этих функций на свой.
Изображение

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

Сообщение GSerg » 20.02.2007 (Вт) 14:30

Знаю ведь, что можно, и если будет предъявлено, скажу: и чё, насколько здесь больше геморроя, чем в предлагавшемся изначально случае?..

RamMerlabs писал(а):чаще пишу на masm, поэтому говорю чаще про него.

В таком случае надо повышать параметр адекватности и коэффициент корреляции с действительностью: это форум по VB, здесь задают вопросы по VB и здесь дают ответы по VB. То, что кто-то чаще пишет на чём-то другом, не имеет ни малейшего значения; а то, что ты этого не видишь, вновь возвращает нас к вопросу о самооценке, который на данный момент уже поднимал не только я...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение tyomitch » 20.02.2007 (Вт) 14:58

keks-n писал(а):Кстати, никто не знает, можно ли без написания драйвера зарегистрировать в системе новый COM-порт и запросы к нему аппликухе передавать?

Думаю, что да. Можно создать через DefineDosDevice ссылку на произвольный файл (например, трубу). Приду домой, попробую.
Изображение

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

Сообщение tyomitch » 20.02.2007 (Вт) 17:22

tyomitch писал(а):
keks-n писал(а):Кстати, никто не знает, можно ли без написания драйвера зарегистрировать в системе новый COM-порт и запросы к нему аппликухе передавать?

Думаю, что да. Можно создать через DefineDosDevice ссылку на произвольный файл (например, трубу). Приду домой, попробую.


Код: Выделить всё
Option Explicit

Private Declare Function DefineDosDevice Lib "kernel32" Alias "DefineDosDeviceA" (ByVal dwFlags As Long, ByVal lpDeviceName As String, ByVal lpTargetPath As String) As Long

Sub Main()
' subst своими руками: направим букву диска в каталог
DefineDosDevice 0, "S:", "C:\test"
Open "S:\blah" For Output As 1: Print #1, "blah": Close 1 ' создаст C:\test\blah
' таким же способом направим COM8 в файл
DefineDosDevice 0, "COM8", "S:\bleh"
Open "COM8" For Output As 1: Print #1, "bleh": Close 1 ' создаст C:\test\bleh
End Sub
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 20.02.2007 (Вт) 18:12

Значит его так можно и на именованный пайп натравить?
+Как сделать, чтобы он понимался как нормальный COM-порт(т. е., чтобы HyperTerminal тот же, предлагал через него ломиться, или во "Входящие подключения" на вкладке "Устройства" в он был рядом с модемами и LPT1)?
Изображение

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

Сообщение tyomitch » 20.02.2007 (Вт) 18:27

1. да
2. я знаю что ли, откуда он этот список берёт?
Изображение

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

Сообщение tyomitch » 21.02.2007 (Ср) 7:22

Код: Выделить всё
Option Explicit

Private Declare Function DefineDosDevice Lib "kernel32" Alias "DefineDosDeviceA" (ByVal dwFlags As Long, ByVal lpDeviceName As String, ByVal lpTargetPath As String) As Long

Sub Main()
' кстати: этим способом можно даже подключить пространство труб как отдельный диск =)
DefineDosDevice 0, "S:", "\\.\Pipe"
End Sub
Изображение

Cytron
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 266
Зарегистрирован: 15.02.2007 (Чт) 21:09

Сообщение Cytron » 21.02.2007 (Ср) 19:35

tyomitch писал(а):
Код: Выделить всё
Option Explicit

Private Declare Function DefineDosDevice Lib "kernel32" Alias "DefineDosDeviceA" (ByVal dwFlags As Long, ByVal lpDeviceName As String, ByVal lpTargetPath As String) As Long

Sub Main()
' кстати: этим способом можно даже подключить пространство труб как отдельный диск =)
DefineDosDevice 0, "S:", "\\.\Pipe"
End Sub

хм... Интересно :) А как его потом убрать, этот диск? :roll:

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

Сообщение tyomitch » 21.02.2007 (Ср) 20:06

Легче всего -- командой subst /d S: :-)
Изображение

Cytron
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 266
Зарегистрирован: 15.02.2007 (Чт) 21:09

Сообщение Cytron » 21.02.2007 (Ср) 20:09

а зачем тогда нужен этот subst своими руками когда в конце концов всё равно придется пользоваться обычным subst? :?

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

Сообщение tyomitch » 21.02.2007 (Ср) 20:26

Ну а не проще, чем меня спрашивать, открыть доку по DefineDosDevice и узнать, что означает её первый параметр? ;-)
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 21.02.2007 (Ср) 21:16

Похоже,что таким макаром можно виртуальный диск из user-mode забацать :lol:
Изображение

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

Сообщение tyomitch » 21.02.2007 (Ср) 21:32

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

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

Сообщение tyomitch » 25.02.2007 (Вс) 15:54

Вот тут ещё одну идею подали -- можно создать на NTFS-разделе симлинк на трубу. (Т.е. какая-нибудь прога будет думать, что пишет в файл в своей текущей папке, а на самом деле её вывод шёл бы в эту трубу.)
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 25.02.2007 (Вс) 17:06

Не всегда прокатит. Прога может пытаться менять позицию в файле, куда идёт запись.
Изображение


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

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

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

    TopList