-> Hier kostenlos registrieren
Hallo zusammen,
ich versuche zurzeit den Umrichter G120C von Siemens über Profibus mittels der Python library pyprofibus anzusteuern. Ich bin so weit gekommen, dass ich bis zum Data Exchange komme. Verwenden möchte ich gerne das Telegramm 1 da es recht simpel aufgebaut ist und für erste Testzwecke reicht.
Eins vorweg, wenn ich etwas falsch beschreibe oder ich einen Denkfehler eingebaut habe, würde ich mich über eine Anmerkung sehr freuen. Ich bin relativ neu im Profibus geschehen und lerne sehr gerne dazu!
Nur stehe ich vor dem Problem, das der Umrichter nicht auf meine geschickten Daten korrekt reagiert. Ich rolle das hier erst einmal für die Nachvollziehbarkeit von vorne auf.
In der folgenden Beschreibung beziehe ich mich auf diese Dokumentation von Siemens: G120C
Kapitel 7.2 (Seite 92 im PDF): Kommunikation über Profibus
Der Parameter p0922 ist im Umrichter auf dem Wert 1 eingestellt, da ich das Telegramm 1 verwenden möchte.
Das Telegramm 1 setzt sich aus 2x16 Bit zusammen, somit ergeben sich beim Versenden der Nutzdaten 4 Bytes. Das erste Feld ist das STW1 (Steuerwort), dieses spiegelt ein Bitfeld wieder welches auf Seite 96 beschrieben wird. Das zweite Feld ist der NSOLL_A (die Solldrehzahl).
Mein Vorhaben ist es, den Umrichter als erstes in den Anschaltzustand zu versetzten und die Motoren mit einer bestimmten Drehzahl anzusteuern.
Dafür habe ich folgendes Bitfeld zusammengestellt: 0000000001111111 oder lesbarer in Hex 0x7F für den Steuercode und für die NSOLL_A folgender Hex Wert 0xA1 (kann aber beliebig sein).
Das Ganze möchte ich wie gesagt über pyprofibus ansteuern. Dafür habe ich entsprechend auch schon ein kleines Programm geschrieben, welches die Slaves aus einer .conf Datei ausließt, den Slave mit der .gsd Datei einstellt und den Slave an den Master bindet (Master Addr. 2 und Slave Addr. 14).
Hier der Python code:
In der .conf ist auch das Telegramm 1 als Module eingehangen.
Wenn ich jetzt den debug trace sehe ich das das STW1 und auch der ASOLL_W korrekt als Hex über den Profibus verschickt wird. Jedoch bekomme ich vom G120C als response folgendes zurück in ZSW1 und der NIST_A:
ZSW1 = 0xEB40 (in Binär Kodiert mit den ZSW1 Bitfelder ergibt sich 1110101101000000)
NIST_A = 0x0000 (was ja auch logisch ist, da der Umrichter nicht eingeschaltet wird durch das STW1)
Beim initialen Handshake bestätigt der Slave den Master das er korrekt registriert wurde, auch habe ich schon mit dem Oszilloskop die Leitung abgehört, die Daten werden korrekt übertragen.
Meine Vermutung ist ein falsches Steuerwort oder ein Parameter im G120C der nicht richtig gesetzt ist.
Für die Nachvollziehbarkeit hänge ich die .conf und die .py noch hier an (die .gsd lasse ich aus rechtlichen Gründen außen vor)
Das ist akutell mein Stand, ich hoffe, das reicht fürs erste an Informationen, falls ich was vergessen ergänze ich das gerne.
Ich würde mich sehr über Antworten freuen, das würde mir sehr weiterhelfen!
Vielen Dank und einen schönen Abend
Malte
ich versuche zurzeit den Umrichter G120C von Siemens über Profibus mittels der Python library pyprofibus anzusteuern. Ich bin so weit gekommen, dass ich bis zum Data Exchange komme. Verwenden möchte ich gerne das Telegramm 1 da es recht simpel aufgebaut ist und für erste Testzwecke reicht.
Eins vorweg, wenn ich etwas falsch beschreibe oder ich einen Denkfehler eingebaut habe, würde ich mich über eine Anmerkung sehr freuen. Ich bin relativ neu im Profibus geschehen und lerne sehr gerne dazu!
Nur stehe ich vor dem Problem, das der Umrichter nicht auf meine geschickten Daten korrekt reagiert. Ich rolle das hier erst einmal für die Nachvollziehbarkeit von vorne auf.
In der folgenden Beschreibung beziehe ich mich auf diese Dokumentation von Siemens: G120C
Kapitel 7.2 (Seite 92 im PDF): Kommunikation über Profibus
Der Parameter p0922 ist im Umrichter auf dem Wert 1 eingestellt, da ich das Telegramm 1 verwenden möchte.
Das Telegramm 1 setzt sich aus 2x16 Bit zusammen, somit ergeben sich beim Versenden der Nutzdaten 4 Bytes. Das erste Feld ist das STW1 (Steuerwort), dieses spiegelt ein Bitfeld wieder welches auf Seite 96 beschrieben wird. Das zweite Feld ist der NSOLL_A (die Solldrehzahl).
Mein Vorhaben ist es, den Umrichter als erstes in den Anschaltzustand zu versetzten und die Motoren mit einer bestimmten Drehzahl anzusteuern.
Dafür habe ich folgendes Bitfeld zusammengestellt: 0000000001111111 oder lesbarer in Hex 0x7F für den Steuercode und für die NSOLL_A folgender Hex Wert 0xA1 (kann aber beliebig sein).
Das Ganze möchte ich wie gesagt über pyprofibus ansteuern. Dafür habe ich entsprechend auch schon ein kleines Programm geschrieben, welches die Slaves aus einer .conf Datei ausließt, den Slave mit der .gsd Datei einstellt und den Slave an den Master bindet (Master Addr. 2 und Slave Addr. 14).
Hier der Python code:
import struct
import pyprofibus
def main(confdir=".", watchdog=None):
master = None
config = pyprofibus.PbConf.fromFile(confdir + "/umrichter.conf")
master = config.makeDPM()
# The STW1 and the NSOLL_A
payload_data = struct.pack('!HH', 0x00F7, 0x00A1)
outData = {}
for slaveConf in config.slaveConfs:
slaveDesc = slaveConf.makeDpSlaveDesc()
# Register the slave at the DPM
master.addSlave(slaveDesc)
# Set initial output data.
outData[slaveDesc.name] = bytearray(payload_data)
master.initialize()
# Cyclically run Data_Exchange.
while True:
# Write the output data.
for slaveDesc in master.getSlaveList():
slaveDesc.setMasterOutData(outData[slaveDesc.name])
# Run slave state machines.
handledSlaveDesc = master.run()
# Get the in-data (receive)
if handledSlaveDesc:
inData = handledSlaveDesc.getMasterInData()
# Feed the system watchdog, if it is available.
if watchdog is not None:
watchdog()
if __name__ == "__main__":
import sys
sys.exit(main())
In der .conf ist auch das Telegramm 1 als Module eingehangen.
Wenn ich jetzt den debug trace sehe ich das das STW1 und auch der ASOLL_W korrekt als Hex über den Profibus verschickt wird. Jedoch bekomme ich vom G120C als response folgendes zurück in ZSW1 und der NIST_A:
ZSW1 = 0xEB40 (in Binär Kodiert mit den ZSW1 Bitfelder ergibt sich 1110101101000000)
NIST_A = 0x0000 (was ja auch logisch ist, da der Umrichter nicht eingeschaltet wird durch das STW1)
Beim initialen Handshake bestätigt der Slave den Master das er korrekt registriert wurde, auch habe ich schon mit dem Oszilloskop die Leitung abgehört, die Daten werden korrekt übertragen.
Meine Vermutung ist ein falsches Steuerwort oder ein Parameter im G120C der nicht richtig gesetzt ist.
Für die Nachvollziehbarkeit hänge ich die .conf und die .py noch hier an (die .gsd lasse ich aus rechtlichen Gründen außen vor)
Das ist akutell mein Stand, ich hoffe, das reicht fürs erste an Informationen, falls ich was vergessen ergänze ich das gerne.
Ich würde mich sehr über Antworten freuen, das würde mir sehr weiterhelfen!
Vielen Dank und einen schönen Abend
Malte
Anhänge
Zuletzt bearbeitet: