C# 串行数据发送不正确

C# 串行数据发送不正确,c#,serial-port,rs485,C#,Serial Port,Rs485,我正在编写一个使用USB到RS485适配器控制VFD的程序 我遇到的问题是,当我试图发送命令时,VFD会瞬间闪烁 为了更深入地检查,我想我应该通过运行一个环回测试(将传输引脚连接到接收引脚,并检查发送的数据是否也被接收)来测试我的USB到RS485转换器 使用各种串行测试应用程序,我能够验证它是否工作。我会发送数据,并显示它已发送和接收 但是,它对我正在编写的程序不起作用。当程序启动时,我收到一些发送/接收信号,上面写着“.enq.”。然而,当程序运行时,它显示数据已发送,但从未显示数据已接收。

我正在编写一个使用USB到RS485适配器控制VFD的程序

我遇到的问题是,当我试图发送命令时,VFD会瞬间闪烁

为了更深入地检查,我想我应该通过运行一个环回测试(将传输引脚连接到接收引脚,并检查发送的数据是否也被接收)来测试我的USB到RS485转换器

使用各种串行测试应用程序,我能够验证它是否工作。我会发送数据,并显示它已发送和接收

但是,它对我正在编写的程序不起作用。当程序启动时,我收到一些发送/接收信号,上面写着“.enq.”。然而,当程序运行时,它显示数据已发送,但从未显示数据已接收。我不确定这是否是我设置串行端口时的错误

这是我的设置代码

        public MITCOM(IniFile INI_in)
    {
        itsINI = INI_in;
        itsName = itsINI.ReadCheckDefault("MITSUBISHI", "Port", "COM4");
        itsBaudRate = Convert.ToInt16(itsINI.ReadCheckDefault("MITSUBISHI", "BaudRate", "19200"));
        itsDataBits = Convert.ToInt16(itsINI.ReadCheckDefault("MITSUBISHI", "DataBits", "8"));
        switch (itsINI.ReadCheckDefault("MITSUBISHI", "Parity", "Even"))
        {
            case "Even":
                itsParity = Parity.Even;
                break;
            case "Odd":
                itsParity = Parity.Odd;
                break;
            default:
                itsParity = Parity.Even;
                itsINI.WriteValue("MITSUBISHI", "Parity", "Even");
                break;
        }
        switch(itsINI.ReadCheckDefault("MITSUBISHI", "StopBits", "2"))
        {
            case "1":
                itsStopBits = StopBits.One;
                break;
            case "2":
                itsStopBits = StopBits.Two;
                break;
            default:
                itsStopBits = StopBits.Two;
                itsINI.WriteValue("MITSUBISHI", "StopBits", "2");
                break;
        }     

        itsPort = new SerialPort(itsName, itsBaudRate, itsParity, 8, itsStopBits);
        itsPort.Open();
下面是它用来发送消息的代码:

    public void A1(string _instruction, byte WAIT, Int16 Data)
    {
        var Bytes = new List<byte>();
        Bytes.Add(Control_Code.ENQ);
        Bytes.AddRange(Encoding.ASCII.GetBytes("00"));
        Bytes.AddRange(Encoding.ASCII.GetBytes(_instruction));
        Bytes.AddRange(Encoding.ASCII.GetBytes(WAIT.ToString("X")));
        Bytes.AddRange(Encoding.ASCII.GetBytes(Data.ToString("X2")));
        int SUM = 0;
        for(int i = 1; i < 8; i++)
        {
            SUM += Bytes[i];
        }
        SUM &= 0xFF;
        Bytes.AddRange(Encoding.ASCII.GetBytes(SUM.ToString("X2")));
        Bytes.Add(Control_Code.CR);
        itsPort.Write(Bytes.ToArray(), 0, 11);
    }
public void A1(字符串_指令、字节等待、Int16数据)
{
var Bytes=新列表();
添加(控制代码ENQ);
Bytes.AddRange(Encoding.ASCII.GetBytes(“00”);
AddRange(Encoding.ASCII.GetBytes(_指令));
AddRange(Encoding.ASCII.GetBytes(WAIT.ToString(“X”));
Bytes.AddRange(Encoding.ASCII.GetBytes(Data.ToString(“X2”)));
整数和=0;
对于(int i=1;i<8;i++)
{
总和+=字节[i];
}
总和&=0xFF;
AddRange(Encoding.ASCII.GetBytes(SUM.ToString(“X2”));
添加(控制代码.CR);
写入(Bytes.ToArray(),0,11);
}
重申:

-通过第三方软件(免费设备监控工作室(FDMS))发送时,环回测试成功 -启动我的软件时,我会收到一些.enq.消息。 -当我的程序尝试发送数据时,FDM显示数据已发送,但未接收


非常感谢您提供的任何帮助!

您的设备的消息格式是什么?您还需要验证端口设置是否符合设备的预期。是的,ReadCheckDefault()函数检查ini文件中是否存在该值。如果存在,则从ini中读取该值。如果不存在,则使用指定的默认值。默认值基于VFD的默认值。已验证两者是否匹配。但是,它仍然无法解释适配器直接循环到o中时,为什么不接收发送的数据n本身。不排除USB适配器,我过去在USB适配器上遇到过问题,我通常在我的系统上使用串行端口和协议转换器。是的,这就是我听到的。我根据最好的评论选择了这个。