С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/40: Рейтинг темы: голосов - 40, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
1

Чтение данных из файла и их передача через порт компьютера

21.05.2017, 10:15. Показов 7700. Ответов 67
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.

Есть задача: в текстовый файл в реальном времени пишется поток данных (углы наклона прибора в градусах). Необходимо считывать данные из этого файла в реальном времени и передавать их через COM- порт, с дальнейшей передачей данных на ЦАП и получения эквивалентного напряжения (из файла считалось, например, 5 градусов, дальше эти 5 градусов ушли через порт, там преобразовались в напряжение).

Собственно вопросы:
1)Как это реализовать и что для этого надо?
2)Можно ли делать чтение с определенной строчки и до конца?

Добавлено через 16 минут
Либо вместо COM использовать USB
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.05.2017, 10:15
Ответы с готовыми решениями:

Чтение/передача данных через USB порт
Задача такова: есть внешний микроконтроллер (Arduino) который связан с ПК ч/з USB (некоторый...

Чтение данных через COM порт
Имеется устройство, панель кнопок, связанная с компом через RS-232 т.е. COM порт. Хочу сделать...

Передача данных через Com порт
Добрый день форумчане! Мне с помощью программы "free-serial-port-monitor" удалось считал данные,...

Передача данных через ИК порт
Нужно организовать систему передачи данных через инфракрасный на ассемблере. ИК должен...

67
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.05.2017, 12:03 2
А они в конец файла добавляются? Переполнение диска не происходит?
Надо чтобы файл открывался без блокировки разделяемого доступа. Как в torrent-клиентах. Тогда можно считывать параллельно с записью.
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
21.05.2017, 12:53  [ТС] 3
Запускает программа, виртуально происходят манипуляции, автоматически создается файл с установленным именем и расширением (Data.txt) и просто сверху-вниз пишется колонка до тех пор, пока не остановится программа симуляции.
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.05.2017, 13:56 4
Ну так в чём проблема? Открывай его на чтение и обрабатывай.
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
21.05.2017, 14:38  [ТС] 5
Проблема в том, что файл выглядит как:

данные1 | данные1 | данные3 | данные4|
1234134 | 1234134 | 1234134 | 1234134 |
1234134 | 1234134 | 1234134 | 1234134 |

Мне нужно: 4 массива, чтобы 1 считывал только 1 колонку, второй только 2 и тд.
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.05.2017, 14:42 6
Считывание идёт строками. А распределять части строки можешь по разным массивам.
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
21.05.2017, 15:09  [ТС] 7
Еще момент: симуляция может идти сколь угодно долго, соответственно массив не должен быть переполнен. Либо надо перезаписать данные, чтобы старые пропадали, а поверх них заводились новые.

Добавлено через 24 минуты
Использую эту конструкцию:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
#define N 80
 
main () { 
    FILE *file;
    char arr[N];
 
    file = fopen("Data.txt", "r");
 
    while (fgets (arr, N, file) != NULL)
        printf("%s", arr);
 
    printf("\n");
    fclose(file);
}
Тем самым решил проблемы:
1)Кол-во строк не ограничено.
2)Старые данные стираются, поверх пишутся новые.
Остались проблемы:
1)Как вытащить первые 16 символов строки в отдельный массив, как вторые 16 и тд. Колонок 4 шт
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.05.2017, 16:08 8
И где здесь решение? Ты же в массив не записал. И нужен ли он? Если отправка сразу идёт, то и накапливать больше одного набора незачем. Почему 16 символов? Четыре числа в строке. Ты как их передавать-то хочешь? Текстом, или там какой-то формат?
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
21.05.2017, 16:29  [ТС] 9
Цитата Сообщение от nmcf Посмотреть сообщение
И где здесь решение? Ты же в массив не записал. И нужен ли он? Если отправка сразу идёт, то и накапливать больше одного набора незачем. Почему 16 символов? Четыре числа в строке. Ты как их передавать-то хочешь? Текстом, или там какой-то формат?
Здесь пока только чтение из файла в массив arr. Идет построчно с перезаписью строки - новая пишется поверх старой.
Нужно: из каждой колонки вытащить цифры в свой отдельный массив, игнорируя пробелы и символ "|". Цифры должны быть как есть, то есть числовой формат, чтобы их потом можно было подать на порт, с порта сразу на ЦАП и дальше работать с напряжением.
На фото исходный документ.
Миниатюры
Чтение данных из файла и их передача через порт компьютера  
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.05.2017, 17:07 10
Ты так и не объяснил как они в порт пойдут. В бинарном виде, что ли? Как float или как double?
Если так, то используй fscanf() и четыре вещественных переменных.
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
21.05.2017, 17:22  [ТС] 11
Цитата Сообщение от nmcf Посмотреть сообщение
Ты так и не объяснил как они в порт пойдут. В бинарном виде, что ли? Как float или как double?
Если так, то используй fscanf() и четыре вещественных переменных.
Они должны пойти как float, вот как они есть. И еще момент. Пока файл пишется, моя программа считывает данные в массив и заканчивает работу, т.е. данные в текстовик пишутся, а программа встала. Как мне сделать ее бесконечно рабочей? Чтобы данные записались в текстовик и тут же из него выдали в мою программу. В реальном времени работа, так сказать.
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.05.2017, 17:27 12
Цикл организуй.
С какой скоростью эти строки записываются?
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
21.05.2017, 17:46  [ТС] 13
Цитата Сообщение от nmcf Посмотреть сообщение
Цикл организуй.
С какой скоростью эти строки записываются?
Как бы объяснить. Данные продолжают писаться, а программа застыла, то есть она прочла данные до момента открытия. Программа отработала и встала, как показано на рисунке, а данные продолжают писаться.
Миниатюры
Чтение данных из файла и их передача через порт компьютера  
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
21.05.2017, 17:46  [ТС] 14
Цитата Сообщение от nmcf Посмотреть сообщение
Цикл организуй.
С какой скоростью эти строки записываются?
Как бы объяснить. Данные продолжают писаться, а программа застыла, то есть она прочла данные до момента открытия. Программа отработала и встала:
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.05.2017, 18:11 15
Я же сказал - цикл.
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
21.05.2017, 19:33  [ТС] 16
Цитата Сообщение от nmcf Посмотреть сообщение
Я же сказал - цикл.
Все получилось. Но появилась новая проблема. Данные в симуляции обновляются так быстро, что мое приложение не может его отображать своевременно. В связи с этим было использовано Sleep(n);. Теперь данные отображаются пачками через некоторый интервал. Вопрос: как сделать так, чтобы данные шли быстро, но и при этом их можно было рассмотреть без прерывания?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <windows.h>
 
#define N 80
 
using namespace std;
 
int main()
{
    FILE *file;
    char arr[N];
    char pitch[8], roll[16], heading[16];
    file=fopen("Data.txt","r");
while(1){
    while(fgets(arr,N,file) !=NULL)
        printf("%s", arr);
    printf("\n");
        Sleep(50);
}
    fclose(file);
 
    return 0;
}
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
21.05.2017, 20:50 17
Зачем их рассматривать? С какой скорость они поступают?
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
22.05.2017, 15:06  [ТС] 18
Цитата Сообщение от nmcf Посмотреть сообщение
Зачем их рассматривать? С какой скорость они поступают?
Для наблюдления. А поступают так быстро, что консольное приложение просто не успевает их отображать. На глаз - каждые пол секунды поступают, наверное даже чаще. То есть приложение просто черный экран показывает, иногда цифра проскочит, но это нереально отображать

Добавлено через 3 часа 35 минут
Данные поступают с частотой 99.9гц, Пишутся сверху-вниз, слева-направо построчно, т.е. 4 числа записалось в строку друг за другом с пробелами, строка закончилась и пошла новая. И я смог сделать забивание данных в массивы: 1 колонка - 1 массив, 2 колонка - 2 массив и тд. Но появилась проблема: после какого-то времени данные начинают спутываться и например массив 1 ловит данные 2 колонки, а массив 2 ловит данные 3 колонки и тд, т.е. данные съезжают. Как от этого избавиться.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <windows.h>
 
#define N 63
 
using namespace std;
 
int main()
{
    FILE *file;
    char arr[N];
    char pitch[16], roll[16], headingt[16],headingm[16];
    file=fopen("Data.txt","r");
 
while(1){
        fscanf(file,"%s | %s | %s | %s |", pitch, roll, headingt, headingm);
        printf("%s", pitch);
        printf("\n");
}
/*while(1)
 
        printf("%s", arr);
    printf("\n");*/
 
    fclose(file);
        system("pause");
    return 0;
}
Я так понимаю, нужно с \n работать как-то, только как правильно, не понимаю.
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.05.2017, 16:50 19
При частое 100 герц ты ничего не увидишь.

Чтобы данные не путались, попробуй так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    FILE *file;
    char arr[N];
    char pitch[16], roll[16], headingt[16],headingm[16];
    char s[100];
    file=fopen("Data.txt","r");
 
    while(1)
    {
        long p = ftell(file);
 
        if (fgets(s, 100, file) != NULL)
        {
            sscanf(s, "%s | %s | %s | %s |", pitch, roll, headingt, headingm);
            printf("%s\n", pitch);
        }
        else
            fseek(file, p, SEEK_SET);
 
    }
 
    fclose(file);
И придумай какой-то способ культурно завершать цикл.
0
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 54
22.05.2017, 19:51  [ТС] 20
Цитата Сообщение от nmcf Посмотреть сообщение
При частое 100 герц ты ничего не увидишь.
Как ни странно, их видно, и достаточно хорошо)
Цитата Сообщение от nmcf Посмотреть сообщение
Чтобы данные не путались, попробуй так:
Большое спасибо, это решило проблему!
Цитата Сообщение от nmcf Посмотреть сообщение
И придумай какой-то способ культурно завершать цикл.
Это не важно) Следующий этап - перевод из char в float и подача float на порт.
0
22.05.2017, 19:51
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.05.2017, 19:51
Помогаю со студенческими работами здесь

Получение и передача данных через COM порт
Добрый день Мне кажется, я изобретаю велосипед и должно быть полно примеров такого кода. Но...

Передача и приём данных через COM порт
Задача такая, нужно через ком порт передавать и принимать пачки байтов, всё это по протоколу modbus...

Передача данных через последовательный порт
Ребят, всем добрый вечер! Предстоит следующая задача: нужно реализовать, например - в отдельном...

Передача и приём данных через COM-порт
Добрый день! Передо мной поставили задачу написать программу для работы с адаптером OBD2 Elm327...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru