无法从Imatic板接收Hex响应

时间:2016-06-05 15:17:38

标签: ubuntu-14.04 netcat hexdump xxd

美好的一天,

这将是漫长的。我正在尝试与“SainSmart iMatic with RJ45”板通信,该板与“SainSmart 16通道12V继电器模块”一起使用。

基本上,我能够成功地向电路板发送十六进制命令,但在需要时无法从电路板接收响应。这是什么意思?

我有一台笔记本电脑,Ubuntu 14.04.4 LTS通过以太网直通电缆直接连接到电路板(不再需要交叉类型)。我有这种类型的网络配置(只有两个设备)。 imatic板的IP固定,192.168.1.4,端口3000.我的笔记本电脑IP固定IP为192.168.1.2,网络掩码为255.255.255.0,没有网关。

我在笔记本电脑中使用netcat(在TCP协议模式下)在终端中以这种格式向主板发送命令: echo'580112000000016C'| xxd -r -p | nc 192.168.1.4 3000 我怎么知道它有效?好吧,基本上来自辅助板的继电器已成功打开(“SainSmart 16通道12V继电器模块”)。

有一个十六进制命令列表可以打开和关闭每个继电器。在上一条指令中,我告诉电路板打开1号继电器,关闭其他15号。字符串'580112000000016C'从十六进制转换为二进制xxd,然后发送到netcat。这部分有效。

唯一不起作用的指令就是这个: echo'580113000000006C'| xxd -r -p | nc 192.168.1.4 3000 此指令仅询问电路板当前哪个继电器处于打开状态,期望以这种格式响应: 28 01 00 00 00 XX XX HH(XX XX 16位,每位代表一个继电器状态,“1”表示开启,“0”表示OFF; HH是所有先前数据的总和,表示它用作校验和)

我已经测试并证明,这不是董事会的问题。我在visual basic中编写了一个代码,windows能够从主板上收到响应,但在我的ubuntu配置中有些错误。 我已经禁用了我的防火墙,ufw。 这不是以太网电缆的问题。 我已经尝试过其他命令表示,例如: echo -n'5801100000000069'| xxd -r -p | nc -v -n -w3 192.168.1.4 3000 | XXD 的 我已经使用netcat扫描电路板中的所有可用端口,并且只有3000端口显示为可用,如制造商所述。 这似乎是一个网络配置问题,但在Windows中,我指定了与ubuntu中相同的IP和网络掩码。

我在这里做什么?

1 个答案:

答案 0 :(得分:0)

Netcat正在等待一个EOF角色,这个角色永远不会被iMatic董事会发送。这就解释了为什么netcat无法收到响应。

另一方面,我写了一个python脚本(Python 2.7.6),它在发送给它的某个指令之后成功地从iMatic板接收数据。这是:

import socket 
import binascii  

IPADDR = '192.168.1.4' 
PORTNUM = 3000 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((IPADDR, PORTNUM)) 
data = '5801100000000069'.decode('hex') 
s.send(data) 
response= s.recv(8) #Buffer needs to be 8 for the fastest response without losing information 
print binascii.hexlify(response) 
s.close() 

您现在可以在没有路由器的情况下使用此板,并通过以太网电缆直接连接到任何计算机。

此致 Bernext。