Passerelle de communication ADS entre une VM Linux et le PLC (Beckhoff CX9020) en utilisant le module pyads
Je veux concevoir une passerelle de communication, entre une machine virtuelle (VM) sous linux (Debian9) et le PLC (Beckhoff CX9020), en utilisant le module pyads de python.
Je me suis appuyé sur les deux liens ci-dessous
https://pyads.readthedocs.io/en/latest/quickstart.html
Voici mon code Python
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| import pyads
print ("=== set_local_address");
pyads.open_port ()
pyads.set_local_address ('1.2.3.4.1.1')
print (pyads.get_local_address ())
pyads.close_port ()
print ("=== add route");
pyads.open_port ()
pyads.add_route ('5.82.237.216.1.1', '192.168.0.20')
pyads.close_port ()
print ("=== add route to plc");
SENDER_AMS = '1.2.3.4.1.1'
PLC_IP = '192.168.0.20'
PLC_USERNAME = 'Administrator'
PLC_PASSWORD = 'x'
ROUTE_NAME = 'RouteToMyPC'
HOSTNAME = '192.168.0.15' # or IP
PLC_AMS_ID = '5.82.237.216.1.1'
pyads.add_route_to_plc (SENDER_AMS, HOSTNAME, PLC_IP, PLC_USERNAME, PLC_PASSWORD, route_name = ROUTE_NAME)
print ("=== init connection to plc");
plc = pyads.Connection (PLC_AMS_ID, 851, PLC_IP)
print ("=== open connection")
plc.open ()
print ('Connected')
v1 = plc.read_by_name ("MAIN.v1", pyads.PLCTYPE_INT)
print (v1) |
J'arrive à accéder au PLC, mais je n'arrive pas no écrire ni à lire. EN bas le message d'erreur
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Connecting...
2021-01-21117:17:59+0100 Info: Connected to 192.168.0.20
Connected
Traceback (most recent call last):
File "rw_pyads.py", tine 34, in <module>
value = plc.read by_name('MAIN.vr, pyads.PLCTYPE INT)
File "/usr/local/lib/python3.8/site-packages/pyads/ads.py", line 761, in read_by_name
return adsSyncReadByNameEx(
File "/usr/local/lib/python3.8/site-packages/pyads/pyads_ex.py", line 977, in adsSyncReadByNameEx
handle = adsGetHandle(port, address, data name)
File "/usr/local/lib/python3.8/site-packages/pyads/pyads_ex.py", line 770, in adsGetHandle
handle = adsSyncReadWriteReqEx2(
File "/usr/local/lib/python3.8/site-packages/pyads/pyads_ex.py", line 638, in adsSyncReadWriteReqEx2
raise ADSError(err code)
pyads.pyads ex.ADSError: ADSError: timeout elapsed (1861).
2021-01-21117:18:04+0100 Info: connection closed by remote |
Est-ce-que quelqu'un a déjà fait ça ?