Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2012, 07:48   #1
SDevel
Новичок
Джуниор
 
Регистрация: 14.12.2012
Сообщений: 2
По умолчанию Работа с COM портом

Есть задумка написать удобоваримую программку-монитор некоего девайса, который шлет свои данные в COM порт без запросов со стороны ПК.
Сам не профи, но в голове рисуется некая картина:
Механизм чтения данных из порта вынести в отдельный класс.
У класса есть методы StartMonitor и StopMonitor. А также события
OnStart,OnStop для подтверждения что порт открылся и закрылся и OnGet Data по приему корректного пакета от девайса, причем данные от девайса представить в виде структуры. Форма программы имеет один экземпляр данного класса и по приему события о принятом пакете поля структуры раскидывает по соответствующим TextBox`ам и т.д.

В первом приближении получилось: в атаче

Жажду мнения профи по поводу корректности написанного и в целом идеологии подобного плана программок.

Смущают некоторые моменты:
1. Исключения при работе с портом ловить выше или в этом же классе?
2. Правильно ли читаю данные из порта? Дело в том что данный девайс шлет данные потоком без пауз между пакетами и надо выделять пакет по обрамляющим его символам "{" и "}".
Вложения
Тип файла: zip ImaxMonitor.zip (1.7 Кб, 33 просмотров)
SDevel вне форума Ответить с цитированием
Старый 14.12.2012, 09:32   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Не сильно вдавался в код но общий принцип то прост. В обработчике принятых данных от устройства все полученное без разбора пихаете в единый массив...
а потом, параллельный процесс спокойно уже обрабатывает данные так как вам нужно.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 14.12.2012, 09:48   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

...корректность оперделяется практикой и достоверностью приема, конечному пользователю все равно, что у вас реализовано в классах.

Цитата:
1. Исключения при работе с портом ловить выше или в этом же классе?
исключения ловить и писать в лог, не надоедая пользователю.

Цитата:
2. Правильно ли читаю данные из порта?
надо бы предусмотреть обработку потери одного из обрамляющих символов.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 14.12.2012, 10:04   #4
SDevel
Новичок
Джуниор
 
Регистрация: 14.12.2012
Сообщений: 2
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
исключения ловить и писать в лог, не надоедая пользователю.
А критичные? Допустим выбранный порт занят другой программой и не может быть открыт. Наверно правильно будет маякнуть юзеру. Может внутри класса ловить исключения от SerialPort и сортировать мелкие в лог в том числе и рваные пакеты а критичные передавать выше бросая свое исключение?

Цитата:
Сообщение от raxp Посмотреть сообщение
надо бы предусмотреть обработку потери одного из обрамляющих символов.
ну если один из символов потеряется то поймается следующий - в результате полученный пакет не пройдет проверку контрольной суммы и будет игнорирован. Потеря 2-3 пакетов (даже подряд) не критична. Девайс шлет их со скоростью 9600. На форме не заметно будет что в какой-то момент значения обновились чуть позже.
SDevel вне форума Ответить с цитированием
Старый 14.12.2012, 12:13   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

...я про ваш парсинг по скобочкам, представьте одна из потеряется. Просимулируйте.

Цитата:
А критичные? Допустим выбранный порт занят другой программой
если занят, то достаточно проиндицировать, что занят.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 04.01.2013, 23:25   #6
Евгений55
 
Регистрация: 02.01.2013
Сообщений: 3
По умолчанию

Не хотелось создавать новую тему с таким же названием....
Вопрос у меня такой. Имеются электронные весы, с которых , через СОМ порт передаются данные в ASCII. Данные идут сплошным потоком от них. Научился их принимать в ячейку. Там куча символов и пробелы, а потом вес. Как сделать так, что бы писать в нужную яч. только вес, отбросив все символы? И информация в эту ячейку может писаться с любого места пакета, что не совсем удобно для обработки.
Для приёма информации с порта, использую rsapi.dll
Спасибо!
Евгений55 вне форума Ответить с цитированием
Старый 05.01.2013, 12:16   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

Цитата:
Не хотелось создавать новую тему с таким же названием....
Вопрос у меня такой. Имеются электронные весы
и все же создайте отдельную тему.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с COM-портом Georgios Общие вопросы Delphi 12 28.09.2010 10:31
работа с com-портом larry Visual C++ 6 12.08.2010 16:21
работа с портом Assemblerru Win Api 16 10.06.2010 20:00
Работа с com портом albles Общие вопросы C/C++ 2 16.11.2009 15:15
Работа c COM-портом doniyor Общие вопросы Delphi 12 27.07.2009 11:16