ich möchte mittels eines einfachen Scriptes unter Zuhilfenahme der
libnodave eine Verbindung zu einer Siemens SPS herstellen.
Da ich programmiertechnisch noch in den Kinderschuhen stecke,
hoffe ich, das mir jemand weiterhelfen kann.
Hier ist mein Script.
Code: Alles auswählen
#!/usr/bin/python
import ctypes
import os
# .............................................................
# Dateipfad der Libnodave Datei im aktuellem Verzeichnis
Dateipfad = os.getcwd()
#DLL_LOC = Dateipfad + '/' + ('libnodave.dll') # Windows
DLL_LOC = Dateipfad + '/' + ('libnodave.so') # Linux
dave = ctypes.cdll.LoadLibrary(DLL_LOC)
#..............................................................
# Debug on
dbg = dave.daveSetDebug('daveDebugAll')
#print dbg
# .............................................................
daveSysInfo = 0X03
ip = "192.168.1.20" # IP Adresse LOGO Modul
port = 102
ph = 0 # Porthandle
di = 0 # Dave Interface Handle
dc = 0 # Dave Connection Handle
# ..............................................................
# Open connection
ph = dave.openSocket(port, ip)
if ph > 0:
print "Port Handle O.K."
else:
print "Port Handle N.O.K."
di = dave.daveNewInterface(ph, ph, 'IF1', 0,'daveProtoISOTCP243', 'daveSpeed187k')
print "di :", di
res = dave.daveInitAdapter(di)
if res == 0:
print "Init Adapter O.K."
else:
print "Init Adapter N.O.K."
dc = dave.daveNewConnection(di, 0, 1, 0 ) # daveNewConnection(di, MPI, rack, slot)
print "dc: ", dc
res = dave.daveConnectPLC(dc)
dave.daveSetTimeout(di, 5000000)
print "res: ", res
buf = ctypes.create_string_buffer(100)
print "buf :", buf
if res == 0:
#daveReadBytes(daveConnection, int area, int DB, int start, int len, void * buffer);
res2 = dave.daveReadBytes(dc, daveSysInfo, 'daveDB', 1 , 2, 0)
print "ReadBytes " + str(res2)
dave.daveDisconnectPLC(dc);
dave.closePort(ph)
/usr/bin/python -u "/home/achim/TestLOGO/LOGOTCP.py"
openSocket: enter OpenSocketopenSocket: OpenSocket: socket is 3
openSocket: Connected to host: 192.168.1.20
openSocket: setsockopt Success 0
Port Handle O.K.
di : 141470904
Init Adapter O.K.
dc: 141582448
res: 0
buf : <ctypes.c_char_Array_100 object at 0xb7772c44>
PDU header:
0:0x32,0x01,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,
plen: 14 dlen: 0
Parameter:
0:0x04,0x01,0x12,0x0A,0x10,0x02,0x00,0x02,0x05,0x34,0x03,0x00,0x00,0x08,
_daveExchange PDU number: 65535
Unknown protocol on interface IF1
D.H. für mich:
Die Verbindung zur SPS steht, das Problem liegt im Befehl ReadBytes.
Ich habe schon viel Probiert und auch aus den mitgelieferten Beispielscripten versucht
den Befehl richtig zu Programmieren, klappt aber nicht.
Auch hier im Forum ist die Libnodave schon angesprochen, werde ich aber auch nicht schlauer draus.
Gruß
RoterMilan