Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 14.12.2016
Сообщений: 13
1

Управление устройством через COM (RS-232)

20.12.2018, 19:10. Показов 1101. Ответов 13
Метки нет (Все метки)

Помогите пожалуйста .
Имеется Пк и подключенная к нему плата через rs-232 . На плате уже стоит прошивка , и через Serial inpu/out put monitor , она отзывается на команды и делает замеры .
То есть мне нужно отправить на нее команду test, и вывести полученный результат через программу .

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        
SerialPort mySerialPort = new SerialPort("COM3");
 
        mySerialPort.BaudRate = 115200;
        mySerialPort.Parity = Parity.None;
        mySerialPort.StopBits = StopBits.One;
        mySerialPort.DataBits = 8;
        mySerialPort.Handshake = Handshake.None;
        mySerialPort.RtsEnable = true;
 
        mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
 
        mySerialPort.Open();
Как в данный код , добавить отправку команды к плате ?
И получить ответ с выводом на экран .
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2018, 19:10
Ответы с готовыми решениями:

Управление устройством через GPIB
Здравствуйте, реализовал подключение к генератору сигналов через Lan, но также стоит задача...

Управление устройством через USB
Как мне управлять вот такой вот вещью через usb из своей проги? Вот исходник на Borland C++

Программа для роботы с устройством через RS-232
Доброго всем времени суток. Есть устройство, а точнее сканирующий приёмник, которое может...

Управление устройством через USB
Ребят прет увлекаюсь последнее время микроконтроллерами avr хочу собрать схемку чтоб управлять ну...

13
Эксперт .NET
7557 / 5046 / 1202
Регистрация: 25.05.2015
Сообщений: 15,376
Записей в блоге: 14
20.12.2018, 19:27 2
Считывание данных с прибора по COM-порту
Скачать, открыть в студии, изучить, запустить, разобраться как переделать под себя.
0
0 / 0 / 0
Регистрация: 14.12.2016
Сообщений: 13
24.12.2018, 12:42  [ТС] 3
Я дописал следующий кусок кода.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        private void button1_Click(object sender, EventArgs e)
        {
             SerialPort port = new SerialPort("COM3", 115200, Parity.None, 8, StopBits.One); 
             //Создаем com port с необходимыми нам настройками
             try
             {
                 port.Open();
                 port.Write("cal t0");
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.ToString());
             }
 
        }
Команды на плату отправляет , та отзывается . Проверял через программу терминал . Но никак не могу сделать чтение полученных данных и вывод их в TextBox.
Подскажите пожалуйста.
0
165 / 113 / 45
Регистрация: 30.11.2012
Сообщений: 1,213
24.12.2018, 12:55 4
Я тут на днях писал прогу для тестирования ПК (еще не дописал), там реализована работы с COM-портами. Посмотрите, там есть всё, что вам нужно.
0
Миниатюры
Управление устройством через COM (RS-232)  
Вложения
Тип файла: rar pc_test.rar (3.05 Мб, 27 просмотров)
0 / 0 / 0
Регистрация: 14.12.2016
Сообщений: 13
24.12.2018, 13:50  [ТС] 5
Достаточно сложный код , для моего понимания . Все же я только начал понимать C# .
Плюс в ходе манипуляций с кодом, программа стала выдавать ошибку,при попытке повторной отправке команды test . И не знаю толком как это поправить .
https://www.cyberforum.ru/atta... 1545648648
0
165 / 113 / 45
Регистрация: 30.11.2012
Сообщений: 1,213
24.12.2018, 14:40 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
 /// <summary>
        /// Запись с com-порта
        /// </summary>
        public static bool write(string port, string text)
        {
            SerialPort com = new System.IO.Ports.SerialPort();
            try
            {
                com.PortName = port; //Имя порта
                com.Open(); //Открыть com
                byte[] data = Encoding.Unicode.GetBytes(text); //Перевести строку в байты
                com.Write(data, 0, data.Length); //Запись данных в порт
                com.Close();
                return true;
            }
            catch { com.Close(); return false; }
        }
 
//Прослушка порта
bool readWork = true; //Флаг для управления прослушкой
//message - тут данные пришедшие на указанный порт
 void com_read(string port)
        {
            SerialPort com = new System.IO.Ports.SerialPort();
            com.PortName = port; //Имя порта
            com.Open();
            while (readWork)
            {
                string Nullstring = ((char)0x00).ToString();
                byte[] data = new byte[1024];
                string message = string.Empty;
                int numberOfBytesRead;
                while (readWork && com.BytesToRead > 0)
                {
                    numberOfBytesRead = com.Read(data, 0, data.Length);
                    string msgPart = Encoding.Unicode.GetString(data, 0, numberOfBytesRead).Replace(Nullstring, String.Empty);
                    message += msgPart;
                }
                Thread.Sleep(64); 
            }
            com.Close();
        }
0
Avazart
24.12.2018, 15:26
  #7

Не по теме:

Цитата Сообщение от Nalik Посмотреть сообщение
C#
1
Thread.Sleep(64);
Гавнокод ....

0
Nalik
24.12.2018, 15:30
  #8

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
Гавнокод ....
Напиши как правильно

0
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
24.12.2018, 15:34 9
Правильно читать доку и примеры:

https://docs.microsoft.com/en-... work-4.7.2
0
165 / 113 / 45
Регистрация: 30.11.2012
Сообщений: 1,213
24.12.2018, 15:37 10
Добавлено через 53 секунды
Цитата Сообщение от Avazart Посмотреть сообщение
Правильно читать доку и примеры:
https://docs.microsoft.com/en-... work-4.7.2
Это уже информативней, продолжайте в том же духе
0
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
24.12.2018, 15:55 11
И Вам не хворать )
0
165 / 113 / 45
Регистрация: 30.11.2012
Сообщений: 1,213
24.12.2018, 16:09 12
Avazart, кстати говоря если бы вы открыли проект который я приложил, то возможно поняли исходя из комментария, что я просто проводил эксперименты как можно снизить нагрузку на процессор, не претендуя на лучший код по мнению Avazart , проект-то сырой, написан за пару часов в срочном порядке Чтобы не путать ТС комментарий удалил.
C#
1
Thread.Sleep(64); //Посмотреть как будет работать с задержкой
0
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
24.12.2018, 16:34 13
Гавнокод виден не вооруженным взглядом, смысл оправдываться?

Не делайте бесконечные циклы и не нужно будет слипы вставлять.
0
0 / 0 / 0
Регистрация: 14.12.2016
Сообщений: 13
24.12.2018, 16:37  [ТС] 14
Попробовал дописать проект используя доку .
Но он выдает две ошибки , которые я не понимаю .
textBox1 создан в конструкторе .
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        SerialPort com;
 
        // delegate is used to write to a UI control from a non-UI thread
        private delegate void SetTextDeleg(string text);
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            //Проверяем , открыт ли порт перед записью 
            try
            {
                if (!com.IsOpen)
                    com.Open();
 
                com.Write("cal t0");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!");
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            com = new SerialPort("COM3", 115200, Parity.None, 8, StopBits.One);
            com.Handshake = Handshake.None;
            com.ReadTimeout = 500;
            com.WriteTimeout = 500;
            com.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
            com.Open();
            //com.Close(); //Закрываем порт 
 
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            //Проверяем , открыт ли порт перед записью 
            try
            {
                if (!com.IsOpen)
                    com.Open();
 
                com.Write("test");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!");
            }
        }
 
        private static void DataReceivedHandler (object sender,SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            string indata = sp.ReadExisting();
            textBox1.Text = indata;
        }
 
 
    }
}
0
Миниатюры
Управление устройством через COM (RS-232)  
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2018, 16:37

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Управление блоком питания через RS-232
Добрый день! Появилась необходимость управлять блоком питания через пк для автоматизации процесса....

Управление устройством через КОП (GPIB)
В лаборатории измерительной техники у нас много различных устройств: частотомеры, мультиметры,...

Управление устройством на МК ATMega32 через USB
Поиском пользоваться умею, но так ничего путевого не нашел или скорее большую часть прочитанного не...

Управление устройством по хттп
Возникла необходимость сваять устройство из нескольких электродвигателей и управлять ими с...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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