我使用C示例和制造商文档从数据采集模块检索数据。我已经成功地实现了多个功能(例如,请求固件版本、获取/设置系统模式等),但我只能使用一个特定的功能。我认为问题在于如何打包发送到模块的数据。下面是我的最新尝试
def SetSubObject(soc):
tx = struct.pack('hh32sIIHhfBBH', 30, 127, 'test_name', 7, 0xffffffff, 0 , 0x00, 1.0, 0x03, 0x00, 0)
soc.send(tx)
这是行不通的。在关闭插座并重新建立连接之前,模块将失去响应
下面是制造商提供的C示例i
****** header file ******
#define MSG_SET_SUBOBJECT 30
#define MSG_GET_SUBOBJECT 31
typedef struct
{
short msgId;
short id;
char name[32];
unsigned int jobType;
unsigned int variant;
unsigned short kind;
short objectId;
float quantifier;
char sensor_mask;
char event_mask;
unsigned short _1;
}msgSubobject_t;
****************
***** Practical example *********
msgSetSubobject_t msgSetSubobject;
msgSetSubobject.msgId = MSG_SET_SUBOBJECT;
msgSetSubobject.id = 127;
strcpy_s(&(msgSetSubobject.name), "test_name");
msgSetSubobject.jobType = 7;
msgSetSubobject.variant = 0xffffffff; // subobject active on every variant of the VSE
msgSetSubobject.kind = 0;
msgSetSubobject.objectId = 0;
msgSetSubobject.quantifier = 1.0;
msgSetSubobject.sensor_mask = 0x03; // sensor1|sensor2|~sensor3|~sensor4
msgSetSubobject.event_mask = 0x00; // ~IN1|~IN2
msgSetSubobject._1 = 0; // reserved
************
我已经将文档中与我正在研究的内容相关的部分放在一起,请参见下面的链接
我尝试过以多种方式打包数据,并发送稍有不同的数据(例如十六进制格式的数字或十进制、二进制等)。我使用了https://docs.python.org/2/library/struct.html中的格式字符表作为参考
我的Python代码中有没有明显的错误?我注意到制造商文档(在MsgSubobject表中)中有一点,它们似乎指出对象id应该是一个s16
,长度6字节。字节计数从42到48,从对象id到量词。这让我很困惑,因为在C示例中,这个参数被声明为short
----------------编辑添加的更多信息
正如下面的评论中所建议的,我已经尝试使用tcpdump查看实际发送到我试图与之通信的设备的内容。在谷歌搜索之后,我试着:
sudo tcpdump host 192.168.0.1 and port 3321 -vvv -X -qns 0
运行我的代码(打开套接字、发送数据包、关闭套接字)这是我从上面的tcpdump命令中得到的(192.168.0.1端口3321是模块):
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:13:56.847427 IP (tos 0x0, ttl 64, id 62124, offset 0, flags [DF], proto TCP (6), length 60)
192.168.0.3.36648 > 192.168.0.1.3321: tcp 0
0x0000: 4500 003c f2ac 4000 4006 c6ba c0a8 0003 E..<..@.@.......
0x0010: c0a8 0001 8f28 0cf9 0383 467b 0000 0000 .....(....F{....
0x0020: a002 7210 8183 0000 0204 05b4 0402 080a ..r.............
0x0030: 112a c966 0000 0000 0103 0307 .*.f........
15:13:56.847659 IP (tos 0x0, ttl 255, id 58375, offset 0, flags [none], proto TCP (6), length 44)
192.168.0.1.3321 > 192.168.0.3.36648: tcp 0
0x0000: 4500 002c e407 0000 ff06 566f c0a8 0001 E..,......Vo....
0x0010: c0a8 0003 0cf9 8f28 00c7 91b1 0383 467c .......(......F|
0x0020: 6012 0110 a1bc 0000 0204 0110 0000 `.............
15:13:56.847759 IP (tos 0x0, ttl 64, id 62125, offset 0, flags [DF], proto TCP (6), length 40)
192.168.0.3.36648 > 192.168.0.1.3321: tcp 0
0x0000: 4500 0028 f2ad 4000 4006 c6cd c0a8 0003 E..(..@.@.......
0x0010: c0a8 0001 8f28 0cf9 0383 467c 00c7 91b2 .....(....F|....
0x0020: 5010 7210 816f 0000 P.r..o..
15:13:56.848424 IP (tos 0x0, ttl 64, id 62126, offset 0, flags [DF], proto TCP (6), length 96)
192.168.0.3.36648 > 192.168.0.1.3321: tcp 56
0x0000: 4500 0060 f2ae 4000 4006 c694 c0a8 0003 E..`..@.@.......
0x0010: c0a8 0001 8f28 0cf9 0383 467c 00c7 91b2 .....(....F|....
0x0020: 5018 7210 81a7 0000 1e00 7f00 7465 7374 P.r.........test
0x0030: 5f6e 616d 6500 0000 0000 0000 0000 0000 _name...........
0x0040: 0000 0000 0000 0000 0000 0000 0700 0000 ................
0x0050: ffff ffff 0000 0000 0000 803f 0300 0000 ...........?....
15:13:56.848641 IP (tos 0x0, ttl 64, id 62127, offset 0, flags [DF], proto TCP (6), length 40)
192.168.0.3.36648 > 192.168.0.1.3321: tcp 0
0x0000: 4500 0028 f2af 4000 4006 c6cb c0a8 0003 E..(..@.@.......
0x0010: c0a8 0001 8f28 0cf9 0383 46b4 00c7 91b2 .....(....F.....
0x0020: 5011 7210 816f 0000 P.r..o..
15:13:56.848788 IP (tos 0x0, ttl 255, id 58631, offset 0, flags [none], proto TCP (6), length 40)
192.168.0.1.3321 > 192.168.0.3.36648: tcp 0
0x0000: 4500 0028 e507 0000 ff06 5573 c0a8 0001 E..(......Us....
0x0010: c0a8 0003 0cf9 8f28 00c7 91b2 0383 46b5 .......(......F.
0x0020: 5011 0110 b49b 0000 0000 0000 0000 P.............
15:13:56.848857 IP (tos 0x0, ttl 64, id 62128, offset 0, flags [DF], proto TCP (6), length 40)
192.168.0.3.36648 > 192.168.0.1.3321: tcp 0
0x0000: 4500 0028 f2b0 4000 4006 c6ca c0a8 0003 E..(..@.@.......
0x0010: c0a8 0001 8f28 0cf9 0383 46b5 00c7 91b3 .....(....F.....
0x0020: 5010 7210 816f 0000 P.r..o..
^C
7 packets captured
7 packets received by filter
0 packets dropped by kernel
目前没有回答
相关问题 更多 >
编程相关推荐