1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
|
|
1 | |
Работа с монохроматором МХД-2 через COM-порт06.09.2013, 13:13. Показов 10120. Ответов 46
Метки нет (Все метки)
Уважаемые форумчане, подскажите пожалуйста как отправить команду монохроматору на c# если в инструкции по программированию устройства написано: Команды передаются в виде последовательности байт, заканчивающейся кодом <СR>. Каждый байт передаётся в виде двухсимвольного hex-кода. Первый байт последовательности – код команды, далее следуют параметры команды, последним передаётся контрольный байт длины посылки. Формат: 4С XX XX 03 <CR>. XXXX длина волны в Hex
0
|
06.09.2013, 13:13 | |
Ответы с готовыми решениями:
46
Работа с клавиатурой через порт: Работа с GPS приемником через com порт digitalRead(), замена, работа через порт Работа с GPS приемником через Com порт Работа через 443 порт (SSL) |
64 / 63 / 7
Регистрация: 19.03.2013
Сообщений: 207
|
||||||
06.09.2013, 15:31 | 2 | |||||
как-то так:
1
|
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
|
|
09.09.2013, 12:44 [ТС] | 3 |
Спасибо большое за ответ, Rust511, но почему то все равно не работает
Когда я писал в с++ монохроматор реагировал на следующее: if (!ComPort1->Connected) return; AnsiString str; str="4C"+"8D" + "13"+"03"+"\r"; ComPort1->Write(str.c_str(),str.Length()+1); где 8D13 это длина волны 5005 в hex.
0
|
64 / 63 / 7
Регистрация: 19.03.2013
Сообщений: 207
|
||||||
09.09.2013, 13:30 | 4 | |||||
а ты не можешь вместо монохроматора подключить какой-нибудь ком-порт и его к USB? и с помощью программы геркулес смотреть что приходит, очень удобно
Добавлено через 8 минут посмотрел внимательно, я же не понял что <CR> это Carriage Return, я же думал, что это метка конца строки=) попробуй тогда так:
вместо buffer[4] = (byte)'\r' можно еще написать: buffer[4] = 0x0D;
0
|
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
|
|
09.09.2013, 13:53 [ТС] | 5 |
я подключил один com порт к другому и посмотрел что сообщение доходит, но почему монохроматор молчит?
0
|
64 / 63 / 7
Регистрация: 19.03.2013
Сообщений: 207
|
|
09.09.2013, 14:01 | 6 |
я так понимаю в ComPort1->Write(str.c_str(),str.Length()+1), str.Length()+1 - это количество символов, которое необходимо записать? может также попробовать serialPort1.Write(buffer, 0, buffer.Length + 1)? не уверен правда, что поможет, но все же.
0
|
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
|
|
09.09.2013, 14:03 [ТС] | 7 |
Вот как я написал, вроде так надо, но монохроматор не реагирует
byte[] buffer = new byte[5]; buffer[0] = (byte)(0x4C); buffer[1] = (byte)(0x13); buffer[2] = (byte)(0x8D); buffer[3] = (byte)(0x03); buffer[4] = (byte)(0x0D); comport.Write(buffer, 0, buffer.Length); buffer[1] = (byte)(0x13); buffer[2] = (byte)(0x8D); потому что согласно инструкции:" 2. Команды передаются в виде последовательности байт, заканчивающейся кодом <СR>. Каждый байт передаётся в виде двухсимвольного hex-кода. Первый байт последовательности – код команды, далее следуют параметры команды, последним передаётся контрольный байт длины посылки. Длина волны передаётся в единицах по 0.1 нм. X – символ из диапазона 0-9 или A-F." 4С XX XX 03 <CR> первые символы XX - Младший байт длины волны, вторые символы XX - Старший байт длины волны т.е. я пытаюсь отправить монохроматору длину волны 500,5 (5005 если в единицах 0,1 нм) 138D. Добавлено через 1 минуту str.Length()+1 пробовал, возникает ошибка
0
|
64 / 63 / 7
Регистрация: 19.03.2013
Сообщений: 207
|
|
09.09.2013, 14:12 | 8 |
а если подключить тестирующую программу, то все нормально приходит?
0
|
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
|
|
09.09.2013, 14:19 [ТС] | 9 |
да, все приходит.
0
|
64 / 63 / 7
Регистрация: 19.03.2013
Сообщений: 207
|
|
09.09.2013, 14:23 | 10 |
думаю дело в монохроматоре, я бы для начала проверил все мелочи, типа подключен ли порт=)
0
|
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
|
09.09.2013, 14:26 | 11 |
Контрольный байт высчитывается из данных сообщения по алгоритму, который должен быть описан в спецификации протокола.
Убедитесь, что то, что вы отправляете совпадает с тем, что ожидает девайс.
1
|
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
|
|
09.09.2013, 14:33 [ТС] | 12 |
Rust511, огромное Вам спасибо, все заработало!
0
|
64 / 63 / 7
Регистрация: 19.03.2013
Сообщений: 207
|
|
09.09.2013, 14:35 | 13 |
а можешь сказать в чем была проблема?))
1
|
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
|
|
09.09.2013, 14:36 [ТС] | 14 |
все из-за невнимательности. длина волны 5005 при переводе в hex есть 138D, но передавать нужно монохроматору сначала младший байт, потом старший, т.е. 8D13.
0
|
64 / 63 / 7
Регистрация: 19.03.2013
Сообщений: 207
|
|
09.09.2013, 14:42 | 15 |
ааа, ну все понятно, ты же заменил 2 строчки моего кода, и заменил с ошибкой=)) а почему нельзя оставить мой вариант? удобнее же будет, потом только длину волны менять, машина сама переведет значение в hex и самое главное без ошибок=)
Добавлено через 50 секунд Не по теме: ну и всегда рад помочь конечно же
1
|
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
|
|
09.09.2013, 14:47 [ТС] | 16 |
все сделал по твоему коду, все отлично работает
0
|
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
|
||||||
11.09.2013, 09:27 [ТС] | 17 | |||||
помогите, пожалуйста, с приемом данных из com порта.
отправляю прибору команду: 4C 8D 13 03 0D он отвечает: 4C 8D 13 03 3A 30 34 20 41 30 20 30 46 20 39 37 20 31 35 0D 0A.
после : идет полезная информация 04 - байт состояния прибора, A0 0F - младший и старший байты длины волны, 97 15 - младший и старший байты номера шага. Как считать нужные мне байты в stroka и перекодировать их в числа? char l1 = stroka[0]; не помогает.
0
|
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
|
|||||||||||
11.09.2013, 09:34 [ТС] | 18 | ||||||||||
помогите, пожалуйста, с приемом данных из com порта.
отправляю прибору команду: 4C 8D 13 03 0D он отвечает: 4C 8D 13 03 3A 30 34 20 41 30 20 30 46 20 39 37 20 31 35 0D 0A.
после : идет полезная информация 04 - байт состояния прибора, A0 0F - младший и старший байты длины волны, 97 15 - младший и старший байты номера шага. Как считать нужные мне байты в stroka и перекодировать их в числа?
0
|
64 / 63 / 7
Регистрация: 19.03.2013
Сообщений: 207
|
|
11.09.2013, 09:43 | 19 |
char[] ch = stroka.ToCharArray(int, int)
где первый параметр показывает с какого символа записывать, а второй - количество
1
|
1 / 1 / 0
Регистрация: 06.09.2013
Сообщений: 24
|
|
11.09.2013, 12:27 [ТС] | 20 |
точнее сформулирую вопрос:
отправляю: 4C 8D 13 03 0D приходит: L?:04 A0 0F 97 15 char[] ch = stroka.ToCharArray(0, 2); возвращает мне: L?A0 т.к. прибор отвечает пакетами по 8 бит. Как от прибора получить полный ответ.
0
|
11.09.2013, 12:27 | |
11.09.2013, 12:27 | |
Помогаю со студенческими работами здесь
20
Работа java-аплета через 433 порт Работа с несколькими устройствами через серийный порт Работа с устройством ELM327 через СОМ-порт используя BComPort Брусникина И.В Можно ли через VB организовать связь (через паралельный порт) с отдельным устройством? Вход в систему через putty через произвольный последовательный порт как вывести звук через обычный порт, а не через s/pdif ? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |