Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- import glob
- import serial
- import time
- import ftplib
- import re
- import csv
- from ftplib import FTP
- COM_PORT = "COM8"
- QUERY_STATE = "STATE?"
- QUERY_EVENT_LINE = "EVENT? LINE"
- QUERY_EVENT_PARAM = "7"
- QUERY_EVENT_TOP = "EVENT? TOP"
- RESP_STATE = "STATE 0\r\n"
- RESP_ERR0 = "ERR0\r\n"
- CMD_SPARA = "SPARA"
- PARAMS_SPARA = "125,10000,5,0"
- CMD_ACQT = "ACQT"
- PARAMS_ACQT = "10"
- CMD_UIOR = "UIOR"
- PARAMS_UIOR = "1.469000"
- CMD_TREF = "TREF"
- PARAMS_TREF = "-60.0"
- CMD_TLOS = "TLOS"
- PARAMS_TLOS = "0.30"
- CMD_TEOF = "TEOF"
- PARAMS_TEOF = "3"
- CMD_DATE = "DATE 2019,11,7"
- CMD_TIME = "TIME 18,47,14"
- CMD_SCAN = "SCAN"
- OTDR_FTP_USERNAME = "eotdr"
- OTDR_FTP_USERPASS = "002281"
- OTDR_FTP_FILENAME = "otdr.sor"
- class TopResponse:
- pass
- class LineResponse:
- pass
- eventsLine = []
- scan_number = 1
- def serial_ports():
- """ Lists serial port names
- :raises EnvironmentError:
- On unsupported or unknown platforms
- :returns:
- A list of the serial ports available on the system
- """
- if sys.platform.startswith('win'):
- ports = ['COM%s' % (i + 1) for i in range(256)]
- elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'):
- # this excludes your current terminal "/dev/tty"
- ports = glob.glob('/dev/tty[A-Za-z]*')
- elif sys.platform.startswith('darwin'):
- ports = glob.glob('/dev/tty.*')
- else:
- raise EnvironmentError('Unsupported platform')
- result = []
- for port in ports:
- try:
- s = serial.Serial(port)
- s.close()
- result.append(port)
- except (OSError, serial.SerialException):
- pass
- return result
- def parse_event_top(event_top_resp):
- event_top_resp_splitted = re.split(',| ', event_top_resp.decode('utf-8'))
- top_response.totalEvents = event_top_resp_splitted[2]
- top_response.fiberLength = event_top_resp_splitted[3]
- top_response.totalLoss = event_top_resp_splitted[4]
- top_response.totalReturnLoss = event_top_resp_splitted[5]
- write_events_top_to_csv_file(top_response)
- def parse_event_line(event_line_resp):
- event_line_resp_splitted = re.split(',| ', event_line_resp.decode('utf-8'))
- line_response.eventNumber = event_line_resp_splitted[2]
- line_response.eventLocation = event_line_resp_splitted[3]
- line_response.eventLoss = event_line_resp_splitted[4]
- line_response.reflectance = event_line_resp_splitted[5]
- line_response.totalLoss = event_line_resp_splitted[6]
- line_response.eventType = event_line_resp_splitted[7]
- eventsLine.append(line_response)
- # print(line_response)
- write_event_to_csv_file(scan_number, line_response)
- def write_command(cmd, params):
- s.reset_input_buffer()
- if params == "":
- s.write((cmd+'\n').encode())
- print(cmd)
- else:
- s.write((cmd + ' ' + params+'\n').encode())
- print(cmd + ' ' + params)
- res = s.readline()
- print(res.decode('utf-8'))
- if cmd == QUERY_STATE:
- if res == RESP_STATE.encode('utf-8'):
- # print("Good")
- return 1
- else:
- # print("Bad")
- return 0
- elif cmd == QUERY_EVENT_TOP:
- parse_event_top(res)
- return 1
- elif cmd == QUERY_EVENT_LINE:
- parse_event_line(res)
- return 1
- else:
- if res == RESP_ERR0.encode('utf-8'):
- # print("OK")
- return 1
- else:
- # print("ERROR")
- return 0
- def write_command_till_ok(cmd, params=""):
- retry_count = 1
- while write_command(cmd, params) == 0:
- print("retry " + format(retry_count))
- retry_count = retry_count + 1
- time.sleep(1)
- def init_scan():
- write_command_till_ok(CMD_SPARA, PARAMS_SPARA)
- write_command_till_ok(CMD_ACQT, PARAMS_ACQT)
- write_command_till_ok(CMD_UIOR, PARAMS_UIOR)
- write_command_till_ok(CMD_TREF, PARAMS_TREF)
- write_command_till_ok(CMD_TLOS, PARAMS_TLOS)
- write_command_till_ok(CMD_TEOF, PARAMS_TEOF)
- write_command_till_ok(CMD_SCAN)
- write_command_till_ok(QUERY_EVENT_TOP)
- if (int(top_response.totalEvents)> 0):
- for event_idx in range(int(top_response.totalEvents)):
- write_command_till_ok(QUERY_EVENT_LINE, format(event_idx+1))
- def wait_for_scan_end():
- write_command_till_ok(QUERY_STATE)
- def grab_file():
- filename = OTDR_FTP_FILENAME
- local_file = open("c:/temp/" + filename, 'wb')
- ftp.retrbinary('RETR ' + filename, local_file.write)
- ftp.quit()
- local_file.close()
- def open_csv_file(scan_num):
- row = ['event number', ' location', 'loss', 'reflectance', 'total loss', 'event type']
- with open('otdr_events_'+str(scan_num)+'.csv', 'w', newline='') as csvFile:
- writer = csv.writer(csvFile)
- writer.writerow(row)
- csvFile.close()
- def open_top_csv_file():
- row = ['scan number', 'total events', 'fiber length', 'total loss', 'total return loss']
- with open('otdr_tops.csv', 'w', newline='') as csvFile:
- writer = csv.writer(csvFile)
- writer.writerow(row)
- csvFile.close()
- def write_event_to_csv_file(scan_num, event_data):
- row = [event_data.eventNumber, event_data.eventLocation, event_data.eventLoss, event_data.reflectance, event_data.totalLoss, event_data.eventType]
- with open('otdr_events_'+str(scan_num)+'.csv', 'a', newline='') as csvFile:
- writer = csv.writer(csvFile)
- writer.writerow(row)
- csvFile.close()
- def write_events_top_to_csv_file(top_data):
- row = [scan_number, top_data.totalEvents, top_data.fiberLength, top_data.totalLoss, top_data.totalReturnLoss]
- with open('otdr_tops.csv', 'a', newline='') as csvFile:
- writer = csv.writer(csvFile)
- writer.writerow(row)
- csvFile.close()
- if __name__ == '__main__':
- top_response = TopResponse()
- line_response = LineResponse()
- open_top_csv_file()
- print(serial_ports())
- s = serial.Serial()
- s.baudrate = 115200
- s.port = COM_PORT
- s.timeout = 1
- s.open()
- print('OTDR is loading')
- count = 1
- write_command_till_ok(QUERY_STATE)
- print('OTDR is UP\r\n')
- open_csv_file(scan_number)
- init_scan()
- wait_for_scan_end()
- for(x) in eventsLine:
- print(x.eventLocation)
- eventsLine.clear()
- ftp = ftplib.FTP('localhost', OTDR_FTP_USERNAME, OTDR_FTP_USERPASS)
- ftp.cwd('disk')
- files = ftp.dir()
- print(files)
- grab_file()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement