Здравствуйте, я пытаюсь подключиться к серверу OPCUA с помощью клиента opcua.
Я использовал simati c сервер opcua.
Я пишу код, используя python
from opcua import Client
import pandas as pd import threading
__ all_ = ['communication']
df = pd.read_excel (r 'C: \ OPCUA \ Working_VF1_5.xls', sheet_name = 'Tag List')
class Связь:
def __init__(self):
self.is_connected = False
self.plc = ""
self.mylock = threading.Lock()
# Connection method
def opc_client_connect(self):
try:
# # Read connection string for url
url = read_clienturl()
self.client = Client("opc.tcp://WAP120153:55101")
# self.client.find_servers(uris='opc.tcp://WAP120153:55101/')
print(self.client)
self.client.connect()
is_connected = True
root = self.client.get_root_node()
print(root)
objects = root.get_child('Objects')
symbols = objects.get_child('1:SYM:')
stnname,plcname = get_station_plc_name()
stnametostring = '7:' + stnname
plcnametostring = '7:' + plcname
station_name = symbols.get_child(stnametostring)
self.plc = station_name.get_child(plcnametostring)
except Exception as e:
is_connected = False
print("My error is :",e.args)
self.client.disconnect()
finally:
if is_connected:
return True
def __getstate__(self):
state = self.__dict__.copy()
# Remove the unpicklable entries.
del state['mylock']
return state
# def __setstate__(self, state):
# # Restore instance attributes.
# self.__dict__.update(state)
# Declear property of a module
@property
def PLC(self):
return self.plc
Чтение настроек соединения из excel
def read_clienturl ():
data = df.iloc[2, 11]
print(data)
return data
def get_station_plc_name ():
station_name = df.iloc[0, 11]
plc_name = df.iloc[1, 11]
return station_name,plc_name
вызов основной функции
if name == " main ": comm = Communication ()
print(f'plc name is : {comm.PLC}')
while True:
comm.opc_client_connect()
browser_id = '7:' + 'AR SOV OPN LS'
var = comm.PLC.get_child("7:AR SOV OPN LS")
value = var.get_value()
print("value is : ", value)
comm.client.disconnect()
, когда я пытаюсь использовать этот код, у меня появляется ошибка: -
Файл "C: \ Users \ chma02 \ AppData \ Roaming \ Python \ Python37 \ site-packages \ opcua \ client \ ua_client.py ", строка 96, в файле _run self._receive ()" C: \ Users \ chma02 \ AppData \ Roaming \ Python \ Python37 \ site-packages \ opcua \ client \ ua_client.py ", строка 114 в _receive self._call_callback (0, ua.UaStatusCodeError ( msg.Error.value)) Файл "C: \ Users \ chma02 \ AppData \ Roaming \ Python \ Python37 \ site-packages \ opcua \ client \ ua_client.py", строка 124, в _call_callback .format (request_id, self ._callbackmap.keys ()) opcua.ua.uaerrors._base.UaError: Будущий объект для запроса не найден: 0, обратные вызовы в списке являются dict_keys ([2]) Моя ошибка: () Traceback (последний последний вызов): Файл "C: / my files / python files / SMSPLCSIMULATIONV2-master (1) /SMSPLCSIMULATIONV2-master/clientcomm_v1.py", строка 28, в файле opc_client_connect self.client.connect (), файл "C: \ Users \ chma02 \ AppData \ Roaming \ Python \ Python37 \ site-packages \ opcua \ client \ client.py ", строка 259, в файле connect self.create_session ()" C: \ Users \ chma02 \ AppData \ Roaming \ Python \ Python37 \ site-packages \ opcua \ client \ client.py ", строка 360, в файле create_session response = self.uaclient.create_session (params) Файл" C: \ Users \ chma02 \ AppData \ Roaming \ Python \ Python37 \ site-packages \ opcua \ client \ ua_client.py ", строка 267, в create_session data = self._uasocket.send_request (req uest) Файл "C: \ Users \ chma02 \ AppData \ Roaming \ Python \ Python37 \ site-packages \ opcua \ client \ ua_client.py", строка 78, в файле send_request data = future.result (self.timeout) «C: \ Users \ chma02 \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ concurrent \ futures_base.py», строка 434, в результате повышается TimeoutError () concurrent.futures._base.TimeoutError
Во время обработки вышеупомянутого исключения произошло другое исключение:
Трассировка (последний вызов был последним): файл "C: \ Users \ chma02 \ AppData \ Roaming \ Python \ Python37 \ site-packages \ opcua \ client \ client.py ", строка 271, в файле отключить self.close_session ()" C: \ Users \ chma02 \ AppData \ Roaming \ Python \ Python37 \ site-packages \ opcua \ client \ client.py ", строка 476, в close_session возвращает файл self.uaclient.close_session (True), файл "C: \ Users \ chma02 \ AppData \ Roaming \ Python \ Python37 \ site-packages \ opcua \ client \ ua_client.py", строка 291, в close_session data = self._uasocket.send_request (запрос) Файл "C: \ Users \ chma02 \ AppData \ Roaming \ Pyth в \ Python37 \ site-packages \ opcua \ client \ ua_client.py ", строка 76, в send_request future = self._send_request (запрос, обратный вызов, тайм-аут, тип сообщения) тип" C: \ Users \ chma02 \ AppData \ Roaming \ Python \ Python37 \ site-packages \ opcua \ client \ ua_client.py ", строка 67, в файле _send_request self._socket.write (msg)" C: \ Users \ chma02 \ AppData \ Roaming \ Python \ Python37 \ site-packages \ opcua \ common \ utils.py ", строка 118, в записи self.socket.sendall (data) OSError: [WinError 10038] Была предпринята попытка выполнить операцию с чем-то, что не является сокетом
Во время При обработке вышеуказанного исключения произошло другое исключение:
Трассировка (последний последний вызов): Файл "C: / мои файлы / python файлы / SMSPLCSIMULATIONV2-master (1) / SMSPLCSIMULATIONV2-master / clientcomm_v1.py ", строка 92, в comm.opc_client_connect () Файл "C: / my files / python files / SMSPLCSIMULATIONV2-master (1) /SMSPLCSIMULATIONV2-master/clientcomm_v1.py", строка 45, в файле opc_client_connect self.client.disconnect () Файл "C: \ Пользователи \ chma02 \ AppData \ Roaming \ Python \ Python37 \ site-packages \ opcua \ client \ client.py ", строка 274, в файле отключить self.disconnect_socket ()" C: \ Users \ chma02 \ AppData \ Roaming \ Python \ Python37 \ site-packages \ opcua \ client \ client.py ", строка 283, в файле disconnect_socket self.uaclient.disconnect_socket ()" C: \ Users \ chma02 \ AppData \ Roaming \ Python \ Python37 \ site- пакеты \ opcua \ client \ ua_client.py ", строка 248, в файлеnectnect_socket
return self._uasocket.disconnect_socket()
" C: \ Users \ chma02 \ AppData \ Roaming \ Python \ Python37 \ site-packages \ opcua \ \ client \ ua_client.py ", строка 154, в disconnect_socket self._socket.socket.shutdown (socket.SHUT_RDWR) OSError: [WinError 10038] Была предпринята попытка выполнить операцию с чем-то, что не является сокетом