|
25 / 25 / 2
Регистрация: 08.11.2011
Сообщений: 284
|
|||||||||||
Обработка данных из порта03.03.2013, 06:03. Показов 5864. Ответов 46
Метки нет (Все метки)
Добрый день. Данные с порта считываются каждую секунду. Эти данные надо обработать. Вопрос как это сделать ? А то начинаю орабатывать тут:
Код программы целеком:
1
|
|||||||||||
| 03.03.2013, 06:03 | |
|
Ответы с готовыми решениями:
46
Обработка данных с COM порта Обработка данных из com порта Обработка данных с com порта. |
|
9 / 9 / 0
Регистрация: 03.10.2012
Сообщений: 35
|
|||||||||||
| 07.04.2013, 08:59 | |||||||||||
|
Привет.
Пришлось кое-что подучить, чтобы появился очередной вопрос. ![]() Здесь протокол для задачи. Кликните здесь для просмотра всего текста
Adress=16 Lenght=1 Type=unsign. char Explanation=O2(Oxygen, e.g. 209=20,9%) 1. Вот здесь зачем конвертируется unsign.char в массив unsign.char. И почему именно 133 ???
2. Вот это условие: Если ?????????, то переменной Т присваиваем значение ??????????? Можно подробней?
0
|
|||||||||||
|
25 / 25 / 2
Регистрация: 08.11.2011
Сообщений: 284
|
|
| 18.04.2013, 12:23 [ТС] | |
|
1. Вот здесь зачем конвертируется unsign.char в массив unsign.char. И почему именно 133 ???
Эт я не конвертирую а создаю новый массив (или я только так думаю, я же еще не спец, главное работает) А 133 именно потому что я сниффером вижу ну или по документации что размер ответа устройства 133 байта 2. Вот это условие: Если ?????????, то переменной Т присваиваем значение ??????????? Можно подробней? А это проверка если в буфере порта реально 133 байта то считываем эти байты в созданный массив buffrdBVR и далее обрабатываем его. Например выводим температуру. Проверку делаем что бы избежать считывания и обработки в наш массив левых или некорректных данных.
1
|
|
|
9 / 9 / 0
Регистрация: 03.10.2012
Сообщений: 35
|
|
| 18.04.2013, 18:25 | |
|
20-й байт это по твоему протоколу температура?
0
|
|
|
25 / 25 / 2
Регистрация: 08.11.2011
Сообщений: 284
|
|
| 18.04.2013, 19:02 [ТС] | |
|
Ты уш извиняй но описание функций то можно и посмотреть, чтоб таких вопросов не возникало. 20 это номер байта с которого берет нужные 4 байта функция.
1
|
|
|
9 / 9 / 0
Регистрация: 03.10.2012
Сообщений: 35
|
||||||
| 25.04.2013, 20:41 | ||||||
|
Привет. Посмотри пож. код. Не работает.
Где неправильно?
25-й адрес длинной 2 байта (signed int) - это температура окр. среды.
0
|
||||||
|
25 / 25 / 2
Регистрация: 08.11.2011
Сообщений: 284
|
||||||
| 26.04.2013, 11:47 [ТС] | ||||||
|
Во первых должно быть вот так, а во вторых что именно работает не так ??
1
|
||||||
|
9 / 9 / 0
Регистрация: 03.10.2012
Сообщений: 35
|
|
| 26.04.2013, 15:04 | |
|
Что не работает конкретно...
Создал форму, добавил метку label1. Добавил компонент serialPort1. Создал код на основе твоего кода и протокола задачи. Во вложении "протокол задачи". Сделал настройки компонента порта в соответствии с настройками порта в протоколе задачи. a) подключил прибор с которого снимаются данные. Посмотрел "снифером" (Serial port Monitor), что прибор действительно посылает данные, что кабель исправен и ось тоже. б) Скомпилировал код. Ошибок компиляции нет. Появилась форма с меткой. Метка как была с двумя нулями, так и осталась. Я понимаю, что это примитив, что нужно в цикле опрашивать "читать" 25, 26 байты. Но при запуске формы должен же был "прилететь" хоть какой-то мусор? Ты вот пишешь, что преобразуем 4 байта начиная с 25-го. В протоколе "длина =2 байта". Т.е. 25-й, 26-й. Попробовал твой код из предыдущего поста. Тоже самое. Метка с двумя нулями.
0
|
|
|
25 / 25 / 2
Регистрация: 08.11.2011
Сообщений: 284
|
||||||||||||||||||||||||||
| 26.04.2013, 16:22 [ТС] | ||||||||||||||||||||||||||
|
Скинь мне весь проект, гляну че ты там накодил.
И справку смотри по классам, например вот этот метод работает только для 32 битного числа, то есть для 4 байт.
http://msdn.microsoft.com/ru-r... erter.aspx Добавлено через 10 минут И кстате как компилятор у тебя вот это пропускает ???
Тут подругому надо делать ! Добавлено через 4 минуты Вот пример как должно быть
И со сниффера информацию мне дай. И еще во тут посмотри
0
|
||||||||||||||||||||||||||
|
9 / 9 / 0
Регистрация: 03.10.2012
Сообщений: 35
|
|
| 26.04.2013, 17:37 | |
|
Во вложении скрин снифера. Видно, что байты бегут непрерывным потоком. Где начало, где конец -непонятно.
0
|
|
|
9 / 9 / 0
Регистрация: 03.10.2012
Сообщений: 35
|
||
| 26.04.2013, 17:50 | ||
Вот это: "buffrdBVR" -это ты просто "обозвал" буфер? В течение часа проект скину.
0
|
||
|
25 / 25 / 2
Регистрация: 08.11.2011
Сообщений: 284
|
|
| 26.04.2013, 18:03 [ТС] | |
|
Teбе и не надо смотреть данные в буфере, тебе надо посмотреть доходят ли они до "buffrdBVR"! И я же тебе давал сниффер пользуйся им он пишет где запрос где ответ, там все понятно а тут куча данных. Для анализа не очень пригодна.
0
|
|
|
9 / 9 / 0
Регистрация: 03.10.2012
Сообщений: 35
|
|
| 26.04.2013, 18:25 | |
|
Здесь архив с проектом задачи.
0
|
|
|
25 / 25 / 2
Регистрация: 08.11.2011
Сообщений: 284
|
|
| 26.04.2013, 18:37 [ТС] | |
|
Как все сложно. )) во. Посмотри что у тебя попадает сюда buffrdBVR при выполнении программы.
Добавлено через 2 минуты И учти у меня VS 2010. И сниффер поставь мой и сними им данные! С то там хрен поймешь че.
0
|
|
|
9 / 9 / 0
Регистрация: 03.10.2012
Сообщений: 35
|
|
| 26.04.2013, 18:41 | |
|
ты мне посылал конвертер чисел. Каким снифером пользуешься?
Как посмотреть, каким способом посмотреть, что попадает в буфер?
0
|
|
|
25 / 25 / 2
Регистрация: 08.11.2011
Сообщений: 284
|
|
| 26.04.2013, 18:47 [ТС] | |
|
А точно, завтр скину, и проект гляну я щас с телефона, запарилмя писать.
Добавлено через 31 секунду А точно, завтр скину, и проект гляну я щас с телефона, запарился писать.
0
|
|
|
25 / 25 / 2
Регистрация: 08.11.2011
Сообщений: 284
|
|
| 27.04.2013, 05:32 [ТС] | |
|
Вот пользуйся вот етой прогой. Там данные такого формата:
Запрос:18.11.2012 9:09:30.26864 (+0.9375 seconds) 02 03 10 02 00 40 E1 09 Ответ:18.11.2012 9:09:30.29964 (+0.0313 seconds) 02 03 80 02 06 35 62 0E 00 0C 0B 12 09 0B 15 7A 2C 50 03 02 C8 8E AB 41 34 90 01 3F 1E 39 7D 3F DA 71 AB 42 EE 3E 01 44 B8 BF 2E 03 00 00 94 1B 28 00 F2 2F D4 3E 00 00 A6 47 D4 00 4B 04 39 3E 00 00 00 00 00 00 00 00 00 00 01 27 8D 15 C2 F5 3D 7F BE 00 00 00 00 00 00 00 00 00 00 00 00 12 00 00 00 00 00 05 00 00 00 5E 8F 42 3F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 BD 20 F8
0
|
|
|
25 / 25 / 2
Регистрация: 08.11.2011
Сообщений: 284
|
||||||||||||||||
| 27.04.2013, 06:01 [ТС] | ||||||||||||||||
|
Ну ты ваще молодец, глянул я твой проект. Во первых ты уверен что ты правильно настроил порт ? Скорость, номер порта, стоп биты, RTS и тд ? И вот в этот параметр ReceivedBytesThreshold поставь 72. Это число байт которые должны быть доступны перед запуском события порта Read.
Во вторых как ты хочешь получить ответ от порта не послав туда ничего ??? Да и вообще ты его даже не открыл, его нужно еще открыть потом посылать туда данные. Добавь на форму таймер, укажи через какое время будут у тебя записываться данные в порт! Вот мой код для открытия и записи данных в порт. У меня каждую секунду туда записывается данные.
Я вот послал командой информацию в порт:
Запрос:18.11.2012 9:09:30.26864 (+0.9375 seconds) 02 03 10 02 00 40 E1 09 И прибор мне на этот запрос отвечает Ответ:18.11.2012 9:09:30.29964 (+0.0313 seconds) 02 03 80 02 06 35 62 0E 00 0C 0B 12 09 0B 15 7A 2C 50 03 02 C8 8E AB 41 34 90 01 3F 1E 39 7D 3F DA 71 AB 42 EE 3E 01 44 B8 BF 2E 03 00 00 94 1B 28 00 F2 2F D4 3E 00 00 A6 47 D4 00 4B 04 39 3E 00 00 00 00 00 00 00 00 00 00 01 27 8D 15 C2 F5 3D 7F BE 00 00 00 00 00 00 00 00 00 00 00 00 12 00 00 00 00 00 05 00 00 00 5E 8F 42 3F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 BD 20 F8 Добавлено через 6 минут Вот поэтому у тебя никаких ошибок и не выдает, у тебя не разу дело до события serialPort1_DataReceived не дошло, поэтому ошибки о которой я говорил выше не выдает. (то что ты из другого потока пытаешься изменить label2)
1
|
||||||||||||||||
|
9 / 9 / 0
Регистрация: 03.10.2012
Сообщений: 35
|
||
| 29.04.2013, 14:46 | ||
Я считал, что после установления связи, когда сигналы RTS (запрос на передачу), CTS (чист для передачи что-ли) обменялись, начинается обмен данными. Я препода спросил, он ответил, что при подаче питания на прибор и при исправном кабеле и com port hardware, передача данных начинается немедленно. И отправил меня изучать теорию (UART).
0
|
||
|
25 / 25 / 2
Регистрация: 08.11.2011
Сообщений: 284
|
|
| 29.04.2013, 15:15 [ТС] | |
|
Я не специалист пока еще, но вот у меня ни один из имеющихся приборов не отправляет сам себе никакие данные. Надо сначала ему отправить запрос и только после этого в зависимости от запроса я получаю те или иные данные в виде ответа от прибора.
Добавлено через 1 минуту Но вот правильно на строить порт и открыть его надо в любом случае! Добавлено через 1 минуту Я думаю у тебя тоже прибор не ответит пока в него не пошлёшь запрос. Добавлено через 1 минуту Тем более откуда он сам знает какие данные тебе присылать и через какой период ? Добавлено через 4 минуты Протокол modbuse (не помню как правильно пишется) rtu ? Если да просчитай про него. Добавлено через 12 секунд Протокол modbuse (не помню как правильно пишется) rtu ? Если да просчитай про него.
0
|
|
|
9 / 9 / 0
Регистрация: 03.10.2012
Сообщений: 35
|
||||||
| 29.04.2013, 15:26 | ||||||
|
Потом, я же проверил свойством
Снифер, который ты мне прислал вообще отказывается что-то показывать. проверил Port Monitor(ом), данные идут. Пока "перевариваю" и пробую все-что ты мне прислал (замечания, софт и т.д.). И вообще, на MSDN какие-то примеры свойств компонентов приводят, вроде и С++ закладку выбираешь. Очень отличаются от того, что у тебя и других в коде на VS 2010. Взять тот же (IsOpen).
0
|
||||||
| 29.04.2013, 15:26 | |
|
Помогаю со студенческими работами здесь
40
Обработка данных с COM порта без использования Sleep Обработка ошибки при потере COM порта Обработка данных с COM порта
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|