123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- # -*- 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
-
|