通过C#将十六进制数据发送到串口 [英] Sending hex data to serial port via C#

查看:100
本文介绍了通过C#将十六进制数据发送到串口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将十六进制数据发送到串口,我已经连接了数据记录器,并且该数据记录器的响应已经被编码。

所以我只需要发送正确的十六进制数据以便获得该输出并将其显示在控制台上。



代码正在编译但没有收到数据。



我尝试过:



使用System; 
使用System.Collections.Generic;
使用System.IO;
使用System.IO.Ports;
使用System.Linq;
使用System.Text;
使用System.Threading.Tasks;

namespace SerialPortHexCommunication
{
public class Program
{
static void Main(string [] args)
{

SerialPort port = new SerialPort();
port.PortName =COM5;
port.Parity = Parity.None;
port.BaudRate = 9600;
port.DataBits = 8;
port.StopBits = StopBits.One;
// port.Handshake = Handshake.RequestToSend;
// port.ReceivedBytesThreshold = 8;
if(port.IsOpen)

{
port.Close();
port.Dispose();
}

byte [] bytesToSend = new byte [6] {0xD0,0xF2,0xFF,0x00,0x06,0xC7}; // $ D0 $ F2 $ FF $ 00 $ 06 $ C7
port.Open();
port.Write(bytesToSend,0,bytesToSend.Length);



port.DataReceived + = new SerialDataReceivedEventHandler(DataReceivedHandler);
port.Close();
port.Dispose();

}

private static void DataReceivedHandler(object sender,SerialDataReceivedEventArgs e)
{
SerialPort port =(SerialPort)sender;

int bytes = port.BytesToRead;
byte [] buffer = new byte [bytes];

if(port.BytesToRead> 1)
{

port.Read(buffer,0,bytes);
}

foreach(缓冲区中的字节项)
{
Console.WriteLine(item);
Console.ReadKey();
}

// string indata = port.ReadExisting();
//Console.WriteLine(\"Data received);
//Console.WriteLine(indata);
//Console.ReadKey();
}
}
}

解决方案

D0


F2

FF

I am trying to send the hex data to serial port where i have connected data logger and the response of that data logger has already been coded.
so I just need to send the correct hex data so that to get that output and display it on the console.

The code is compiling but there is no data received.

What I have tried:

using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SerialPortHexCommunication
{
    public class Program
    {
        static void Main(string[] args)
        {

            SerialPort port = new SerialPort();
            port.PortName = "COM5";
            port.Parity = Parity.None;
            port.BaudRate = 9600;
            port.DataBits = 8;
            port.StopBits = StopBits.One;
           // port.Handshake = Handshake.RequestToSend;
           // port.ReceivedBytesThreshold = 8;
            if (port.IsOpen)

            {
                port.Close();
                port.Dispose();
            }
            
            byte[] bytesToSend = new byte[6] { 0xD0,0xF2,0xFF,0x00,0x06,0xC7 };  //$D0 $F2 $FF $00 $06 $C7
            port.Open();
             port.Write(bytesToSend,0,bytesToSend.Length);


         
            port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
            port.Close();
            port.Dispose();

        }

        private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort port = (SerialPort)sender;

            int bytes = port.BytesToRead;
            byte[] buffer = new byte[bytes];

            if (port.BytesToRead > 1)
            {
              
                port.Read(buffer, 0, bytes);
            }

            foreach (byte item in buffer)
            {
                Console.WriteLine(item);
                Console.ReadKey();
            }

            //string indata = port.ReadExisting();
            //Console.WriteLine("Data received");
            //Console.WriteLine(indata);
            //Console.ReadKey();
        }
    }
}

解决方案

D0


F2


FF


这篇关于通过C#将十六进制数据发送到串口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆