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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?