Spannendes Projekt!
Unser Antriebstreiberpaket ist auch herstellerunabhängig konzipiert. Allerdings nicht so, dass ich jeden beliebigen Umrichter anhängen kann, sondern dass für jeden Umrichter ein Treiber eingeklinkt werden muss. Die Challange dabei war, dass Umrichter UND Servos damit betrieben werden müssen.
Die wesentlichen Eckpfeiler:
1. Programmierung als FB mit statischen Instanzdaten - alles symbolisch!
2. Auswahl des Umrichters über einen Eingang ("Protokoll").
3. Das "Protokoll" enthält implizit Informationen darüber, wieviele IO-Daten gelesen/geschrieben werden können.
4. In den statischen Daten ist Speicher für die maximale Protokolllänge (aktuell 10 Wörter) als BYTE-Array reserviert.
5. Übergabe der IO-Daten mitttels Hardware-ID (Eingang vom Typ HW_IO), lesen/schreiben der Daten mittels GETIO_PART und SETIO_PART.
6. Festlegung jener Schnittstellensignale, die für den Betrieb jedes Umrichters notwendig sind (Sollgeschwindigkeit, Istgeschwindigkeit, Sollrampe, Iststrom, Motor dreht, .....) und Zusammenfassung in generischen Datentypen (PI-, PQ- und globale Daten)
7. Am FB-Beginn werden die Daten mittels GETIO_PART in einen Rohdatenbereich eingelesen, dann mittels "CASE" je nach "Protokoll" die PI-Rohdaten dekodiert und auf die globale Struktur umkopiert. Daten oder Signale, die der Umrichter nicht liefert, werden mit "sicheren" Werte beschrieben (z.B. wenn der Umrichter keinen Ausgangsstrom liefert, wir dieser in den globalen Daten mit "0" beschrieben und das "Ausganggstrom gültig"-Flag auf 0 gesetzt. Für verschiedene Darstellungsformate muss halt hier eine einheitliche Umrechnung festgelegt werden, z.B. dass die Istgeschwindigkeit immer in U/min angezeigt wird.
8. In einem generischen Bereich kann man mit den Istwerten anstellen was man will und Sollwerte/Freigaben/Betriebsarten generieren.
9. Am Ende des Bausteins gibt es wieder ein CASE, welches gemäß Protokoll die generischen Sollwerte und Freigaben wieder umrichterspezifisch codiert und mittels SETIO_PART auf den Umrichter schreibt.
Kommt ein neuer Umrichtertyp dazu, muss halt der Dekodier-/Kodierbereich entsprechend erweitert werden, ansonsten bleibt alles gleich. Für den Anwender ist faktisch kein Unterschied zu sehen, welches Umrichterfabrikat dahintersitzt.
Im Detail ist es natürlich etwas komlexer - vor allem wenn man einen Positionierbetrieb realisieren will. Zudem sind viele Aufgaben in Unter-FCs gekapselt, um den Code kompakt zu halten. Ich hab mir z.B. auch die Mühe gemacht, über die HW-ID die konfigurierte Länge der PI/PQ-Daten auszulesen und zu kontrollieren, ob die Länge zum Protokoll passen kann. Ein umfangreiches Meldesystem, .....
lg