Chroma22293.py 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. # -*- coding: UTF-8 -*-
  2. import serial
  3. import time
  4. from ssat_sdk.sat_environment import *
  5. from ssat_sdk.utils import LoggingUtil
  6. import inspect
  7. from ssat_sdk.utils.AbnormalClient import abnormal_client
  8. pyFileName = os.path.split(__file__)[-1]
  9. def get_current_function_name():
  10. return inspect.stack()[1][3]
  11. class Chroma22293():
  12. # 构造函数
  13. def __init__(self, port):
  14. self.loop = 0
  15. self.timeout = 0.2
  16. self.ser = serial.Serial()
  17. self.ser.port = port
  18. self.ser.baudrate = 115200
  19. self.ser.bytesize = 8
  20. self.ser.parity = serial.PARITY_NONE
  21. self.ser.stopbits = 1
  22. self.ser.timeout = 1 # 读超时;
  23. self.ser.writeTimeout = 0.5 # 写超时;
  24. self.className = self.__class__.__name__
  25. # 析构函数;
  26. def __del__(self):
  27. self.close()
  28. def sendAbnormal(self, msg):
  29. curport = 'COM'+str(self.ser.port)
  30. dic = getChroma22293()
  31. if dic['devices'][0]['port'] == curport:
  32. abnormal_client.sendAbnormal('signalcard', msg)
  33. else:
  34. abnormal_client.sendAbnormal('signalcard_2', msg)
  35. def open(self):
  36. try:
  37. self.ser.open()
  38. if self.ser.is_open == True:
  39. # print "%s : Open Success" % self.ser.port
  40. LoggingUtil.getDebugLogger().info(
  41. pyFileName,
  42. self.className,
  43. get_current_function_name(),
  44. str(self.ser.port)+'Open Success')
  45. print self.ser.get_settings()
  46. print "rts=" + str(self.ser.rts)
  47. print "cts=" + str(self.ser.cts)
  48. else:
  49. # print "%s : Open Fail" % self.ser.port
  50. LoggingUtil.getDebugLogger().info(
  51. pyFileName,
  52. self.className,
  53. get_current_function_name(),
  54. str(self.ser.port)+'Open Fail')
  55. # 返回结果;
  56. return self.ser.is_open
  57. except Exception, e:
  58. # print u'打开串口失败,描述:', e
  59. LoggingUtil.getDebugLogger().info(
  60. pyFileName,
  61. self.className,
  62. get_current_function_name(),
  63. '打开串口失败,描述:'+str(e))
  64. self.sendAbnormal(str(e))
  65. return False
  66. def writeCmd(self, cmdstr):
  67. try:
  68. len = self.ser.write(cmdstr + b"\r") # 注意后面要回车键(\r),命令才会发送出去执行
  69. print "Sending cmd:" + cmdstr + " len=" + str(len)
  70. return True
  71. except Exception, e:
  72. self.sendAbnormal(str(e))
  73. # print u'写串口失败,描述:', e
  74. LoggingUtil.getDebugLogger().info(
  75. pyFileName,
  76. self.className,
  77. get_current_function_name(),
  78. '写串口失败,描述:'+str(e))
  79. #重新打开串口;
  80. self.close()
  81. self.open()
  82. return False
  83. def readResult(self):
  84. """
  85. If the result is normal, "OK;.." will be output.
  86. OK;[CR][LF] 正常
  87. If the result is an error, the following message will be output.
  88. NG: SYNTAX ERRO;[CR][LF] 指令语法错误
  89. NG: BOUNDARY ERROR;[CR][LF] 输入参数超出范围
  90. NG: EXECUTE ERROR;[CR][LF] 系统执行指令时发生错误
  91. """
  92. try:
  93. self.loop = 0
  94. time.sleep(self.timeout)
  95. while self.ser.in_waiting == 0:
  96. time.sleep(self.timeout)
  97. self.loop += 1
  98. if self.loop == 10:
  99. break
  100. result = self.ser.readlines()
  101. print "cmd result:" + str(result)
  102. if len(result) == 0:
  103. result = ['ng1: read none', 'ng2: read none']
  104. return result
  105. except Exception, e:
  106. self.sendAbnormal(str(e))
  107. # print u'读串口失败,错误描述:', e
  108. LoggingUtil.getDebugLogger().info(
  109. pyFileName,
  110. self.className,
  111. get_current_function_name(),
  112. '读串口失败,错误描述:'+str(e))
  113. #重新打开串口;
  114. self.close()
  115. self.open()
  116. return ['ng1: SerialException', 'ng2: SerialException']
  117. def execmd(self, cmdstr):
  118. if self.writeCmd(cmdstr):
  119. return self.readResult()
  120. else:
  121. return ['ng1: SerialException', 'ng2: SerialException']
  122. def close(self):
  123. self.ser.close()
  124. if self.ser.is_open == False:
  125. # print "%s :Close Success" % self.ser.port
  126. LoggingUtil.getDebugLogger().info(
  127. pyFileName,
  128. self.className,
  129. get_current_function_name(),
  130. str(self.ser.port)+'Close Success')
  131. else:
  132. # print "%s :Close Fail" % self.ser.port
  133. LoggingUtil.getDebugLogger().info(
  134. pyFileName,
  135. self.className,
  136. get_current_function_name(),
  137. str(self.ser.port)+'Close Fail')
  138. def __del__(self):
  139. if self.ser.is_open == True:
  140. self.ser.close()
  141. def parseResult(self, retStrArr):
  142. for retStr in retStrArr:
  143. if "ok;" in retStr.lower():
  144. return True
  145. return False
  146. # 返回配置文件;
  147. def getConfigName(self):
  148. pass
  149. # 返回机型;
  150. def getDeviceName(self):
  151. cmd = 'report model;'
  152. return self.execmd(cmd)
  153. # 返回软件版本号,如V 1.0
  154. def getDeviceSoft(self):
  155. cmd = 'report ver;'
  156. return self.execmd(cmd)
  157. # 做BUF测试,无误返回ok;
  158. def getStatus(self):
  159. cmd = 'dummy;'
  160. result = self.execmd(cmd)
  161. return self.parseResult(result)
  162. def setPattern(self, param):
  163. cmd = 'run ptn %s;' % param
  164. result = self.execmd(cmd)
  165. self.getStatus()
  166. return self.parseResult(result)
  167. def setTiming(self, param):
  168. cmd = 'run tim %s;' % param
  169. result = self.execmd(cmd)
  170. self.getStatus()
  171. return self.parseResult(result)
  172. def setTimingPattern(self, param1, param2):
  173. # timing
  174. cmd = 'run tim %s;' % param1
  175. result1 = self.execmd(cmd)
  176. self.getStatus()
  177. time.sleep(0.5)
  178. # patten
  179. cmd = 'run ptn %s;' % param2
  180. result2 = self.execmd(cmd)
  181. self.getStatus()
  182. # result;
  183. ret = self.parseResult(result1) and self.parseResult(result2)
  184. if ret == False:
  185. LoggingUtil.getDebugLogger().info(
  186. pyFileName,
  187. self.className,
  188. get_current_function_name(),
  189. 'setTimingPattern失败结果:'+str(result1)+str(result2))
  190. return ret
  191. def setBlueOFF(self):
  192. cmd = 'b off;'
  193. result = self.execmd(cmd)
  194. return self.parseResult(result)
  195. def setBuleON(self):
  196. cmd = 'b on;'
  197. result = self.execmd(cmd)
  198. return self.parseResult(result)
  199. def setGreenOFF(self):
  200. cmd = 'g off;'
  201. result = self.execmd(cmd)
  202. return self.parseResult(result)
  203. def setGreenON(self):
  204. cmd = 'g on;'
  205. result = self.execmd(cmd)
  206. return self.parseResult(result)
  207. def setRedOFF(self):
  208. cmd = 'r off;'
  209. result = self.execmd(cmd)
  210. return self.parseResult(result)
  211. def setRedON(self):
  212. cmd = 'r on;'
  213. result = self.execmd(cmd)
  214. return self.parseResult(result)
  215. def setKeyBoardLock(self):
  216. cmd = 'kb lock on;'
  217. result = self.execmd(cmd)
  218. return self.parseResult(result)
  219. def setKeyBoardUnLock(self):
  220. cmd = 'kb lock off;'
  221. result = self.execmd(cmd)
  222. return self.parseResult(result)
  223. if __name__ == "__main__":
  224. pass
  225. ser = Chroma22293("COM6")
  226. if ser.open():
  227. print ser.getDeviceName() #使用这个命令,导致其他命令无法正常使用;
  228. print ser.getDeviceSoft()
  229. print ser.getStatus()
  230. #
  231. print ser.setPattern(5)
  232. print ser.setTiming(15)
  233. print ser.setTimingPattern(2,12)
  234. print ser.setBlueOFF()
  235. print ser.setBuleON()
  236. print ser.setGreenOFF()
  237. print ser.setGreenON()
  238. print ser.setRedOFF()
  239. print ser.setRedON()
  240. print ser.setKeyBoardLock()
  241. print ser.setKeyBoardUnLock()
  242. ser.close()
  243. # listObj = {}
  244. # list = getChroma22293()
  245. # print list
  246. # for item in list:
  247. # obj = Chroma22293(item["port"])
  248. # # obj.open()
  249. # if obj.open():
  250. # listObj[item["name"]] = obj
  251. # print listObj
  252. # listObj["Google"].getDeviceName()