Model_3116A_CmdParse.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. # -*- coding: utf-8 -*-
  2. import sys,os,time
  3. reload(sys)
  4. sys.setdefaultencoding('utf-8')
  5. import struct,binascii
  6. class C3316A_CmdParse():
  7. def __init__(self):
  8. # 命令头;
  9. self.Command = ''
  10. # 数据体;
  11. self.Data = ''
  12. # 命令类型符;
  13. self.CmdType = ''
  14. # 结束符;
  15. self.EOF = '\r'
  16. # 分隔符;
  17. self.Separator = ','
  18. # 结果值;
  19. self.Result = ''
  20. '''
  21. 描述:将参数根据协议格式转化为协议指令;
  22. 参数:
  23. command:协议命令码;
  24. data:协议命令码数据;
  25. ctrl:True表示是控制命令, False表示是设置命令;
  26. 注意:command, data传递的是字符串类型;
  27. 返回:返回要发送到串口中的数据包;
  28. '''
  29. def parseCommand(self, command, data, ctrl = True):
  30. self.Command = command
  31. if ctrl == True: #控制设备命令;
  32. self.CmdType = '='
  33. self.Data = data
  34. else: #读取配置信息命令;
  35. self.CmdType = '?'
  36. self.Data = ''
  37. package = self.Command + self.CmdType + self.Data + self.EOF
  38. return package
  39. def parseCmdLine(self, cmdline):
  40. chIndex = cmdline.find('=')
  41. if chIndex == -1:
  42. chIndex = cmdline.find('?')
  43. if chIndex == -1:
  44. return None
  45. self.CmdType = '?'
  46. else:
  47. self.CmdType = '='
  48. # 命令符;
  49. self.Command = cmdline[:chIndex]
  50. # 数据;
  51. self.Data = cmdline[chIndex+1:cmdline.find(self.EOF)]
  52. # 返回数据包;
  53. package = self.Command + self.CmdType + self.Data + self.EOF
  54. return package
  55. '''
  56. 描述:解析读串口数据是否正确返回;
  57. 参数:data:串口返回的数据(设备响应数据);
  58. 返回:命令有效返回True,否则返回False
  59. '''
  60. def parseResult(self, data):
  61. if data.__len__() == 0:
  62. return False
  63. # 查找类型符;
  64. index = data.find('=')
  65. if index == -1:
  66. return False
  67. # 根据类型分析;
  68. if self.CmdType == '?':
  69. header = data[:index]
  70. if header.lower() == self.Command.lower():
  71. self.Result = data[index+1:data.find(self.EOF)]
  72. return True
  73. # read setting info类型,不根据rvope来返回;
  74. self.parseResponse(data[index+1:])
  75. return False
  76. else:
  77. return self.parseResponse(data[index+1:])
  78. '''
  79. 描述:解析设备RVOPE返回值;
  80. 参数:rvope;
  81. 返回:命令有效返回True,否则返回False
  82. '''
  83. def parseResponse(self, rvope):
  84. # Command Error
  85. if rvope[0] == '1':
  86. print 'Command Error'
  87. return False
  88. # Parameter Error
  89. if rvope[1] == '1':
  90. print 'Parameter Error'
  91. return False
  92. # Busy Error
  93. if rvope[2] == '1':
  94. print 'Busy Error'
  95. return False
  96. # Normal
  97. return True
  98. if __name__ == "__main__":
  99. pass