예제 #1
0
	def __init__ (self, packet_str):
		self.packet = array.array('B')
		self.packet.fromstring(packet_str)
		
		self.station  = self.packet[0]
		self.function = self.packet[1]
		self.register = self.packet[3] + (self.packet[2]<<8)		
		self.data     = self.packet[5] + (self.packet[4]<<8)
		if self.packet[4] & 0x80:	#its negative, perform 2's complement'
			self.data =  -(~self.data + (2<<15))
		self.CRC      = self.packet[6] + (self.packet[7]<<8)
		
		payload = struct.pack('BBBBBB',
		self.packet[0],
		self.packet[1],
		self.packet[2],
		self.packet[3],
		self.packet[4],
		self.packet[5])
		
		self.calculated_CRC = crc16(payload)
예제 #2
0
	def buildpacket(self):
		self.packet[0] = self.station = PC_STATION
		self.packet[1] = self.function
		if self.function == FUNCTION_READ_INPUT_REGISTER:
			self.packet[2] = 1
			self.packet[3] = self.data >> 8
			self.packet[4] = self.data & 0x00FF
			payload = struct.pack('BBBBB',
			self.packet[0],
			self.packet[1],
			self.packet[2],
			self.packet[3],
			self.packet[4])

		if self.function == FUNCTION_WRITE_SINGLE_REGISTER:
			self.packet[2] = self.register >> 8
			self.packet[3] = self.register & 0x00FF
#			self.packet[4] = self.data >> 8
			self.packet[5] = self.data & 0x00FF
		
			payload = struct.pack('BBBBBB',
			self.packet[0],
			self.packet[1],
			self.packet[2],
			self.packet[3],
			self.packet[4],
			self.packet[5])
		
		self.CRC = crc16(payload)
		
		if self.function == FUNCTION_READ_INPUT_REGISTER:
			self.packet[6] = self.CRC >> 8
			self.packet[5] = self.CRC & 0x00FF
		if self.function == FUNCTION_WRITE_SINGLE_REGISTER:
			self.packet[7] = self.CRC >> 8
			self.packet[6] = self.CRC & 0x00FF