예제 #1
0
		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 :
예제 #2
0
import set_connection

set_connection.set_connection(1,2,0)
예제 #3
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)
예제 #4
0
	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 :
예제 #5
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)