Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Urban_88
0 / 0 / 0
Регистрация: 23.08.2014
Сообщений: 10
#1

Анализ данных с COM порта. Есть ли способ чтения файла в процессе его изменения? - C++

23.08.2014, 21:07. Просмотров 1323. Ответов 17
Метки нет (Все метки)

Здравствуйте форумчане, передо мной стала задача, которую я никак не могу осилить, а именно анализ данных с COM порта. Принимать данные с COM порта я научился. Не судите строго идея может быть бредовая, но по другому я пока не знаю как это реализовать. Принятые данные я записываю в файл receiver.txt и мне нужно проанализировать с первого до последнего принятого байта. Но загвоздка в том, что файл может записываться несколько часов, потом потребуется я думаю, еще не мало времени, что бы его расшифровать. Есть ли способ чтения файла в процессе его изменения? Если сморозил глупость, то скажите, как нужно сделать правильно.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2014, 21:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Анализ данных с COM порта. Есть ли способ чтения файла в процессе его изменения? (C++):

универсальный способ чтения/создания файла - C#
Всем привет! Нужно создать/прочитать в файл в папке C:\Users\user\Desktop\output.txt на разных машинках разные юзеры. Есть ли...

Драйвер чтения данных из СОМ-порта(Ассемблер) - Assembler
Доброго времени суток,может завалялся у кого драйвер DOS на ассемблере под COM-порт(без разницы на какой,очень нужна простейшая основа...

Как отладить программу для чтения данных из сом порта? - C (СИ)
Примеров на форуме достаточно, есть от чего оттолкнуться, у меня другой вопрос, чем можно имитировать поступление данных на сом порт с...

не могу выбрать способ изменения файла - Assembler
помогите выбрать как изменить файл: надо дописать в начало строки ее номер, но как - не знаю. Либо читать весь файл и потом править, либо...

Можно ли как-то менять 9-ый бит передаваемых данных без изменения остальных параметров порта? - Visual Basic
Здравствуйте, уважаемые коллеги! У меня следующий вопрос: есть устройство, которое связано с ПК по RS232. 9-ый бит передаваемых...

База данных доступна только для чтения и все изменения в ней не будут сохранены - MS Access
на нескольких ПК база открывается нормально, на одном вот такое сообщение, везде Access 2003 - что нужно сделать?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxp
10162 / 6549 / 477
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
23.08.2014, 21:24 #2
...данные поступают столь редко, что для этого требуется несколько часов? Инерционный процесс какой? Если это так и данных мало, то накопление можно осуществлять и в памяти программы REALTIME и тут же проводить анализ. А файл пусть своего рода архив.

потребуется я думаю, еще не мало времени, что бы его расшифровать
укажите объем данных и что требуется анализировать. Делать выводы на основании лишь ваших "я думаю" никто не будет.

Есть ли способ чтения файла в процессе его изменения?
да, если открыть файл на чтение и запись. А поскольку доступ нужен из своего же приложения, то в монопольном или не монопольном, без разницы. Кроме того, для упрощения работы следует сразу определиться со структурой своего файла-архива.

http://msdn.microsoft.com/ru-ru/libr...v=vs.110).aspx
1
Urban_88
0 / 0 / 0
Регистрация: 23.08.2014
Сообщений: 10
23.08.2014, 21:53  [ТС] #3
Данные поступают с интервалом между пачками от 50мкс до 200 мкс. Про несколько часов - это в худшем случае. Сейчас я не могу сказать, как долго будет работать аппаратура. Ждем ответа от тематиков. К сожалению, я очень плохо разбираюсь в прикладном программирование. Сам я занимаюсь микроконтроллерами. Но вот тут поставили такую задачу. Если вас это не затруднит. Можете выложить кусочек кода, что бы я начал разбираться. Сам я работаю в C++ Builder.

Добавлено через 1 минуту
Цитата Сообщение от raxp Посмотреть сообщение
Кроме того, для упрощения работы следует сразу определиться со структурой своего файла-архива
Здесь я вас не совсем понял.
0
_Ivana
3149 / 1777 / 152
Регистрация: 01.03.2013
Сообщений: 4,981
Записей в блоге: 2
23.08.2014, 22:01 #4
Цитата Сообщение от Urban_88 Посмотреть сообщение
Принятые данные я записываю в файл receiver.txt
Имхо зачем в txt? Вы собираетесь его потом глазами смотреть? В какой-нибудь скриптовый парсер засовывать? Я еще с NMEA наелся этого парсения человечески-ориентированного текста, вы же занимаетесь микроконтроллерами - пишите в файл сразу байты подряд как они поступают с порта. Как бы вы решили эту задачу на микроконтроллере? Правильно, нарезаете щедрый кусок памяти, и по прерыванию приема байта с USART пишете его в память, инкрементируете указатель - все. Здесь то же самое.
ЗЫ если задача позволяет - лучше организовать небольшой кольцевой буфер и успевать обрабатывать поступившие данные быстрее чем они поступают - не нужен большой кусок памяти для хранения всех данных одним куском.
0
raxp
10162 / 6549 / 477
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
23.08.2014, 22:16 #5
1- кусочек кода есть по ссылке, в вашем случае работа через класс TFileStream
2- "Здесь я вас не совсем понял." - ну а как вы собираетесь искать что-то в файле? Должна быть какая-то точка отсчета-метка для ориентира. Шапка с описанием архива в файле, далее объем данных и сдвиг откуда начинать, все это некий фиксированный размер байт.
3- "Имхо зачем в txt? Вы собираетесь его потом глазами смотреть?" - хоть .blabla, и почему бы и не посмотреть? Очень удобно сразу видеть, что там и с чем. XML может и не надо, но для будущего очень неплохой задел, но тот же CSV формат записи тоже неплох. В любом случае что-то советовать и делать выводы при отсутствии пояснения TC о объеме данных, их типе и дальнейшем использовании, рано. Может он в WEB потом их вываливать будет? А тут XML очень даже кстати.
0
Etien
21 / 21 / 0
Регистрация: 26.01.2014
Сообщений: 182
23.08.2014, 22:25 #6
Читать своей программой COM я так понял ты умеешь. Вот и читай его в какой свой буфер - массив. Оттуда и анализируй, и делай выводы. И если нужен архив, то пиши то, что принял из COMa в файл в любом тебе понятном виде. И даже пусть это *.txt будет.
Всегда твой - Etien.
0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
23.08.2014, 23:06 #7
Что за данные приходят от порта? Есть ли какой-то протокол передачи этих данных? Опишите свою задачу более предметно, иначе сложно что-то советовать.
0
Urban_88
0 / 0 / 0
Регистрация: 23.08.2014
Сообщений: 10
25.08.2014, 21:13  [ТС] #8
Моя задача - это прослушивание канала, то есть прослушивать, как одна аппаратура общается с другой.

В мою задачу входит отлавливать байты, порядко 150 if и плюс еще от 5 до 8 if внутри каждого if и выводить соответственные сообщения. В порт приходят пачки от 5 до 8 байт. как писал выше время между сообщениями от 50мкс до 200 мкс. Тут посоветовали про буфер, я думал про это, идея не плохая. Но мне очень хочется сделать всё по человечески. Первостепенная задача это складирование байтов в txt файле. А во время, когда порт молчит анализ этих данных.
0
raxp
10162 / 6549 / 477
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
25.08.2014, 22:09 #9
прослушивать, как одна аппаратура общается с другой.
на каком удалении друг от друга? Потому как если десятки, сотни метров, то тут не RS-232, а RS-422/485, а то и Ethernet и прослушивать совсем не проблема.

В мою задачу входит отлавливать байты, порядко 150 if и плюс еще от 5 до 8 if внутри каждого if и выводить соответственные сообщения. В порт приходят пачки от 5 до 8 байт.
это все витиевато. Есть протокол обмена?

А во время, когда порт молчит анализ этих данных.
ничего не мешает после приема передавать в параллельный поток для обработки.
1
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
25.08.2014, 22:20 #10
Цитата Сообщение от Urban_88 Посмотреть сообщение
А во время, когда порт молчит анализ этих данных.
Анализировать данные можно в отдельном потоке.

Цитата Сообщение от Urban_88 Посмотреть сообщение
В мою задачу входит отлавливать байты, порядко 150 if и плюс еще от 5 до 8 if внутри каждого if и выводить соответственные сообщения. В порт приходят пачки от 5 до 8 байт.
Как уже сказали, это выглядит слишком запутанно. Должен быть какой-то более общий протокол.
0
_Ivana
3149 / 1777 / 152
Регистрация: 01.03.2013
Сообщений: 4,981
Записей в блоге: 2
25.08.2014, 22:28 #11
Не понимаю зачем опытные участники требуют с потерпевшего автора какой-то протокол... Ну слушает он космос, космос ему шлет пачками какие-то байты, автор хочет писать их подряд в txt и потом разглядывать и искать послания внеземного разума какие-то закономерности, может график построить и т.п. Только какой-то особой проблемы в реализации всего этого я пока не вижу.
0
Urban_88
0 / 0 / 0
Регистрация: 23.08.2014
Сообщений: 10
25.08.2014, 22:36  [ТС] #12
Цитата Сообщение от raxp Посмотреть сообщение
это все витиевато. Есть протокол обмена?
К сожалению протокол выложить не могу, боюсь тюрьмы, аппаратура не гражданская.
Цитата Сообщение от raxp Посмотреть сообщение
ничего не мешает после приема передавать в параллельный поток для обработки.
Вы уж извините меня, но я не знаю как это сделать. Я буду очень признателен, если поможете. Это нужно сделать с помощью TfileStream ?

Добавлено через 1 минуту
Цитата Сообщение от _Ivana Посмотреть сообщение
Только какой-то особой проблемы в реализации всего этого я пока не вижу
Можете с кодом помочь ?
0
raxp
10162 / 6549 / 477
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
25.08.2014, 22:39 #13
Threads:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
0
_Ivana
25.08.2014, 22:41
  #14

Не по теме:

Цитата Сообщение от Urban_88 Посмотреть сообщение
Можете с кодом помочь ?
Смотря для какого государства вы делаете эти негражданские разработки Хотя в любом случае эта ситуация очень напоминает как Остап Бендер и Киса Воробьянинов назвались художниками чтобы попасть на корабль

0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
25.08.2014, 22:57 #15
Urban_88, в общем случае можно сделать так:
1) Постоянно крутится поток, читающий ком-порт, и складывает все принятые байты в некоторый буфер.
Вот примерный алгоритм работы с ком-портом: http://www.piclist.ru/S-COM-THREAD-R...HREAD-RUS.html
2) Также постоянно крутится поток протокола, который читает вышеуказанный буфер. Он считывает данные из буфера по определённому алгоритму (который ты описал как 150 if) и извлекает из принятых байт полезную информацию, отсекая всякую протокольную "ерунду": начало посылки, длину посылки, CRC и т.д. Полезную информацию в виде цельных посылок (например, vector<byte> или подобного) отправляет в буфер посылок.
3) Поток анализа данных выбирает эти посылки и, соответственно, анализирует.

Если протокол многоступенчатый (т.е. над одним уровнем протокола находится ещё один протокол и т.д.), то можно на каждый уровень протокола назначать по потоку. Обмен между ними - через непрерывный буфер байт или цельными посылками.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2014, 22:57
Привет! Вот еще темы с ответами:

Есть ли способ безопасно сохранить пароль в программе? То есть вшить в прогу пароль от локальной базы данных например. - C#
Замутил класс, буду наполнять его полезными методами. Возможно создам ещё один другой класс, не расширение. public static class...

Есть ли способ, зная ссылку на класс, использовать его значения без запроса по ссылке? - C++
скажем есть 2 класса class ItemList { public: ItemList(); int item; int count; Func*func; }

Есть ли способ связать GRID базы данных с TREEVIEW? - Delphi
subj.

Напишите функции записи данных в файл, чтения данных из файла - C++
Файл dаte.in содержит четырех значное число на каждой строке. Напишите функции записи данных в файл, чтения данных из файла. Напишите...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.08.2014, 22:57
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru