|
10 / 10 / 5
Регистрация: 20.02.2013
Сообщений: 59
|
|||||||||||
SerialPort COM, запрос-ответ23.11.2014, 06:21. Показов 8849. Ответов 22
Метки нет (Все метки)
Привет! Значица работаю с устройством через COM-порт. Есть спецификация. При включении устройства оно посылает на компорт Connect message. С этим проблем нет, запускаю отдельный поток в котором слушаю компорт вот:
{{++!!0000E0001A1,CONNECT;LTR3_SERIAL_23 71297F!!--}} И вот мне нужно отправлять на устройство запроси и слушать ответы, но чего то не получается, либо я не понял как это делается В методе Main(),после строчки Console.Read();, формирую строку запроса, и пишу ее в порт, и слушаю что придет
Очень нужно научиться вести диалог с устройством, и потом парсить данные что приходят. З.Ы. Устройство называется LOADTRONIC, кому надо прикрепляю спецыфикацию запросов (del), может я чего то там важного не заметил. И клас формирующий строку запроса (del).
0
|
|||||||||||
| 23.11.2014, 06:21 | |
|
Ответы с готовыми решениями:
22
Serialport.write и serialport.basestream.write - в чем разница Ответ на запрос Ответ на Get запрос |
|
|
|
| 23.11.2014, 10:02 | |
|
Franky, что-то никак не могу скачать спецификацию протокола. Закиньте сюда, или на другой файлообменник...
0
|
|
|
10 / 10 / 5
Регистрация: 20.02.2013
Сообщений: 59
|
||||||
| 23.11.2014, 17:41 [ТС] | ||||||
|
raxp, окей пытаюсь сделать так
insite2012, А так? DID 50752 Loadtronic Serial Protocol v0.7-2.7z
0
|
||||||
|
|
||||||
| 23.11.2014, 17:56 | ||||||
0
|
||||||
|
10 / 10 / 5
Регистрация: 20.02.2013
Сообщений: 59
|
||||||
| 23.11.2014, 18:13 [ТС] | ||||||
|
raxp, А как мне тогда логичнее сделать.
Пробую еще так
0
|
||||||
|
|
|
| 23.11.2014, 19:01 | |
|
...логичнее сначала построить логику-алгоритм поведения своей программы прежде, чем писать код. оки, снимите сниффером дамп обмена, Portmon к примеру. Увидим, что отсылаете и приходит ли чего в ответ на самом деле, может элементарно с настройками порта проблемы или несоответствие протоколу.
0
|
|
|
10 / 10 / 5
Регистрация: 20.02.2013
Сообщений: 59
|
||
| 23.11.2014, 19:07 [ТС] | ||
|
raxp, Программу буду строить потом, для начала хочется отправить на устройство простой запрос и получить простой ответ.
0
|
||
|
|
|
| 23.11.2014, 19:13 | |
|
0
|
|
|
|
|
| 23.11.2014, 19:28 | |
|
Franky, полистал немного протокол, ну у погуглил. Если я все верно понял, то это протокол обмена по последовательному порту с каким-то устройством, для доступа к какой-то базе данных, находящейся на удаленном устройстве.
Расскажите поточнее, как (и с чем) все это работает, чтобы не переводить мануал.
0
|
|
|
10 / 10 / 5
Регистрация: 20.02.2013
Сообщений: 59
|
|
| 23.11.2014, 20:15 [ТС] | |
|
insite2012, Устройство называется LOADTRONIC, устанавливается на экскаваторы, погрузчики, и т.д. Устройство экономит время на взвешивание поднятого материала, относительно штатных датчиков встроенных в экскаваторы. Кроме того, в устройство можно загружать/посылать новие "задачи" на выполнение, где водителю указывается какой материал и в каком количестве надо загрузить. Кроме того в устройстве имеется своя база данных с выполненными работами, или с теми что еще предстоит выполнить, материалов, проэктов, заказчиков, локаций ,и т.д.
До сих пор обмен происходил между кабиной водитеся и будкой оператора на стройплощадке например, у них там какая то штатная програмулина которая выгружает все в эксельевский файл. Я прохожу стажировку в компании которая разработала вэб-приложение для удобства учета ресурсов на всяких больших стройках, и все такое. Учет прэектов конкретного пользователя, количество сотрудников, каждий сотрудник регистрирует сколько часов и над каким проэктом он работал, какой материал расходовался, и т.д. И клиенты хотят чтобы была возможность не вводить даные из LOADTRONIC-а вручную каждый раз в наше приложение, а чтобы LOADTRONIC умел автоматически синхронизировать данные между свой базой, и базой нашего приложения. Обмен будет происходить посредством GSM соединения. И вот пока мне прислали поковырять устройство пока что через COM, потом все переделается на сокеты. И кроме простого Connect message ничего получить от устройства не удается.
0
|
|
|
|
|||
| 23.11.2014, 20:30 | |||
|
0
|
|||
|
10 / 10 / 5
Регистрация: 20.02.2013
Сообщений: 59
|
|
| 23.11.2014, 20:47 [ТС] | |
|
insite2012, Нет, есть только устройство и Technical Note, ито уже третью версию мне присылают. Я их раньше просил чтобы прислали пример исходящего и входящего сообщений, что-бы хоть знать как его еще все парсить потом, но пока что прогресса немного.
0
|
|
|
|
|||
| 23.11.2014, 21:15 | |||
![]() Но, перед этим дамп обмена (пост #9) с устройством в тему, дабы видеть реалии жизни. Может ответ есть, да у вас затык.
1
|
|||
|
[Bicycle Reinventor]
|
|
| 24.11.2014, 18:08 | |
|
Самый простой для вас сейчас способ выяснить, что не так - использовать portmon и(опционально) terminal by Br@y ++
В дальнем будущем рекомендую вам переделать проект следующим образом: во-первых, создайте класс-обёртку вокруг вашего порта. Пусть serialPort будет закрытым полем этого класса. во-вторых, в этом классе создайте не один,а два дополнительных потока - один на приём, другой на передачу. Естественно, в таком случае нужно написать блокировку вокруг поля ком-порта, чтобы потоки не пытались писать/читать одновременно. Наконец, третье и самое важное. У вас в протоколе чётко объявлены границы пакета, есть условный stx и условный etx. Это гораздо проще, чем например у термопринтеров, которые просто плюются байтами на печать, периодически без всякого предупреждения разбавляя этот поток ещё и командами, без всяких старотовых бит, контрольных сумм и прочего. Вам легче - читайте с порта не текст, а байты, при чём по одному в цикле. Ожидайте стартовый байт, остальное игнорируйте. Когда похожее на стартовый байт будет обнаружено, читайте дальше всю стартовую последовательность побайтово. Тогда будет однозначно известно, что пришёл пакет. Также ожидая конец пакета точно будет известно, когда он закончится, а перед ним ещё и crc, можно проверить правильность пакета. Останется только распарсить данные. Однако замечу, что у портмона есть свои минусы. Он не перехватывает непосредственно байты ком и лпт портов, он перехватывает события винды о передаче байтов. Следовательно, если устройство послало вам в порт кучу байт, но их ни одно программа не вычитала, портмон ничего не покажет, будто устройство молчало. Учтите это. Если проблемы будут продолжаться, можете попробовать переделать ваш приёмный поток следующим образом: пусть он принимаетбайты по одному, конвертирует их в чар-символы и выводит в консоль. По крайней мере вы будете видеть всепришедшие байты, правильные или нет. Эдакий лог прямо в окне консоли.Но вообще для таких дел пишут логгеры.
1
|
|
|
10 / 10 / 5
Регистрация: 20.02.2013
Сообщений: 59
|
||||||
| 24.11.2014, 18:59 [ТС] | ||||||
|
Спасибо всем за отзывчивость
![]() raxp, Поигрался сегодня программкой Advanced Serial Port Monitor, тоже слал через нее запросы - нифига. Потом мне наконецто отписали разработчики из LOADTRONIC, что у них там видите ли в TransportProtocol чуток неправильно формируеться строка запроса потому что FrameType должен кодироваться одним шестнадцатиричным символом "The Type must be E (1 byte hex E = decimal 14)". А у меня их клас тупо там где Е должна быть пихал 14. Исправил. Теперь через этот Advanced Serial Port Monitor посылаю запрос (вот как он выглядит {{++!!0000E000051;;10B4A2!!--}}) и вуаля, прилетает ответ: ответ {{++!!0001E000181;2371;110;1; 2371; 23718CEC!!--}} Но вот в мою тестовую консольную программу так ничего и не прилетает
0
|
||||||
|
|
||||||
| 24.11.2014, 20:49 | ||||||
|
Franky, вот накидал для вас простую консольку, скопируйте ее и попробуйте. Алгоритм такой: программа с интервалом в 1сек. посылает запрос и ждет ответа. И так 10 раз. Если есть ответ - читает его, переводит в строку и выводит на консоль.
P.S. Да, не забудьте сконфигурировать порт в методе, я его там так с потолка сконфигурировал. Имя, скорость и так далее.
2
|
||||||
|
10 / 10 / 5
Регистрация: 20.02.2013
Сообщений: 59
|
||||||
| 25.11.2014, 10:49 [ТС] | ||||||
|
insite2012, Спасибо. А мне вот нужно сначала слушать включилось ли устройство, ждать все тот же Connect message, и после этого надо посылать разные запросы на устройство. Для каждого запроса надо делать отдельный таск?
И я все пытаюсть хотя бы тестовый запрос отослать, и принять что-то. Но чето запрос пишется в порт, а устройство как будто и не слышало что я что-то послал ему. Вот такая тестовая програмулина новая:
а я из кода такие елементарные вещи не могу сделать? И еще в этом примере я использую SerialDataReceivedEventHandler, а какое преимущество вообще использовать таски или потоки перед использованием прослушки ивентов? СОМ-порты они ведь вроде-как не потокобезопасны? разтолкуйте молодому
0
|
||||||
|
|
|||
| 25.11.2014, 10:59 | |||
|
Franky, вы через монитор порта отсылаете запрос и вам приходит ответ, так? Попробуйте то, что я вам написал. Скажете результат.
0
|
|||
| 25.11.2014, 10:59 | |
|
Помогаю со студенческими работами здесь
20
Ответ на запрос Ответ на запрос Ответ на AJAX запрос Кракозябры в ответ на запрос в Vk Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|