2009-12-04 79 views
0

我有一个程序通过串口发送ASCII命令给设备。该计划是一个演示,并没有做我想要的。c#ascii协议问题

我只是想让设备在C#中响应,我没有得到任何回报。 所有的串口设置都是正确的。 我发送与演示软件完全相同的信息。

//e.g message <STX>ABC<EOT> 

byte[] msg = new byte[5]; 

msg[0] = 0x02; 
msg[1] = 0x41; 
msg[2] = 0x42; 
msg[3] = 0x43; 
msg[4] = 0x04; 
comport.write(msg, 0,msg.length) 

设备是显示器。代码只是一个例子。没有心跳只是对发送的正确消息或错误消息的响应。这些设置是标准的9600-8-N-1。 “引脚2和3之间的回形针(TX和RX)。”是的,我知道电缆的工作原理,因为它与产品软件一起使用。并且即时回复我发送的内容。我已经使用了一个虚拟的com程序,一切似乎都没问题。 “6字节,但只初始化第5个字母。”对不起,错字。

SerialPort.DtrEnable和RtsEnable属性为true。在c#中默认开启。我已经尝试了超级终端,并没有得到任何答复。我发送了\ r和\ n没有运气。

+3

太模糊。什么是设备?演示的来源是什么?设备是否有状态指示灯或其他指示灯表示它正在接收您认为正在发送的输入信号?等等 – jason

+3

什么是设备?什么是协议?假设返回什么?设备文档说什么?换句话说,需要更多信息。 – 2009-12-04 16:42:27

+0

这不包含任何可以帮助诊断问题的信息......“comport”的类型是什么以及它是如何初始化的?你怎么知道串口设置是正确的? –

回答

2

C# Tutorial on Serial Port Communication应该能够提供帮助。我不确定是否通过C#中的赋值在十六进制和字节之间有适当的内在种姓。这可能是你的问题的根源。

设备心跳

是否该设备发送一个或DC2响应DLE(心跳)?如果是这样,请尝试使用基本的9600-8-N-1设置在超级终端中打开COM端口,然后查看是否有任何东西。当您尝试发送命令时是否有任何STX,SYN,ETX命令发回?我不确定您尝试与之通信的硬件的命令集实现。

正在检查COM端口操作

你检查,如果你的COM端口是否工作正常?您可以通过在引脚2和3之间插入回形针(TX和RX)来创建回送。这将环回您的COM端口,并且在超级终端中您可以打开该COM端口和类型。角色会回显。

您还可以使用名为com0com的软件创建虚拟COM端口,以在您实际发送之前测试您发送的内容。

它提供了通过nullmodem连接链接的虚拟COM端口对。然后你可以使用你喜欢的终端应用程序或任何你喜欢的发送数据到一个COM端口,并从另一个接收

没有任何具体信息,我们将抓住吸管。

1

你分配和发送6个字节,但只有初始化第5

另外,根据你写的,你做正确的一切,完全按照演示程序。对?然后我只能看到一个解决方案:设备正在拉你的腿!

严重:如果一个程序有效,而您没有,那么必须有一些区别。

+0

我会说“分配6个字节,但只初始化5”是第一个要解决的问题;该设备可能会将所有六个字节解释为消息并判定它无效。 – qid

+0

当然,它没有给出'msg.Length',它会是6,所以无论它们的值如何,它都会发送6个字节。 –

+0

EOT将显示消息的结尾..其余为垃圾。任何值得其重量的设备都会忽略其余的设备。 – 2009-12-04 19:22:49

1

到目前为止,最常见的错误是忘记打开硬件握手信号。如果设备认为主机已关闭,设备将不会发送任何内容。确保将SerialPort.DtrEnable和RtsEnable属性设置为true。

如前所述,修复数组大小。虽然它可能不会帮助,但STX角色确保垃圾被扔掉。

检查Windows超级终端小应用程序的基本硬件是否正常。您可以通过输入Ctrl + B,ABC,Ctrl + D发送您尝试传输的消息。

0

正如其他人所建议的,最好是检查使用某种终端软件发送和接收的内容。我已成功使用“realterm” - 它具有很好的ascii或二进制/十六进制视图。

0

由于您正在使用ASCII,另一个问题可能是您没有发送正确的行终止字符。有些设备预计\r和其他\n。确保你正确设置。

+0

我明白你的意思,但是用EOT你不需要它。 – 2009-12-04 19:16:09

+0

我会对此表示赞同。我知道我使用过的一些设备需要使用内部命令解析的字符才能正常工作。 –

+0

@Erich:我在刷卡阅读器上看过它,他们每次刷卡时都会发送一个CR-LF(您可以解析以查看行尾),但是我从未将它发送到任何设备(收据打印机,售票机,隐藏读卡器等)。因人而异 – 2009-12-04 19:33:32

0

该设备是一个监视器。代码只是一个例子。 没有心跳只是对发送的正确消息或错误消息的响应。 的设置是标准9600-8-N-1。 “引脚2和3之间的回形针(TX和RX)。”是的,我知道电缆的工作原理,因为它与产品软件一起使用。并且即时回复我发送的内容。我已经使用了一个虚拟的com程序,一切似乎都没问题。 “6字节,但只初始化第5个字符。”对不起的错字。

SerialPort.DtrEnable和RtsEnable属性为true。在c#中默认开启。 我已经尝试了超级终端,并没有得到任何答复。 我发送了\ r和\ n没有运气。