ich möchte in Python ein Programm schreiben, das es mir ermöglicht,
aus einer Siemens SPS Steuerung Daten auszulesen. Hierfür habe
ich von der Fa. MHJ eine DLL (ComDrvS7). Mit Visual Basic habe ich auch keine Probleme,
aber mit Python weiß ich nicht, wie ich an die Daten komme, die von der DLL zurückgegeben werden.
Hier mal mein Testprogramm:
Code: Alles auswählen
import ctypes
from ctypes import windll, c_int, c_wchar, c_char_p, byref, c_short, c_buffer, create_string_buffer
Handle = -1
ErrorString = ""
ErrorCode = c_int(-1)
Version = ""
dllfrei = 0
cpu_slot = c_int(2) # Bei S7 - 300
error = 0
mpihandle = c_int(-1)
einleitung = 0
ipadr = ('192.168.100.205')
mpiadr = c_short(0) # Dummy Wert da Kommunikation über TCP IP Direkt
Status = 0
# ---------------------------
mhjdll = windll.MPIA32_V40_VB
# ---------------------------
# ************************************
# * * * * * MPI DLL Error * * * * *
# ************************************
def dll_error():
error = mhjdll.MPI_A_GetDLLError(Handle, ErrorString, ErrorCode)
if error == ( 0 ):
print "DLL Fehler !"
if error == ( 1 ):
print "DLL O.K."
return(error)
# ******************************************
# * * * * * MPI DLL Freischalten * * * * *
# ******************************************
def dll_freischalten():
KName = "--------------"
KOrt = ----------"
KonstStr = "MPI-DLL MHJ&Ing.-Buero Weiß"
RegnrKundeneingabe = "-----------"
dllfrei = mhjdll.MPI_A_MPIFreischalten(KName, KOrt, RegnrKundeneingabe, KonstStr)
if dllfrei == ( 0 ):
print "DLL ist nicht Freigeschaltet"
if dllfrei == ( 1 ):
print "Alle DLL Funktionen sind Freigeschaltet"
return (dllfrei)
# ***********************************************
# * * * * * MPI DLL TCP IP Einleitung * * * * *
# ***********************************************
def dll_tcp_ip_direkt():
einleitung = mhjdll.MPI_A_Einleitung_TCP_IP_Direct(byref(mpihandle), ipadr , 2, byref(ErrorCode) )
if einleitung == ( 0 ):
print "Fehler Einleitung !"
if einleitung == ( 1 ):
print "Einleitung O.K."
return(einleitung)
# ************************************************************
# * * * * * MPI DLL Kommunikation zum AG aufbauen * * * * *
# ************************************************************
def dll_komm_aufbauen():
aufbauen = mhjdll.MPI_A_KommuZumAGAufbauen(mpihandle, mpiadr, byref(ErrorCode))
if aufbauen == ( 0 ):
print "Keine Kommunikation mit dem AG !"
if aufbauen == ( 1 ):
print "Kommunikation mit dem AG aufgebaut"
return (aufbauen)
# ***************************************************
# * * * * * MPI DLL Kommunikation beenden * * * * *
# ***************************************************
def dll_komm_beenden():
beenden = mhjdll.MPI_A_KommuBeenden(mpihandle, byref(ErrorCode))
if beenden == ( 0 ):
print "Fehler Kommunikation beenden !"
if beenden == ( 1 ):
print "Kommunikation beendet"
return (beenden)
# **********************************************
# * * * * * MPI DLL Read Merker Byte * * * * *
# **********************************************
def ReadMerkerByte():
mb = mhjdll.MPI_A_ReadMerkerByte(mpihandle, byref(c_int(62)), 2, Status, byref(ErrorCode))
mb_wert = Status
print mb_wert
dll_error()
#dll_freischalten()
dll_tcp_ip_direkt()
dll_komm_aufbauen()
ReadMerkerByte()
dll_komm_beenden()
dll_komm_aufbauen() und dll_komm_beenden() funktionieren
Einwandfrei.
Mit der Funktion ReadmerkerByte() möchte ich z.B. ab Merker 62,
2 Bytes aus der Steuerung auslesen. Der Wert sollte in der Variable
-Status- stehen. Mir ist es bis jetzt noch nicht gelungen, diesen
Wert zu erhalten.
Wer kann mir helfen ?
MfG
Achim
,