# -*- coding: utf-8 -*- import sys,os,time reload(sys) sys.setdefaultencoding('utf-8') import struct,binascii class C3316A_CmdParse(): def __init__(self): # 命令头; self.Command = '' # 数据体; self.Data = '' # 命令类型符; self.CmdType = '' # 结束符; self.EOF = '\r' # 分隔符; self.Separator = ',' # 结果值; self.Result = '' ''' 描述:将参数根据协议格式转化为协议指令; 参数: command:协议命令码; data:协议命令码数据; ctrl:True表示是控制命令, False表示是设置命令; 注意:command, data传递的是字符串类型; 返回:返回要发送到串口中的数据包; ''' def parseCommand(self, command, data, ctrl = True): self.Command = command if ctrl == True: #控制设备命令; self.CmdType = '=' self.Data = data else: #读取配置信息命令; self.CmdType = '?' self.Data = '' package = self.Command + self.CmdType + self.Data + self.EOF return package def parseCmdLine(self, cmdline): chIndex = cmdline.find('=') if chIndex == -1: chIndex = cmdline.find('?') if chIndex == -1: return None self.CmdType = '?' else: self.CmdType = '=' # 命令符; self.Command = cmdline[:chIndex] # 数据; self.Data = cmdline[chIndex+1:cmdline.find(self.EOF)] # 返回数据包; package = self.Command + self.CmdType + self.Data + self.EOF return package ''' 描述:解析读串口数据是否正确返回; 参数:data:串口返回的数据(设备响应数据); 返回:命令有效返回True,否则返回False ''' def parseResult(self, data): if data.__len__() == 0: return False # 查找类型符; index = data.find('=') if index == -1: return False # 根据类型分析; if self.CmdType == '?': header = data[:index] if header.lower() == self.Command.lower(): self.Result = data[index+1:data.find(self.EOF)] return True # read setting info类型,不根据rvope来返回; self.parseResponse(data[index+1:]) return False else: return self.parseResponse(data[index+1:]) ''' 描述:解析设备RVOPE返回值; 参数:rvope; 返回:命令有效返回True,否则返回False ''' def parseResponse(self, rvope): # Command Error if rvope[0] == '1': print 'Command Error' return False # Parameter Error if rvope[1] == '1': print 'Parameter Error' return False # Busy Error if rvope[2] == '1': print 'Busy Error' return False # Normal return True if __name__ == "__main__": pass