c# - 使用C#通过RS232发送数据

标签 c# serial-port

我有一个可以通过 RS232 进行通信的设备。它带有访问数据的通信协议(protocol)。

我正在编写一个简单的 C# 程序来连接并获取设备的状态,但我不太确定我是否走在正确的路径上。

下面是他们给出的示例。

命令 50:状态请求

状态请求命令用于请求注册响应包,后续操作不会改变系统的状态。

0 1 2 3 4 5 6 7 8 9 10 11 12 13
STX 地址 地址 CMOD "5""0""0""3"TKN1 TKN0 类型 CHKL CHKH 0X0D

STX = 帧的起始字节 (0x02)

ADDR = TE550逻辑地址[2字节]

CMOD = CMOD 引用 [1 字节]
TKN1/0 = 帧标识字节 [2 字节]

TYPE = 可定制框的选择字节 (RiqA/B)* [1 字节]

CHKH/L = 校验和 [2 字节]

END = 帧的结束字节 (0x0D)

示例: PC到TE550的状态请求(地址01),CMOD 1, token 01,类型1

[0x02]0115003011EE[0x0D]

我可以使用串行端口连接到 com 端口。

我指的是DesMy的回答“RS232 serial port communication c# win7 .net framework 3.5 sp1

到目前为止,一旦写入 COM 端口,我就没有收到任何信号。但是我不太确定我是否将正确的数据发送到 com 端口。目前我发送的数据如下

comPort.Write("20115003011EE3");

任何帮助/示例代码等将不胜感激。

公共(public)无效ConnectRS232()

    {
        try
        {
            SerialPort mySerialPort = new SerialPort("COM1");

            mySerialPort.BaudRate = 9600;
            mySerialPort.Parity = Parity.None;
            mySerialPort.StopBits = StopBits.One;
            mySerialPort.DataBits = 8;
            mySerialPort.Handshake = Handshake.None;
            mySerialPort.ReadTimeout = 2000;
            mySerialPort.WriteTimeout = 500;

            mySerialPort.DtrEnable = true;
            mySerialPort.RtsEnable = true;

            mySerialPort.Open();



            mySerialPort.DataReceived += DataReceivedHandler;

          mySerialPort.Write("20115003011EE3");

        }
        catch (Exception ex)
        {
            textBox1.Text = ex.Message;    
        }

    }

    public void DataReceivedHandler(object sender,SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        System.Threading.Thread.Sleep(500);
        string indata = sp.ReadExisting();
        this.BeginInvoke(new SetTextDeleg(DisplayToUI), new object[] { indata });


    }

    private void DisplayToUI(string displayData)
    {
        textBox1.Text += displayData.Trim();


    }

最佳答案

处理低级端口 I/O 时,字符不是字节!

不发送字符串。创建包含正确字符的字节流并将其发送。

[在 .NET 中,字符是短字符,而不是字节。没关系。使用字节。]

关于c# - 使用C#通过RS232发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25235071/

相关文章:

Java 串行通信 API - 如果发生超时,inputstream.read() 返回什么?

java - 如何检查输入流是否不包含数据?

无法在 Mac 上打开 tty USB 端口文件或 su USB 端口文件

c# - 将纳秒转换为日期时间

c# - 按两个标准 C# 对列表进行分组

python - Python中的半双工串行通信

c# - 连接或断开时检测 USB 到 RS232 转换器

c# - 如何对具有日期时间值但显示为字符串的 DataGridView 列进行排序?

C# 函数式编程 : how to treat IO in CRUD?

java - Java 和 .Net 4.6 为同一 key 生成不同的 JSON Web 加密 (JWE) token