Форум программистов, компьютерный форум, киберфорум
КИП, датчики
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/54: Рейтинг темы: голосов - 54, средняя оценка - 4.81
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24

Работа с монохроматором МХД-2 через COM-порт

06.09.2013, 13:13. Показов 12167. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане, подскажите пожалуйста как отправить команду монохроматору на c# если в инструкции по программированию устройства написано: Команды передаются в виде последовательности байт, заканчивающейся кодом <СR>. Каждый байт передаётся в виде двухсимвольного hex-кода. Первый байт последовательности – код команды, далее следуют параметры команды, последним передаётся контрольный байт длины посылки. Формат: 4С XX XX 03 <CR>. XXXX длина волны в Hex
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.09.2013, 13:13
Ответы с готовыми решениями:

Работа с клавиатурой через порт:
У меня появилась такая задача: Нужно при вводе с клавиатуры цифры заменить на звездочки, но при условии что командная строка будет видеть...

Работа с GPS приемником через com порт
Здравствуйте! Дали нам драйвер для приемника Pl-2303 (как я понял это не конкретно для приемника), так же дали библиотеку QtSerialPort....

digitalRead(), замена, работа через порт
добрый день - Atmego328P - на 3м порту (PD3/INT1) висит кнопка - порт сконфигурирован на вход, подтяжка установлена - дребезг...

46
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
11.09.2013, 13:25
Студворк — интернет-сервис помощи студентам
потому что согласно инструкции:"
TC, приложите протокол и инструкцию к монохроматору полностью в теме (кнопочка скрепочка в расширенном редакторе поста).
0
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
11.09.2013, 13:45  [ТС]
Кроме этого ничего нет.
Вложения
Тип файла: doc Управление монохроматором через RS-232.doc (33.0 Кб, 15 просмотров)
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
11.09.2013, 14:21
...название-то монохроматора есть? Он у вас по реальному физическому COM-порту или виртуальному COM-порту over USB? Если последнее, то в диспетчере оборудования под каким именем?

Что до полного ответа:
Ответ:
4C 8D 13 03 3A 30 34 20 41 30 20 30 46 20 39 37 20 31 35 0D 0A
в аски
3A - :
30 - 0 - байт состояния
34 - 4
20 - пробел
41 - А - мл.байт длины волны
30 - 0
20 - пробел
30 - 0 - ст.байт длины волны
46 - F
20 - пробел
39 - 9 - мл.байт номера шага
37 - 7
20 - пробел
31 - 1 - ст.байт номера шага
35 - 5
0D - CR
0A - LF
просто конвертируйте из аски всю строку после символа ':' Encoding.ASCII.GetBytes() и будет вам счастье.
1
Заблокирован
11.09.2013, 14:24
Цитата Сообщение от fed777dim Посмотреть сообщение
если перевести массив байт в stroka, то получится: ####:04 A0 0F 97 15
C#
1
2
3
4
5
6
7
8
9
10
IEnumerable<int> digits = 
    bufferin
    .AsEnumerable<Byte>()
    .SkipWhile<Byte>(elem => elem != 5A /*ASCII Код символа ':'*/ )
    .Skip<Byte>(1)
    .Select<Byte, int>(elem => (int)elem);
foreach (int elem in digits)
{
    Debug.Write(String.Format("{0, 4}", elem));
}
Вот как - то так

Добавлено через 9 минут
Цитата Сообщение от Dmitry_gdv Посмотреть сообщение
C#
1
.SkipWhile<Byte>(elem => elem != 5A /*ASCII Код символа ':'*/ )
Извиняюсь:

C#
1
.SkipWhile<Byte>(elem => elem != 0x5A /*ASCII Код символа ':'*/ )
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
11.09.2013, 14:31
0х3A = аски код ':'
0
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
11.09.2013, 14:47  [ТС]
монохроматор МХД-2, связь по реальному физическому COM-порту.
вот обработчик чтения:
C#
1
2
3
4
5
6
7
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (!comport.IsOpen) return;
int bytes = comport.BytesToRead;
byte[] bufferin = new byte[bytes];
comport.Read(bufferin, 0, bytes);
string stroka = Encoding.ASCII.GetString(bufferin, 0, bufferin.Length);
bufferin 4C 8D 13 03 3A 30 34 20 41 30 20 30 46 20 39 37 20 31 35 0D 0A
stroka L???:04 A0 0F 97 15

Но когда я обращаюсь к элементам stroka,
char l = stroka[0];
то он мне возвращает:L, A
так как монохроматор отправляет по 8 бит

Как три посылки по 8 бит соединить в один буфер?
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
11.09.2013, 14:51
...это в настройках порта битность 8. Вы вот это "4C 8D 13 03 3A 30 34 20 41 30 20 30 46 20 39 37 20 31 35 0D 0A" откуда взяли? Прямо из bufferin. Не заметил у вас накопления данных. Приведите логи со сниффера в режиме HEX отображения данных, это сразу покажет что на самом деле шлется и принимается. Portmon, к примеру. Логи в текстовом файле к посту.
1
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
11.09.2013, 15:05  [ТС]
скачал Portmon, записал log, вот что получилось
Вложения
Тип файла: log Portmon.log (6.5 Кб, 7 просмотров)
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
11.09.2013, 15:10
...в HEX пожалуйста, там кнопочка такая есть.
0
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
11.09.2013, 15:17  [ТС]
вот в hex
Вложения
Тип файла: log Portmon1.log (7.1 Кб, 8 просмотров)
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
11.09.2013, 15:20
Итак, послали в порт пакет:
IRP_MJ_WRITE Nmserial0 Length 5: 4C 8D 13 03 0D
Пришел ответ из двух пакетов длиной 8 и 13 байт:
IRP_MJ_READ Length 8: 4C 8D 13 03 3A 30 34 20
IRP_MJ_READ Length 13: 41 30 20 30 46 20 39 37 20 31 35 0D 0A
Также хотелось бы увидеть реакцию монохроматора на запрос вида: 52 01 0D.

==============
Вам после посылки запроса нужно установить счетчик и завести глобальный буфер (тот же массив). По приему данных - первый пакет занести в буфер, по приему следующего пакета соединить его по +. Дальше работать со склеенным пакетом.
1
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
11.09.2013, 15:25  [ТС]
реакця монохроматора на запрос вида: 52 01 0D (Чтение текущего состояния)
Вложения
Тип файла: log 5201.log (6.3 Кб, 5 просмотров)
0
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
11.09.2013, 15:28  [ТС]
я в программировании новичок, не совсем понимаю как установить счетчик (чего счетчик?) и как объявить глобальный буфер...
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
11.09.2013, 16:21
...просто глобальная переменная, вне event-a чтения данных. Пришел пакет, инкрементировали переменную, занесли пакет в другую переменную, пришел второй пакет - берем предыдущий пакет и соединяем с текущим, что то вроде old+=new.

Впрочем, можно и по другому: анализируем приходящие пакеты на предмет наличия нулевого байта с командой. Скажем if buf[0] == 0x52 (или что там у вас, 0х4с), если да, тогда начинаем анализ принятого пакета с 5-го байта:
30 - 0 - байт состояния
34 - 4
20 - пробел

далее устанавливаем флаг, по которому считаем, что пришел второй кусок данных в 13 байт.

===========
в последнем логе не увидел запроса вида:
IRP_MJ_WRITE Nmserial0 Length 3: 52 01 0D
соответственно и ответа нет.

Еще раз снимите.

Добавлено через 47 минут
...так что там с логом на запрос:
IRP_MJ_WRITE Nmserial0 Length 3: 52 01 0D
1
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
11.09.2013, 16:58  [ТС]
к сожалению с монохроматором смогу работать только завтра.рабочий день кончился...
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
11.09.2013, 17:18
...у инженера рабочий день ненормирован по должностной. Хорошо вам
1
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
12.09.2013, 09:28  [ТС]
вот запрос 5201
Вложения
Тип файла: log 5201-1.log (7.1 Кб, 4 просмотров)
1
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
12.09.2013, 10:38
о-как, 16-ти байтный ответ:
IRP_MJ_READ Nmserial0 Length 16: 52 01 3A 30 34 20 41 30 20 30 46 20 39 37 20 31
только вот по табличке 5.2 не все данные: присутствуют байты состояния 30 34, мл. 41 30 и ст. 30 46 байты длины волны, мл.байты номера шага 39 37, а старший обрезан и без символов cr lf на конце. Давайте-ка наберем статистику побольше. Побольше запросов 52 01 0D нащелкайте и запросов установки длины волны тоже побольше.
1
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
12.09.2013, 14:45  [ТС]
raxp, спасибо большое. Все получилось.
Цитата Сообщение от raxp Посмотреть сообщение
...просто глобальная переменная, вне event-a чтения данных. Пришел пакет, инкрементировали переменную, занесли пакет в другую переменную, пришел второй пакет - берем предыдущий пакет и соединяем с текущим, что то вроде old+=new.
текущая длина волны отображается на форме, все в реальном времени.
вот только монохроматор почему то не мотает...
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
12.09.2013, 16:05
...жду большей статистики по запросам и ответам.

Не мотает возможно по причинам:
1- вы посылаете одну и ту же команду (по первому логу и первым постам), по битам состояния у меня выходит что он стоит в крайнем уже положении
2- описание протокола не полностью соответствует модификации прибора (по общим данным там еще и управление по UDP по эзернтету могет, описание это нашел, а на обмен по RS-232 нет, только ваше)
3- к примеру, неверно выставлены таймауты (мне до сих пор непонятно, почему в ваших логах потери пакетов и их раздвоение, может у вас ОС загружена еще чем то сторонним?), проверьте независимым терминалом поотправлять пакеты, тем же от aggsoft или comport toolkit, при этом не забывайте все это отснифферить и приложить на форум для анализа
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.09.2013, 16:05
Помогаю со студенческими работами здесь

Работа с GPS приемником через Com порт
Подскажите пожалуйста что не правильно я делаю? Программа считывает данные из GPS приемника через Com порт и по таймеру записывает в xml...

Работа через 443 порт (SSL)
собственно вопрос по поводу работы через 443 порт. у меня есть код, который отлично отрабатывает по 80(5000h) порту сегодня коснулся темы...

Работа java-аплета через 433 порт
У меня сайт работает только по https (443 порт), работает отлично, кроме java аплетов они не подгружаются. Но если открыть еще и 80 порт,...

Работа с несколькими устройствами через серийный порт
Здравствуйте. Создаю экземпляры классов серийного порта,сначала пробовал SerialSoftware, потом AltSoftSerial (с ним не удается связаться...

Работа с устройством ELM327 через СОМ-порт используя BComPort Брусникина И.В
Здравствуйте. Пишу для себя программу для чтения информации с электронного блока управления двигателем. Использую адаптер семейства...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru