Advertisement
nicx321

EDISON DAM060 Logging v2

Dec 13th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.29 KB | None | 0 0
  1. import signal
  2. import sys
  3. import time
  4. import serial
  5. import serial.tools.list_ports
  6. import io
  7. import getopt
  8.  
  9. interval = '1.0'
  10.  
  11. ports = list(serial.tools.list_ports.comports())
  12. for p in ports:
  13.     print(p)
  14.  
  15. def showhelp():
  16.     print( '        va18b.py -i <time in secs> -d <device>')
  17.     print( '   Eg:  va18b.py -i 1.5 -d /dev/ttyUSB1')
  18.      
  19.      
  20. try:
  21.     opts, args = getopt.getopt(sys.argv[1:],"hd:i:",['help'])
  22. except getopt.GetoptError:
  23.     print( 'Error: -i, -d option require a value.')
  24.     showhelp()
  25.     sys.exit(1)
  26.          
  27. for opt, arg in opts:
  28.     if opt in ('-h','--help'):
  29.       showhelp()
  30.       sys.exit(1)
  31.     if opt == '-i':
  32.       interval = arg
  33.     if opt == '-d':
  34.       device = arg
  35.        
  36. try:
  37.     InpP = 'COM'+input("\nZadej cislo portu na otevreni: ")
  38.     port=serial.Serial(port=InpP,
  39.                baudrate=2400,
  40.                bytesize=serial.EIGHTBITS,
  41.                stopbits=serial.STOPBITS_ONE,
  42.                parity=serial.PARITY_NONE,
  43.                timeout=None)
  44.      
  45.     if not port.isOpen():
  46.         port.open()
  47.  
  48. except IOError as err:
  49.     print( '\nError:' + str(err) + '\n')
  50.     sys.exit(1)
  51.  
  52.  
  53. def signal_handler(signal, frame):
  54.     port.flushInput()
  55.     port.close()
  56.     sys.exit(0)
  57.          
  58. signal.signal(signal.SIGINT, signal_handler)
  59.  
  60. # Every packet is 14 bytes long.
  61. def get_bytes():
  62.     i=0
  63.     substr=''
  64.     while i<=13:
  65.         byte=port.read(1)
  66.         # converting every byte to binary format keeping the low nibble.
  67.         substr += '{0:08b}'.format(ord(byte))[4:]
  68.         i += 1
  69.     return substr
  70.  
  71. def TF(strn):
  72.     if(strn == '  0.L '):
  73.         return float(9999999999)
  74.     else:
  75.         return float(strn)
  76.  
  77. def stream_decode(substr):
  78.     ac       = int(substr[0:1])
  79.     dc       = int(substr[1:2])
  80.     auto     = int(substr[2:3])
  81.     pclink   = substr[3:4]
  82.     minus    = int(substr[4:5])
  83.      
  84.     digit1   = substr[5:12]
  85.     dot1     = int(substr[12:13])
  86.     digit2   = substr[13:20]
  87.     dot2     = int(substr[20:21])
  88.     digit3   = substr[21:28]
  89.     dot3     = int(substr[28:29])
  90.     digit4   = substr[29:36]
  91.      
  92.     micro    = int(substr[36:37])
  93.     nano     = int(substr[37:38])
  94.     kilo     = int(substr[38:39])
  95.     diotst   = int(substr[39:40])
  96.     mili     = int(substr[40:41])
  97.     percent  = int(substr[41:42])
  98.     mega     = int(substr[42:43])
  99.     contst   = int(substr[43:44])
  100.     cap      = int(substr[44:45])
  101.     ohm      = int(substr[45:46])
  102.     rel      = int(substr[46:47])
  103.     hold     = int(substr[47:48])
  104.     amp      = int(substr[48:49])
  105.     volts    = int(substr[49:50])
  106.     hertz    = int(substr[50:51])
  107.     lowbat   = int(substr[51:52])
  108.     minm     = int(substr[52:53])
  109.     fahrenh  = substr[53:54]
  110.     celcius  = int(substr[54:55])
  111.     maxm     = int(substr[55:56])
  112.      
  113.     digit = {"1111101":"0",
  114.              "0000101":"1",
  115.              "1011011":"2",
  116.              "0011111":"3",
  117.              "0100111":"4",
  118.              "0111110":"5",
  119.              "1111110":"6",
  120.              "0010101":"7",
  121.              "1111111":"8",
  122.              "0111111":"9",
  123.              "0000000":" ",
  124.              "1101000":"L"}
  125.      
  126.     value = ("-" if minus else " ") +\
  127.             digit.get(digit1,"") + ("." if dot1 else "") +\
  128.             digit.get(digit2,"") + ("." if dot2 else "") +\
  129.             digit.get(digit3,"") + ("." if dot3 else "") +\
  130.             digit.get(digit4,"")
  131.     value=str(TF(value))
  132.  
  133.     flags = "".join([ "   AC   |"   if ac     else "",
  134.                       "   DC   |"   if dc     else "",
  135.                       "  Auto  |"   if auto   else "",
  136.                       " Diodet |"   if diotst else "",
  137.                       " Contin |"   if contst else "",
  138.                       "  Capm  |"   if cap    else "",
  139.                       "  Rel   |"   if rel    else "",
  140.                       "  Hold  |"   if hold   else "",
  141.                       "  Minv  |"   if minm   else "",
  142.                       "  Maxv  |"   if maxm   else "",
  143.                       "  LowB  |"   if lowbat else ""])
  144.                      
  145.     units = ("n   "    if nano    else "") +\
  146.             ("u   "    if micro   else "") +\
  147.             ("k   "    if kilo    else "") +\
  148.             ("m   "    if mili    else "") +\
  149.             ("M   "    if mega    else "") +\
  150.             ("%   "    if percent else "") +\
  151.             ("Ohm "    if ohm     else "") +\
  152.             ("Amp "    if amp     else "") +\
  153.             ("Volt"    if volts   else "") +\
  154.             ("Hz  "    if hertz   else "") +\
  155.             ("C   "    if celcius else "")
  156.    
  157.     Outp = [value + " |" + flags + " " + units, value]
  158.  
  159.     if "n   " in units:
  160.         Outp.append("n (10^−9)")
  161.     elif "u   " in units:
  162.         Outp.append("u (10^−6)")
  163.     elif "m   " in units:
  164.         Outp.append("m (10^−3)")
  165.     elif "k   " in units:
  166.         Outp.append("k (10^3)")
  167.     elif "M   " in units:
  168.         Outp.append("M (10^6)")
  169.  
  170.     return Outp
  171.      
  172. sys.stderr.write('Press any key to make log\n')  
  173. sys.stderr.write('Press Ctrl+C to exit.\n\n')
  174.  
  175. while 1:
  176.     input()
  177.     port.flushInput()
  178.     time.sleep(0.2)
  179.     substr = get_bytes()
  180.     data = stream_decode(substr)
  181.     sys.stderr.write('%.2f' %TF(data[1]))
  182.     try:
  183.         sys.stderr.write('%s' %data[2])
  184.     except:
  185.         pass
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement