powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работа с COM портом
25 сообщений из 35, страница 1 из 2
Работа с COM портом
    #38652718
Фотография des1roer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть COM порт, там подцеплено оборудование. Как мне послать на него предположим #10 и считать все что он отправил
...
Рейтинг: 0 / 0
Работа с COM портом
    #38652745
Sergey TSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
des1roer,

SerialPort
...
Рейтинг: 0 / 0
Работа с COM портом
    #38652751
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
using System.IO.Ports;


SerialPort comport = new SerialPort();
string command = "";

//settings
comport.PortName = "COM1";
comport.BaudRate = 9600;
comport.ReadTimeout = 1000;
comport.WriteTimeout = 1000;


 //open com port
 if (!comport.IsOpen)
 {
       comport.Open();
 }

//send message to com port
if (command.Length > 0)
{
         string msg1 = comport.ReadExisting(); //Clear the input buffer
         comport.Write(command);
 }

string str = "";
ReadPortLine(ref str);


private int ReadPortLine(ref string msg)
{
    int newchar = 0;
    try
    {
         //while (!msg.EndsWith("->"))
         while (newchar != -1 || comport.BytesToRead > 0)
         {
                newchar = (int)comport.ReadByte();
                msg += (char)newchar;
         }
    }
    catch (Exception ex)
    {
            //Console.WriteLine("Read Port Line: " + ex.Message);
            return -1;
     }

    return 0;
}
...
Рейтинг: 0 / 0
Работа с COM портом
    #38652789
Фотография des1roer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот пока сделал так

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
        private void Form1_Load(object sender, EventArgs e)
        {
          
            SerialPort port  = new System.IO.Ports.SerialPort("COM2", 9600, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
            
            port.Open();
            port.Write("#10\r");
            System.Threading.Thread.Sleep(100);
 
             if (port.BytesToRead > 0)
             {              
               byte[] data = new byte[8];
               port.Read(data, 0, 8);
               for (int i = 0; i < data.Count(); i++ )
                   label1.Text += " "+ data[i].ToString();
             }
            port.Close();
        }



по сути должен вернуть 8 чисел 0.002 а возвращает 62 45 48 48 46 48 48 50
при чем если порт занят - ничего не возвращает, если иное не #10 отправляю то тоже ничего не возвращает. интересно че за глюк? может он кодит как нить возвращаемое число?
...
Рейтинг: 0 / 0
Работа с COM портом
    #38652813
Sergey TSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
des1roerКак мне послать на него предположим #10...

Что такое "#10"? Delphi-нотация символа с кодом 10? Или строка "#10"? Зачем тогда отсылаете "#10\r"?

Еще не понятна фраза:
des1roerпо сути должен вернуть 8 чисел 0.002
Восемь дробных чисел 0.002 должен вернуть?

Чему равен port.BytesToRead?
...
Рейтинг: 0 / 0
Работа с COM портом
    #38652821
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
if (port.BytesToRead > 0)
             {              

               port.Read(data, 0, port.BytesToRead ;

             }



Хотя бы так для начала.

Если устройство отзывается - это уже хорошо. Дальше читайте документацию к нему, что и когда оно должно отвечать.
...
Рейтинг: 0 / 0
Работа с COM портом
    #38652824
Sergey TSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
des1roer,

Кстати, он вернул вам, если перевести:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
62 >
45 -
48 0
48 0
46 .
48 0
48 0
50 2
...
Рейтинг: 0 / 0
Работа с COM портом
    #38652826
Фотография des1roer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть некий прибор, нужно его опрашиватьи получать с него данные. вот "#10" - это обращение к нему. это запрос , который я должен передать. в программе(левой ) я могу сам написать и получить отклик
-> #10
>-00.002-00.002-00.002-00.002-00.002-00.002-00.002-00.002 234ms
нужно также в с# отправить ему это #10. пишу "#10\r" потому что \r - конец строки и при этом он хоть что то выдает. при любом другом написании ничего не отдает
...
Рейтинг: 0 / 0
Работа с COM портом
    #38652828
Фотография des1roer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey TSV как ты это перевел? все правильно он вернул значит
...
Рейтинг: 0 / 0
Работа с COM портом
    #38652829
Sergey TSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так попробуйте:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
        private void Form1_Load(object sender, EventArgs e)
        {
          
            SerialPort port  = new System.IO.Ports.SerialPort("COM2", 9600, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
            
            port.Open();
            port.Write("#10\r");
            System.Threading.Thread.Sleep(100);
 
             if (port.BytesToRead > 0)
             {              
               byte[] data = new byte[port.BytesToRead];
               port.Read(data, 0, port.BytesToRead);
               for (int i = 0; i < data.Count(); i++ )
                   label1.Text += " "+ data[i].ToString();
             }
            port.Close();
        }
...
Рейтинг: 0 / 0
Работа с COM портом
    #38652831
Sergey TSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
des1roer,

Смотри значения asccii
...
Рейтинг: 0 / 0
Работа с COM портом
    #38652837
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
des1roer
Код: c#
1.
System.Threading.Thread.Sleep(100);


Ацкая хрень.

Код: 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.
using System;
using System.IO.Ports;

class PortDataReceived
{
    public static void Main()
    {
        SerialPort mySerialPort = new SerialPort("COM1");

        mySerialPort.BaudRate = 9600;
        mySerialPort.Parity = Parity.None;
        mySerialPort.StopBits = StopBits.One;
        mySerialPort.DataBits = 8;
        mySerialPort.Handshake = Handshake.None;

        mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

        mySerialPort.Open();

        Console.WriteLine("Press any key to continue...");
        Console.WriteLine();
        Console.ReadKey();
        mySerialPort.Close();
    }

    private static void DataReceivedHandler(
                        object sender,
                        SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        string indata = sp.ReadExisting();
        Console.WriteLine("Data Received:");
        Console.Write(indata);
    }
}


Здесь
...
Рейтинг: 0 / 0
Работа с COM портом
    #38652838
Фотография des1roer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как смотреть? в notepad++ перевожу
48 hex>asci H
48 asci>hex 3438
...
Рейтинг: 0 / 0
Работа с COM портом
    #38652842
Sergey TSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
des1roer,

Выше написанное EDUARD SAPOTSKI должно сработать.
А смотреть, набери в поисковике "коды ascii" и смотри численное значение и его эквивалента символа.
...
Рейтинг: 0 / 0
Работа с COM портом
    #38652886
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey TSVdes1roer,

Выше написанное EDUARD SAPOTSKI должно сработать.
А смотреть, набери в поисковике "коды ascii" и смотри численное значение и его эквивалента символа.

или привести к (char)
...
Рейтинг: 0 / 0
Работа с COM портом
    #38652887
Фотография des1roer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
private void Form1_Load(object sender, EventArgs e)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
        {

            SerialPort port = new System.IO.Ports.SerialPort("COM2", 9600, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
      
            port.Open();
            port.Write("#10\r");
            System.Threading.Thread.Sleep(100);

            if (port.BytesToRead > 0)
            {
                byte[] data = new byte[port.BytesToRead];
                port.Read(data, 0, port.BytesToRead);     
                ASCIIEncoding ascii = new ASCIIEncoding();
                String decoded = ascii.GetString(data);
                label2.Text = decoded;
            }        
            port.Close();        

        }


вот таким видом нормально возвращает
...
Рейтинг: 0 / 0
Работа с COM портом
    #38652893
Фотография des1roer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сейчас попробую с пример msdn разобраться. но по сути мне бы сделать таймер да раз в полминуты обращаться к оборудованию. мне кажется, что данные всяко разно вернутся
...
Рейтинг: 0 / 0
Работа с COM портом
    #38653107
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
des1roerсейчас попробую с пример msdn разобраться. но по сути мне бы сделать таймер да раз в полминуты обращаться к оборудованию. мне кажется, что данные всяко разно вернутся
-1

Используйте евент mySerialPort.DataReceived как вам посоветовали,
ваши проблемы уже давно решены, не надо велосипеды строить....
...
Рейтинг: 0 / 0
Работа с COM портом
    #38653152
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129-1


Если на ком-порте сеть RS-485 и множество устройств, то подход с событием проблематичен, т.к. нужно продолжить опрос других устройств по таймауту (если одно из них не ответило).
...
Рейтинг: 0 / 0
Работа с COM портом
    #38653159
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisD129-1


Если на ком-порте сеть RS-485 и множество устройств, то подход с событием проблематичен, т.к. нужно продолжить опрос других устройств по таймауту (если одно из них не ответило).и чо? 485-й подразумевает идентификацию комманд.
...
Рейтинг: 0 / 0
Работа с COM портом
    #38653173
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortibransaи чо? 485-й подразумевает идентификацию комманд.

При чем тут идентификация команд?
...
Рейтинг: 0 / 0
Работа с COM портом
    #38653187
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallarisfortibransaи чо? 485-й подразумевает идентификацию комманд.

При чем тут идентификация команд?А причем тогда 485-й. Я всегда с ним асинхронно работаю и что?
Если есть вероятность что устройство будет неожиданно присылать огрызки ответов, то зачем такому устройству 485-й?
...
Рейтинг: 0 / 0
Работа с COM портом
    #38653199
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortibransaЕсли есть вероятность что устройство будет неожиданно присылать огрызки ответов, то зачем такому устройству 485-й?

Сгорело одно из устройств, например.

Ну я тоже асинхронно работаю в отдельном потоке, но без событий - мне нужно сразу перейти к опросу другого устройства, если первое не ответило в течении таймаута.
...
Рейтинг: 0 / 0
Работа с COM портом
    #38653205
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisfortibransaЕсли есть вероятность что устройство будет неожиданно присылать огрызки ответов, то зачем такому устройству 485-й?

Сгорело одно из устройств, например.

Ну я тоже асинхронно работаю в отдельном потоке, но без событий - мне нужно сразу перейти к опросу другого устройства, если первое не ответило в течении таймаута.Таки-да. Команды "сыпятся" из очереди обертки класса COM порта и пока не ответит или не истечет таймаут след. команда не извлекается из очереди и тут ни чего не мешает использовать события. Да и есть еще "первоочередная" очередь, для посылки команд управления.
...
Рейтинг: 0 / 0
Работа с COM портом
    #38653207
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallarisмне нужно сразу перейти к опросу другого устройства, если первое не ответило в течении таймаута.
И чо? Дал запрос, подписался на приход, запустил таймер, нет ответа - отписался от прихода, делаем запрос другому девайсу.
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работа с COM портом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]