我目前正在与客户合作,并且已被要求从80年代早期开始使用一些传统的Toledo模块。技术人员给出的手册是8530 DigiTOL INDICATOR
这个过程是通过串行进行的,我正在使用.Net SerialPort类。一切似乎进展顺利。但输出是我无法识别的。我似乎无法实现输出的任何成功编码,也不是使用手册。
我已经更新了一点,也许并希望在正确的方向上。但是输出仍然是垃圾。
代码:
public static void Open(String portName)
{
try
{
serialPort = new SerialPort(portName, 9600, Parity.None, 8, StopBits.One)
{
Handshake = Handshake.None,
DtrEnable = true,
RtsEnable = true,
Encoding = System.Text.Encoding.GetEncoding(28591),
};
serialPort.DataReceived += serialPort_OnDataReceived;
serialPort.ErrorReceived += serialPort_ErrorReceived;
shutdown = false;
serialPort.Open();
Console.WriteLine("Connection open on {0}", portName);
}
catch (Exception ex)
{
Console.WriteLine("Connection failed on {0}. {1}", portName, ex.Message);
}
}
private static void serialPort_OnDataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
Console.WriteLine("Data received...");
StringBuilder b = new StringBuilder();
Encoding encoder = Encoding.Default;
while (serialPort.BytesToRead > 0 || shutdown)
{
b.AppendFormat("{0:x2}", serialPort.ReadByte());
b.AppendFormat(" ");
}
Console.WriteLine(b.ToString());
}
catch (Exception ex)
{
Console.WriteLine("Could not read data from port {0}. {1}", serialPort.PortName, ex.Message);
}
}
然而,如上所述,这仍然是输出不可翻译的数据。
输出示例(十六进制)
在COM1上打开连接
82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35 82 3e 14 16 0b c1 b0 58 58 2c 16 16 0b 0b 35
COM1上的连接已关闭
这转换为:
Á°X X,
五 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,
五 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5 Á°X X,5
以下是具有相同波特率,奇偶校验,数据和停止位的输出PuTTY显示的屏幕截图 http://i58.tinypic.com/mj9yk3.png
更新
所以我和技术人员谈过了。我收到错误。因为我之前无法理解它,并且当时忽略了它。 我收到的所有其他消息都会收到Frame错误。从四处查看,我发现这可能意味着一些事情。波特率不匹配,串行线路太长或串行电缆上有很多电噪声。我可以确认我的软件,窗口和模块都具有相同的设置,即波特率9600,数据位8,奇偶校验无和停止位1.我也可以确认手册,确认这是一个有效的设置。
答案 0 :(得分:1)
技术人员想通了!我们手册不是原版,也许不是我们的确切型号。无论如何,它向我建议波特率为9600,数据位为8,无奇偶校验和1个停止位是有效配置,应该可以工作。这对我们的设备型号来说是错误的,并且显然不受支持(尽管设备已设置且似乎支持9600波特率 - 在设置模式下可用选项。)
看来正确的配置是波特率为4800,7个数据位无奇偶校验和1个停止位。
有了它,它工作得很漂亮,我得到了我正在寻找的数据! :)
谢谢大家。