elif msg[i] == ESCAPE_FLAG : new_msg.append(msg[i+1]^0x20) i = i + 2 else : new_msg.append(msg[i]) i = i + 1 return new_msg msg_to_send = "" i = 0 while i < 250 : msg_to_send = msg_to_send + "H" i = i + 1 set_connection.set_connection(0,1,0) client_fd = os.open("/dev/s3fserial0",os.O_RDWR) READ_ONLY = select.POLLIN WRITE_ONLY = select.POLLOUT send_msg = frame_outgoing_message(msg_to_send) print "Start time = ", time.time() print "msg to send = ", send_msg n_wrote = 0 while n_wrote < len(send_msg) : poller = select.poll() poller.register(client_fd, WRITE_ONLY) events = poller.poll(5000) if len(events) == 0 :
import set_connection set_connection.set_connection(1,2,0)
def test_run_server_serial(thread_resp_queue,thread_cmd_queue, disconnect, recv_time_val, conn_time, local_id, remote_id, connection_id, thread_resp_arr,thread_cmd_arr,conf_directory): BUFFER_SIZE = 4096 # init status read_finish_status = 1 BUSY = True STATUS = RUNNING ERROR = False STATUS_MODBUS = 0x0 STATUS_CONN = 0x0 server_fd = os.open("/dev/s3fserial" + str(connection_id) ,os.O_RDWR) READ_ONLY = select.POLLIN WRITE_ONLY = select.POLLOUT print("Start time = ", datetime.datetime.now()," connection id = ", connection_id) set_connection.set_connection(local_id,remote_id,connection_id) recv_msg = bytearray() isfirst = 1 log_time = None CONN_ESTABLISHED = False BUSY = True STATUS = RUNNING ERROR = False STATUS_MODBUS = 0x0 STATUS_CONN = 0x0 read_finish_status = 1 elapsed = 0.0 number = 0.0 while True: curr_status = (read_finish_status,STATUS,ERROR,STATUS_MODBUS,STATUS_CONN,BUSY,CONN_ESTABLISHED) poller = select.poll() poller.register(server_fd, READ_ONLY) print ("poll start time :", datetime.datetime.now()) events = poller.poll(recv_time_val*1000) if isfirst == 1 : log_time = datetime.datetime.now() isfirst = 0 if len(events) == 0 : print("End time = ", datetime.datetime.now()) print("Serial Recv TIMEOUT Done !!!!!!!!!!!!!!!!") read_finish_status = 0 STATUS = RECV_TIMEOUT_ERROR ERROR = True STATUS_MODBUS = 0x0 STATUS_CONN = ERROR_MONITORING_TIME_ELAPSED break st = datetime.datetime.now() data = os.read(server_fd,100) end = datetime.datetime.now() d = end - st elapsed = elapsed + d.total_seconds() number = number + 1.0 if len(data) == 0 : continue else : if isfirst == 1 : log_time = datetime.datetime.now() #print("Recv time = ", time.time(), " last elapsed = ", d.total_seconds()) isfirst = 0 recv_msg.extend(data) data = bytearray(data) if data[len(data) - 1] == START_END_FLAG : resume_poll = False else : resume_poll = True if resume_poll == True : continue if log_time == None : log_time = datetime.datetime.now() #print("Recv msg = ",recv_msg) recv_data_hash = str(hashlib.md5(str(recv_msg)).hexdigest()) log_msg = str(log_time) + ",RECV," + str(recv_data_hash) + "," + str(binascii.hexlify(recv_msg[0:-3])) LOG_msg(log_msg,local_id,conf_directory) recv_data = process_incoming_frame(recv_msg) #print("Recv data = ",recv_data, " Avg read time = ", float(elapsed)/float(number), " Number = ", number, " total read time = ", elapsed) recv_data = recv_data[0:-3] put(thread_resp_arr,1,recv_data) cmd = get(thread_cmd_arr) #print("Server : test run : received cmd at " + str(datetime.datetime.now())) if cmd == 'QUIT': return response = cmd log_time = None response.append(random.randint(0,255)) response.append(random.randint(0,255)) response.append(random.randint(0,255)) response = frame_outgoing_message(response) n_wrote = 0 wt_start = datetime.datetime.now() while n_wrote < len(response) : poller = select.poll() poller.register(server_fd, WRITE_ONLY) events = poller.poll(conn_time*1000) if len(events) == 0 : print("End time = ", time.time()) print("Serial Send TIMEOUT Done !!!!!!!!!!!!!!!!") read_finish_status = 0 STATUS = CONN_TIMEOUT_ERROR ERROR = True STATUS_MODBUS = 0x0 STATUS_CONN = ERROR_MONITORING_TIME_ELAPSED break n_wrote = n_wrote + os.write(server_fd,response[n_wrote:]) wt_end = datetime.datetime.now() d = wt_end - wt_start #print("Sent response to client = ",response, " at " + str(datetime.datetime.now()), " Write time = ", d.total_seconds()) sys.stdout.flush() response_hash = str(hashlib.md5(str(response)).hexdigest()) if log_time == None : log_time = datetime.datetime.now() log_msg = str(log_time) + ",SEND," + str(response_hash) + "," + str(binascii.hexlify(response[0:-3])) LOG_msg(log_msg,local_id,conf_directory) if disconnect == True : return isfirst = 1 log_time = None recv_msg = bytearray() CONN_ESTABLISHED = False BUSY = True STATUS = RUNNING ERROR = False STATUS_MODBUS = 0x0 STATUS_CONN = 0x0 read_finish_status = 1 elapsed = 0.0 number = 0.0 print("####### Exiting Serial Server ############") BUSY = False CONN_ESTABLISHED = False curr_status = (read_finish_status,STATUS,ERROR,STATUS_MODBUS,STATUS_CONN,BUSY,CONN_ESTABLISHED) put(thread_resp_queue,4,curr_status) get(thread_cmd_queue)
new_msg = bytearray() i = 0 while i < len(msg) : if msg[i] == START_END_FLAG : i = i + 1 elif msg[i] == ESCAPE_FLAG : new_msg.append(msg[i+1]^0x20) i = i + 2 else : new_msg.append(msg[i]) i = i + 1 return new_msg set_connection.set_connection(1,0,0) server_fd = os.open("/dev/s3fserial0",os.O_RDWR) READ_ONLY = select.POLLIN WRITE_ONLY = select.POLLOUT print ("Start time = ", time.time()) recv_msg = bytearray() while True : poller = select.poll() poller.register(server_fd, READ_ONLY) events = poller.poll(5000) if len(events) == 0 :
def test_run_client_serial(thread_resp_queue,thread_cmd_queue,conn_time, local_id, remote_id, connection_id, thread_resp_arr,thread_cmd_arr,conf_directory) : BUFFER_SIZE = 4096 read_finish_status = 1 s_time = time.time() print("Start time = ", datetime.datetime.now()," connection id = ", connection_id) client_fd = os.open("/dev/s3fserial" + str(connection_id) ,os.O_RDWR) READ_ONLY = select.POLLIN WRITE_ONLY = select.POLLOUT set_connection.set_connection(local_id,remote_id,connection_id) sys.stdout.flush() CONN_ESTABLISHED = True BUSY = True STATUS = RUNNING ERROR = False STATUS_MODBUS = 0x0 STATUS_CONN = 0x0 print("Connection established at " + str(datetime.datetime.now())) read_finish_status = 1 curr_status = (read_finish_status,STATUS,ERROR,STATUS_MODBUS,STATUS_CONN,BUSY,CONN_ESTABLISHED) # read all input and inout params put(thread_resp_queue,4,curr_status) cmd = get_busy_wait(thread_cmd_queue) if cmd == 'QUIT': return disconnect, recv_time_val, conn_time, msg_to_send, exception = cmd while True : BUSY = True STATUS = RUNNING ERROR = False STATUS_MODBUS = 0x0 STATUS_CONN = 0x0 read_finish_status = 1 curr_status = (read_finish_status,STATUS,ERROR,STATUS_MODBUS,STATUS_CONN,BUSY,CONN_ESTABLISHED) print("Resumed connection at : " + str(datetime.datetime.now())) sys.stdout.flush() if msg_to_send == None : read_finish_status = 0 STATUS = DONE ERROR = True STATUS_MODBUS = exception STATUS_CONN = 0x0 break msg_to_send.append(random.randint(0,255)) msg_to_send.append(random.randint(0,255)) msg_to_send.append(random.randint(0,255)) msg_to_send = frame_outgoing_message(msg_to_send) n_wrote = 0 wt_start = datetime.datetime.now() while n_wrote < len(msg_to_send) : poller = select.poll() poller.register(client_fd, WRITE_ONLY) events = poller.poll(conn_time*1000) log_time = None if len(events) == 0 : print("End time = ", time.time()) print("Serial Write TIMEOUT Done !!!!!!!!!!!!!!!!") read_finish_status = 0 STATUS = CONN_TIMEOUT_ERROR ERROR = True STATUS_MODBUS = 0x0 STATUS_CONN = ERROR_MONITORING_TIME_ELAPSED break n_wrote = n_wrote + os.write(client_fd,msg_to_send[n_wrote:]) wt_end = datetime.datetime.now() d = wt_end - wt_start #print(" Client send msg write time = ", d.total_seconds()) if log_time == None : log_time = datetime.datetime.now() msg_to_send_hash = str(hashlib.md5(str(msg_to_send)).hexdigest()) log_msg = str(log_time) + ",SEND," + str(msg_to_send_hash) + "," + str(binascii.hexlify(msg_to_send[0:-3])) LOG_msg(log_msg,local_id,conf_directory) # receive response from server recv_msg = bytearray() isfirst = 1 resume_poll = True data = [] elapsed = 0.0 number = 0 while True : poller = select.poll() poller.register(client_fd, READ_ONLY) events = poller.poll(recv_time_val*1000) if isfirst == 1 : log_time = datetime.datetime.now() isfirst = 0 if len(events) == 0 : print("End time = ", datetime.datetime.now()) print("Serial Read TIMEOUT Done !!!!!!!!!!!!!!!!") read_finish_status = 0 STATUS = RECV_TIMEOUT_ERROR ERROR = True STATUS_MODBUS = 0x0 STATUS_CONN = ERROR_MONITORING_TIME_ELAPSED BUSY = False break st = datetime.datetime.now() data = os.read(client_fd,100) end = datetime.datetime.now() d = end - st elapsed = elapsed + d.total_seconds() number = number + 1.0 if len(data) == 0 : continue else : if isfirst == 1 : log_time = datetime.datetime.now() #print("Recv time = ",time.time(), " last elapsed = ", d.total_seconds()) isfirst = 0 recv_msg.extend(data) data = bytearray(data) if data[len(data) - 1] == START_END_FLAG : resume_poll = False else : resume_poll = True if resume_poll == True : continue else : break recv_time = log_time recv_data_hash = str(hashlib.md5(str(recv_msg)).hexdigest()) log_msg = str(recv_time) + ",RECV," + str(recv_data_hash) + "," + str(binascii.hexlify(recv_msg[0:-3])) #print("Recv msg = ",recv_msg, " Avg read time = ", float(elapsed)/float(number), " Number = ", number, " total read time = ", elapsed) LOG_msg(log_msg,local_id,conf_directory) recv_data = process_incoming_frame(recv_msg) recv_data = recv_data[0:-3] put(thread_resp_arr,1,recv_data) cmd = get(thread_cmd_arr) if cmd == 'QUIT': return print("Response processed at " + str(datetime.datetime.now())) sys.stdout.flush() disconnect, recv_time_val, conn_time, msg_to_send, exception = cmd elapsed = 0.0 number = 0.0 print("####### Exiting Serial Client ############") BUSY = False CONN_ESTABLISHED = False curr_status = (read_finish_status,STATUS,ERROR,STATUS_MODBUS,STATUS_CONN,BUSY,CONN_ESTABLISHED) put(thread_resp_queue,4,curr_status) cmd = get(thread_cmd_queue)