Advertisement
nicx321

EDISON DAM060 Logging v3

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