내 실험실에 곧 새로운 장비가 추가되고 테스트 프로세스를 자동화하기 위해 자체 modbus 스크립트를 작성하고 있습니다. 지금까지, 이것은 제한된 프로그래밍 숙련도에 맞서야했던 가장 복잡한 작업입니다.__init __() 메소드 상속 및 수정
대신 명령을 관리하기 위해 처음부터 새로운 클래스를 작성, 나는 bytearray
에서 그 기능을 상속하는 클래스 EZTcomm
을하고 순환 중복 체크섬을 저장하는 EZTcomm.crc
속성을 추가하고 싶습니다.
this question과 docs.python.org를 읽은 후에도 저는이 작업을 수행하는 방법에 대해 여전히 혼란스러워합니다. 그것은 내 새 클래스에서 __init__()
메서드를 수정하려는 경우 우선 명시 적으로 bytearray.__init__()
호출해야하지만 bytearray.__init__()
EZTcomm
호출에서 인수를 전달하는 방법을 알아낼 수 없으며 어떻게 알 수 있습니까 CRC를 계산하기위한 변수로 bytearray.__init__()
호출의 인수를 사용합니다.
이것은 내가 지금까지 쓴 것입니다 :이 어디 내가 그것을 원하는 방식으로 작업에 가까운
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)
인가? 나는 무엇을 다르게해야 하는가?
당신은 여전히 인수를 사용하는 방법에 대해 약간 혼란스러워합니다. http://docs.python.org/2/tutorial/controlflow.html#more-on-defining-functions –