Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 13.09.2014
Сообщений: 118
.NET 4.x

Нужно перевести данные с com порта в нормальный вид

27.02.2018, 15:11. Показов 1156. Ответов 6

Студворк — интернет-сервис помощи студентам
Есть датчик нагрузки, он передает данные на COM порт в виде как на рисунке.(нагрузка по трем осям и моменты по трем осям)


Моя программа считывает данные как на рис 2.

Как исправить код, чтобы было 6 столбцов как на первом рисунке и числовые данные?
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.IO;
 
namespace ERNC_COMPort
{
    public partial class Form1 : Form
    {
        string str;
        delegate void SetTextCallback(string text);
        public Form1()
        {
            InitializeComponent();
        }
//поле вывода инфы с порта
        private void SetText(string text)
        {
            if (this.textBox1.InvokeRequired)
            {
                SetTextCallback d = new SetTextCallback(SetText);
                this.Invoke(d, new object[] { text });
            }
            else
            {
                textBox1.Text += text + @"\r\n";
            }
        }
//инфа о порте
        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                string[] availablePorts = SerialPort.GetPortNames();
                foreach (string port in availablePorts)
                {
                    comboBox5.Items.Add(port);
                }
                comboBox5.Text = comboBox5.Items[0].ToString();
                comboBox4.Text = "1";
                serialPort1.StopBits = StopBits.One;
                serialPort1.DataBits = 8;
                serialPort1.BaudRate = 9600;
                serialPort1.PortName = comboBox5.Text;
                serialPort1.Parity = Parity.None;
                serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
                groupBox2.Visible = false;
            }
            catch (Exception e9)
            {
                MessageBox.Show(e9.Message);
            }
        }
//получение инфы
        void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {   byte[] b = new byte[4000];
                serialPort1.Read(b, 0, b.Length);
                SetText(Encoding.ASCII.GetString(b));
            }
            catch (Exception e3)
            {
                MessageBox.Show(e3.Message);
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                serialPort1.Open();
                if (serialPort1.IsOpen)
                {   groupBox2.Visible = true;                   
                    button1.Enabled = false;
                    button5.Enabled = true;
                }
            }
            catch (Exception e1)
            {
                MessageBox.Show(e1.Message);
            }
        }
//выбираем порт
        private void comboBox5_SelectedIndexChanged(object sender, EventArgs e)
        {
            comboBox5.Text = comboBox5.SelectedItem.ToString();
            serialPort1.PortName = comboBox5.Text;
        }
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            comboBox1.Text = comboBox1.SelectedItem.ToString();
            serialPort1.BaudRate = Int32.Parse(comboBox1.Text);
        }
        private void button5_Click(object sender, EventArgs e)
        {
            try
            {
                serialPort1.Close();
                if (!serialPort1.IsOpen)
                {
                    button1.Enabled = true;
                    button5.Enabled = false;
                    groupBox2.Visible = false;                    
                    textBox1.Text = "";                    
                }
            }
            catch (Exception e2)
            {
                MessageBox.Show(e2.Message);
            }
        }
        private void button3_Click(object sender, EventArgs e)
        {
            BinaryWriter bw = null;
            FileStream fs = null;
            try
            {
                string tmp = DateTime.Now.ToString().Replace(":", "_");
                tmp = tmp.Replace(".", "_");
                tmp = tmp.Replace(" ", "_");
                fs = File.Open(@"r_" + tmp + ".txt", FileMode.CreateNew, FileAccess.Write);
                bw = new BinaryWriter(fs);
                bw.Write(textBox1.Text);
                MessageBox.Show("Успешно!");
            }
            catch (Exception e4)
            {
                MessageBox.Show(e4.Message);
            }
            finally
            {
                bw.Close();
                fs.Close();
            }
        }
        private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (comboBox3.Text == "нет")
                {
                    serialPort1.Parity = Parity.None;
                }
                else if (comboBox3.Text == "четный")
                {
                    serialPort1.Parity = Parity.Even;
                }
                else if (comboBox3.Text == "нечетный")
                {
                    serialPort1.Parity = Parity.Odd;
                }
                else serialPort1.Parity = Parity.None;
            }
            catch (Exception e6)
            {
                MessageBox.Show(e6.Message);
            }
        }
        private void comboBox4_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (comboBox4.Text == "1")
                {
                    serialPort1.StopBits = StopBits.One;
                }
                else if (comboBox4.Text == "2")
                {
                    serialPort1.StopBits = StopBits.Two;
                }
            }
            catch (Exception e8)
            {
                MessageBox.Show(e8.Message);
            }
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.02.2018, 15:11
Ответы с готовыми решениями:

Excel: перевести введенную дату в нормальный вид
Здравствуйте) Не могу решить эту задачу В ячейки вводятся даты и время без точек, перевести в нормальный вид.(с помощью кнопки) ...

как из Unixtime чрез PHP перевести в нормальный вид
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf8"> <title>Страница управления</title> <link...

Прочитать данные из порта и преобразовать в читаемый вид
Помогите, пожалуйста, решить проблему. Уже второй день бьюсь, перегуглил все, но ответ так и не нашел. В общем ситуация такая: посылаю...

6
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
27.02.2018, 15:20
Данные в порт передаются скорее всего в бинарном виде, следовательно и читать их нужно как таковые, а не как текст...
Какой там именно формат данных вам лучше знать...
0
0 / 0 / 0
Регистрация: 13.09.2014
Сообщений: 118
27.02.2018, 15:54  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {   byte[] b = new byte[4000];
                serialPort1.Read(b, 0, b.Length);
                string s = BitConverter.ToString(b);
                int i = Convert.ToInt32(s);
                SetText(Convert.ToString(i, 2));
 
                
            }
            catch (Exception e3)
            {
                MessageBox.Show(e3.Message);
            }
        }
Пишет, что входная строка имеет неверный формат
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
27.02.2018, 16:55
Winchesterous, у вас в таком случае должно быть описание протокола обмена с устройством. Что в нем говорится, какой формат запросов и ответов?
0
0 / 0 / 0
Регистрация: 13.09.2014
Сообщений: 118
27.02.2018, 17:24  [ТС]
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
27.02.2018, 17:30
Ну вот, значит и читайте данные как 16 битные знаковые числа, а не float как у вас на скриншоте.
0
0 / 0 / 0
Регистрация: 13.09.2014
Сообщений: 118
01.03.2018, 17:41  [ТС]
Если бы я знал как это написать, то не спрашивал бы)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.03.2018, 17:41
Помогаю со студенческими работами здесь

Нужно перевести в математический вид
(x+4)/3./x+sqrt(abs(x))/2.*x+1.0e-6*pow(x,1./3.)

Нужно перевести документацию факультета/деканата в электронный вид
вопрос к экспертам :)) нужно перевести документацию факультета/деканата в электронный вид. При этом там уже используется база данных...

Связываться ли с VBA? (нужно перевести документацию факультета/деканата в электронный вид)
вопрос к экспертам :)) извините за кросспоситнг (с VB). нужно перевести документацию факультета/деканата в электронный вид. При этом там...

Нужно получать данные с СОМ порта по событию
Здравствуйте. Я с VB недавно работаю так вот, мне нужно получать данные с СОМ порта по событию, а не периодически проверяя порт. Событие...

Нужно написать программу преобразующую данные в машинный вид
Нужно написать маленькую программку которая преобразует разные типы данных в машинный код (двоичной системе счисления)..... Тоесть с...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru