我的实验室很快就会收到一些新设备,我正在编写自己的 modbus 脚本来自动化测试过程。到目前为止,这是我不得不用我有限的编程能力来应对的最复杂的任务。
我不想从头开始编写一个新类来管理命令,而是想创建一个EZTcomm
继承其功能的类,bytearray
并添加一个EZTcomm.crc
属性来存储循环冗余校验和。
在阅读了这个问题和 docs.python.org 之后,我仍然对如何做到这一点感到困惑。似乎如果我想__init__()
在我的新类中修改方法,那么我需要先显式调用bytearray.__init__()
,但我不知道如何将EZTcomm
调用中的参数传递给bytearray.__init__()
,也不知道如何使用参数在bytearray.__init__()
调用中作为变量来计算 CRC。
这是我迄今为止所写的:
class EZTcomm(bytearray):
def __init__(self, *args, **kwargs):
bytearray.__init__(self, *args, **kwargs)
self.check = crc(args)
def CRC(bytearray_in):
'''Calculates a Cyclical Redundancy Checksum (CRC16).'''
crc = 0xFFFF
for work_byte in bytearray_in:
crc ^= work_byte
n = 0
while n in range(8):
if (crc & 0x0001):
crc >>= 1
crc ^= 0xA001
else:
crc >>= 1
n += 1
return crc
############
test = EZTcomm([0x01,0x03,0x00,0x23,0x00,0x02])
print(test)
print(test.check)
这是否接近我想要的工作方式?我应该做些什么不同的事情?