背景我正在使用python-seabreeze与光谱仪交谈。一些但不是所有可用命令都在 python-seabreeze 中实现。从OceanOptics Flame-T手册中可以看到有如下命令(举例):..0x09 Request Spectra0x0A Set Trigger Mode0x0B Query number of Plug-in Accessories Present0x0C Query Plug-in Identifiers0x0D Detect Plug-ins0x12 LED Status0x60 General I2C Read0x61 General I2C Write0x62 General SPI I/O0x68 PSOC Read0x69 PSOC Write0x6A Write Register Information0x6B Read Register Information0x6C Read PCB Temperature0x6D Read Irradiance Calibration..从seabreeze/pyseabreeze/protocol.py我可以看到这些命令是这样形成的:import functoolsimport struct
msgs = {
code: functools.partial(struct.Struct(msg).pack, code) for code, msg in { 0x01: "<B", # OP_INITIALIZE
0x02: "<BI", # OP_ITIME
0x03: "<BH", # set Strobe/Lamp enable Line
0x05: "<BB", # OP_GETINFO
0x09: "<B", # OP_REQUESTSPEC
0x0A: "<BH", # OP_SETTRIGMODE
0x6A: "<BBH", # OP_WRITE_REGISTER
0x6B: "<BB", # OP_READ_REGISTER
0x71: "<BBB", # OP_TECENABLE_QE
0x72: "<B", # OP_READTEC_QE
0x73: "<Bh", # OP_TECSETTEMP_QE
0xFE: "<B", # OP_USBMODE
}.items()
} # add more here if you implement new features例如Request Spectra,根据手册是0x09,当它来自 python 时,一条消息struct.Struct('<B').pack(0x09)已发送。我试图通过阅读struct format strings来了解发生了什么,我发现这<意味着“小端”, B意味着无符号字符,h意味着短,等等。题从手册中应该如何知道格式是,而格式OP_GETINFO是?这是什么逻辑?你会把什么格式和为什么?<BBOP_WRITE_REGISTER<BBH0x6C Read PCB Temperature
1 回答

慕田峪4524236
TA贡献1875条经验 获得超5个赞
似乎您需要阅读需要使用哪些参数才能发送合法命令,该协议仅定义了您希望发送的一些项目,例如:
code_partial_function = functools.partial(struct.Struct(msg).pack, code)
...
0x6B: "<BB", # OP_READ_REGISTER
...
# used like this later:
# example for register number 1
# final_packed_bytes will contain both the operation id and the register number
final_packed_bytes = code_partial_function(0x1)
对于这个读取寄存器的操作,protocol.py 将创建一个已经包含操作 id (0x6b) 的部分函数,并将要求您提供额外的“B”,表示另一个无符号字符,可能是您希望读取的寄存器编号。
该协议仅提供 ID 作为 pack 函数的第一个输入,而将其余值留给用户。每个操作在操作 ID 后需要不同的值,有些需要更多(“BBH”),有些需要更少(“B”)。
对于 0x6c,我会搜索格式并从那里了解我还剩下什么来提供这个包功能。
添加回答
举报
0/150
提交
取消