1

再会,

这会很长。我正在尝试与“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-Channel 12V Relay Module”)。

有一个十六进制命令列表可以打开和关闭每个继电器。在前面的说明中,我告诉电路板打开 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" 表示关闭;HH 是之前所有数据的总和,表示它用作校验和)

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

我在这里想念什么?

4

1 回答 1

1

Netcat 正在等待 iMatic 板永远不会发送的 EOF 字符。这就解释了为什么 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。

于 2016-06-09T03:13:44.670 回答