我正在开发一个使用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);
}
重申:
- 通过第三方软件(免费设备监控工作室(FDMS))发送时,后续测试成功 - 启动我的软件时,我得到一些.enq。消息。 - 当我的程序尝试发送数据时,FDMS显示数据已发送,但未收到。
非常感谢你们给予的任何帮助!