72 lines
2.5 KiB
Python
72 lines
2.5 KiB
Python
from COM.COM_TCP import TCPClient
|
|
import queue
|
|
import json
|
|
from Model.RobotModel import DataAddress,DATARequest
|
|
|
|
class RobotClient(TCPClient):
|
|
|
|
def __init__(self, ip, port, command_quene, status_model):
|
|
super().__init__(ip, port)
|
|
self.command_quene = command_quene
|
|
self.status_model = status_model
|
|
self.errorCommands = {}
|
|
|
|
def add_sendQuene(self,command): #后面 命令分等级,紧急命令直接执行
|
|
self.command_quene.put(command)
|
|
return
|
|
|
|
def send_Command(self):
|
|
q = queue.Queue
|
|
q.qsize()
|
|
while True: # 让出时间间隔
|
|
try:
|
|
if self.command_quene.qsize()!=0:
|
|
command = self.command_quene.get()
|
|
self.client_socket.send(json.dumps(command).encode('utf-8'))
|
|
|
|
if False:
|
|
response = self.client_socket.recv(1024).decode('utf-8')
|
|
response_message = json.loads(response)
|
|
if True:
|
|
print('正确相应')
|
|
else:
|
|
self.errorCommands[json.dumps(command).encode('utf-8')] = response_message
|
|
print('出错')
|
|
except Exception as e:
|
|
print('连接断开')
|
|
|
|
#return False
|
|
|
|
def send_Status(self):
|
|
request = DATARequest()
|
|
|
|
attributes = dir(DataAddress())
|
|
|
|
# 移除特殊属性和方法
|
|
attributes = [attr for attr in attributes if not attr.startswith('__')]
|
|
request.queryAddr= attributes
|
|
request_status_json = vars(request)
|
|
# 转字符串
|
|
while True:
|
|
try:
|
|
self.client_socket.send(json.dumps(request_status_json).encode('utf-8'))
|
|
if False:
|
|
response = self.client_socket.recv(1024).decode('utf-8')
|
|
response_message = json.loads(response)
|
|
if True:
|
|
data_status = DATARequest()
|
|
data_status.__dict__ = response_message
|
|
data_address_array = data_status.queryAddr
|
|
data_Address = DataAddress()
|
|
for i in attributes.count():
|
|
setattr(data_Address,attributes[i],data_address_array[i])
|
|
self.status_model = data_Address
|
|
else:
|
|
print('转换失败')
|
|
except Exception as e:
|
|
print('连接断开')
|
|
|
|
|
|
|
|
return False
|