0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 9
|
|
1 | |
.NET 2.x serial port19.10.2011, 16:42. Показов 5098. Ответов 19
Метки нет Все метки)
(
Здравствуйте.
Использую стандартные классы .net для работы с ком портом. Работу с портом прослушал программой Portmon. Вот кусочек прослушки: 22 12:52:53 ConsoleApplicat IOCTL_SERIAL_SET_LINE_CONTROL Serial0 SUCCESS StopBits: 1 Parity: NONE WordLength: 8 23 12:52:53 ConsoleApplicat IOCTL_SERIAL_SET_CHAR Serial0 SUCCESS EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13 24 12:52:53 ConsoleApplicat IOCTL_SERIAL_SET_HANDFLOW Serial0 SUCCESS Shake:8 Replace:80 XonLimit:1024 XoffLimit:1024 Возник вопрос как изменить в .net значения у IOCTL_SERIAL_SET_CHAR. Хочу изменить так IOCTL_SERIAL_SET_CHAR = EOF:1 ERR:40 BRK:40 EVT:0 XON:11 XOFF:13
0
|
|
19.10.2011, 16:42 | |
Ответы с готовыми решениями:
19
Serial port. Изменение значений Прием и передача строки Serial Port Serial Port, описание устройства,предоставленное шиной
|
![]() 17438 / 12830 / 3361
Регистрация: 17.09.2011
Сообщений: 21,108
|
|
19.10.2011, 17:09 | 2 |
Насколько мне известно, штатными средствами - никак.
Может быть можно сделать через WinAPI, но я в нем не силен. А можно поинтересоваться для чего нужно менять значения?
0
|
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 9
|
|
20.10.2011, 08:01 [ТС] | 3 |
пишу программу с ком портом . и смотрю тоже как успешно работает другая программа написанная на делфи. вот ищу разницу. так как исходника нету.
А может есть сторонняя свободная библиотека с богатыми пропрети на все настройки порта все такое не используя winapi.
0
|
![]() 17438 / 12830 / 3361
Регистрация: 17.09.2011
Сообщений: 21,108
|
|
20.10.2011, 22:42 | 4 |
b.dulat, вы знаете, я работал со множеством различных протоколов, реализуемыех через серийный порт и никогда не имел проблем с "несовпадением" приведенных вами значений.
Если реализовать конкретный протокол и проводить обработку полученных байт самостоятельно, проблем быть не должно со штатным SerialPort. Что касается сторонних библиотек - не интересовался, но вроде как видел что-то подобное пару раз. Погуглите .NET serial port library
1
|
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 9
|
|
21.10.2011, 16:16 [ТС] | 5 |
Сейчас делаю печать(термо принтер). работаю как говорил с ком портом.
Записываю команду на порт и жду ответа от принтера - LabelPrinted. Так вот ответ идет от принтера 250 мили сек. И за 1 сек печатаю всего 3 этикетки. А должно быть 10. А в той программе на делфи ответ приходит очень быстро. Вот не могу понять какая разница между ними. Почему ответ от принтера может идти долго?
0
|
![]() 17438 / 12830 / 3361
Регистрация: 17.09.2011
Сообщений: 21,108
|
|
21.10.2011, 21:01 | 6 |
b.dulat, именно ответ приходит долго или обработка команды занимает длительное время?
Не так давно реализовывал протокол VDCP, так там контроллер посылает запрос девайсу каждые 40 мсек, причем по спецификации девайс должен начать отправку ответа не позднее чем через 6 мсек после получения последнего байта команды. Использовал System.Net.Ports.SerialPort - никаких проблем не возникало. Остальные настройки порта совпадают с дельфийскими? Может стоит глянуть на реализацию получения команды - проблема может быть там.
0
|
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 9
|
|||||||||||
22.10.2011, 06:34 [ТС] | 7 | ||||||||||
kolorotur, скорее всего все таки ответ приходит долго, а не само распечатывание. Если не ждать ответа и отправлять, печать идет быстро.
Не совпадает настройки IOCTL_SERIAL_SET_CHAR, IOCTL_SERIAL_SET_TIMEOUTS. Реализация получения ответа такая: у класса ком порта есть ивент DataReceived. не него подписался. в методе выполняю ReadExisting(). дальше смотрю этот ли ответ. Вот что то вроде лога печати 3-х этикеток, фиксировал время: 1Begin-время начало печати 1 этикетки. Вход в цикл. DO Write() 1- время до команды записи в порт Write(string). Write() 1 время после команды записи в порт Write(string). DataReceived:- время когда пришло ответ Получили ответ :time1=0,2499968sec; - время после записи и до получения ответов:
0
|
![]() 17438 / 12830 / 3361
Регистрация: 17.09.2011
Сообщений: 21,108
|
|
22.10.2011, 11:41 | 8 |
b.dulat, а можно глянуть часть кода, где вы инициализируете порт?
0
|
Mobile Developer
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
|
|
22.10.2011, 16:06 | 9 |
С помощью API функции SetCommState с использованием структуры DCB которая и предоставляет возможность настройки IOCTL_SERIAL_SET_CHAR
0
|
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 9
|
||||||||||||||||
24.10.2011, 08:00 [ТС] | 10 | |||||||||||||||
вот:
0
|
86 / 86 / 6
Регистрация: 14.01.2011
Сообщений: 265
|
|
24.10.2011, 08:13 | 11 |
Можно все быстро и через WinApi реализовать! Исходники для программ передачи/приёма символов через com-порты
0
|
102 / 102 / 13
Регистрация: 22.10.2011
Сообщений: 328
|
|
24.10.2011, 08:13 | 12 |
b.dulat, я тож всегда юзал и юзаю стандартный класс и проблем не возникало. А можно взглянуть на спецификацию протокола?...
0
|
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 9
|
|
24.10.2011, 08:25 [ТС] | 13 |
0
|
102 / 102 / 13
Регистрация: 22.10.2011
Сообщений: 328
|
|
24.10.2011, 08:26 | 14 |
0
|
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 9
|
|
24.10.2011, 08:33 [ТС] | 15 |
если честно не знаю что такой протокол ком порта. подскажите какие бывают. и откуда взять? спасибо
0
|
102 / 102 / 13
Регистрация: 22.10.2011
Сообщений: 328
|
|
24.10.2011, 08:43 | 16 |
Протокол - понятие условное, под ним подразумеваются правила посылки/приемам данных и их последовательность. Но все всегда сводится к одному - 1/0 на пины 2 и 3
Под правилами посылки/приемам данных подразумевается договоренность, что, например,
И то и и другое - договоренность, заранее оговоренные "правила игры" - общения. Но(!), как я уже сказал, все всегда сводится к байтам, а они к 1/0 на пинах 2 и 3 RS-232 говоря простым языком "Правила приема/передачи данных" - этож целых ТРИ слова! Зачем "платить больше"(?!), если можно сказать - "протокол", а это ОДНО слово, а не ТРИ ![]()
1
|
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 9
|
|
24.10.2011, 08:58 [ТС] | 17 |
вложил programmers manual принтера. на странице 227 есть General Purpose Input Output (GPIO) Port Applications. Это именно то описание?
0
|
102 / 102 / 13
Регистрация: 22.10.2011
Сообщений: 328
|
|
24.10.2011, 09:08 | 18 |
Классная дока для принтера, тока много "воды".
Тебе надо прочитать для начала:
Весь протокол основывается на Байт 1 - команда Байт 2-N - параметры
0
|
0 / 0 / 0
Регистрация: 19.10.2011
Сообщений: 9
|
|
24.10.2011, 13:26 [ТС] | 19 |
через эти команды и формируется разметка. В принципе это все используется.
а что насчет того что принтер отвечает так долго? пробовал скорость у порта ставить 115000. все равно медленно
0
|
102 / 102 / 13
Регистрация: 22.10.2011
Сообщений: 328
|
|
24.10.2011, 13:45 | 20 |
А ты попробуй убрать все лишнее, оставь только NAK и посмотри на скорость. Если
1. открыть порт 2. послать туда 10 000 NAK-ов 3. закрыть порт будет проходить долго, то тогда действительно, стоит обратить взор в сторону класса SerialPort А если же быстро, то у тебя просто код так тормозит. Есть еще один момент: Порой девайс выдает много-много байт ответа. Кто-то собирает данные путем цикла с по-байтовым чтением и это долго. А кто-то читает массивами (например byte[1024]) и это намного быстрее.
0
|
24.10.2011, 13:45 | |
24.10.2011, 13:45 | |
Помогаю со студенческими работами здесь
20
Serial port. Можно ли определить подключено ли внешнее устройство? HDD serial number Реалтаймовое чтение из Serial порта
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |