Schnittstellen
Die CPUs der XC Serie haben bis zu 4 Kommunikationsschnittstellen. Die XC3-14 Modelle haben nur einen RS232 COM1 Port. Dieser wird zum Download des Programms genutzt, kann aber auch an ein HMI oder Peripherie angeschlossen werden. Die XC3-14 kann nicht erweitert werden. Die größeren CPUs haben 2 serielle Schnittstellen und können um eine serielle Schnittstelle erweitert werden. Die XC5 verfügt zusätzlich über einen CAN-Bus-Anschluss. Hier die Auflistung der Schnittstellen:
- COM1 - RS232 Programmierport, auf allen Geräten vorhanden, freie Parametrierung, unterstützt Modbus RTU Master / Slave und freie serielle Kommunikation
- COM2 - RS485 Schnittstelle, auf XC3-14 nicht vorhanden, freie Parametrierung, unterstützt Modbus RTU Master / Slave und freie serielle Kommunikation
- COM3 - zusätzliche RS232/485 Schnittstelle, optional als CPU-Erweiterungskarte, freie Parametrierung, unterstützt Modbus RTU Master / Slave und freie serielle Kommunikation
- COM4 - CAN Schnittstelle, nur in XC5 vorhanden
Die Schnittstellen können über die XCPPro Software oder über Flash-Register parametriert werden. In XCPPro findet ihr die Einstellungen im Projektbaum. Dort könnt ihr Einstellungen vornehmen und per Write PLC an die CPU übertragen. Informationen dazu wo diese Einstellungen in den Flashregistern liegen findet ihr in Kapitel 7 des Programmierhandbuchs.
Die PIN-Belegung für COM1 und COM2. Ein passendes Kabel findet ihr im Shop.
Nützlicher Tipp: Wiederherstellung der Standardparameter für COM1
Es kann sein, dass man COM1 so verstellt, dass man mit dem PC keinen Zugriff auf die CPU hat. In diesem Fall hilft ein kleiner Trick, die Standardparameter für COM1 wieder herzustellen. Dazu einfach den PC per seriellem Kabel mit der CPU verbinden. Dann in XCPPro im Menü "Online" die Funktion "Stop PLC When Reboot" auswählen. Der PC sendet nun einen speziellen Reset Code für COM1. Damit die CPU diesen übernimmt muss sie neu gebootet werden (Spannungsversorgung kurz unterbrechen) und zwar während der PC den Stop-Befehl an die CPU sendet. Danach ist die CPU im Stop und COM1 hat wieder Standardparameter und man kann per PC auf die CPU zugreifen. Hat mich auch schon einmal gerettet.
Kommunikation mit der Peripherie
Für die Kommunikation mit Peripheriegeräten stehen prinzipiell 3 Protokolle zur Verfügung: Modbus RTU, freie serielle Kommunikation und CAN. Achtung: nur die XC5-Modelle haben eine CAN-Bus-Schnittstelle.
Modbus Master Kommunikation
Alle 3 seriellen COM-Ports unterstützen Modbus Master Kommunikation. Station-Number und serielle Parameter können auf allen Ports frei konfiguriert werden. Die Implementierung von Modbus Kommunikation ist sehr einfach, spezielle Modbus-Befehle stehen zur Verfügung. Zur Erinnerung, eine sehr vereinfachte Beschreibung des Protokolls. In Modbus werden bestimmte Speicherbereiche eines Geräts auf Modbus-Adressen gemappt. Hier die wichtigsten:
- Coils - Bits lesen / schreiben
- Discrete Inputs - Bits nur lesen
- Holding Registers - Words lesen / schreiben
- Input Registers - Words nur lesen
Für den Zugriff auf diese Adressbereiche gibt es verschiedene Befehle, hier die wichtigsten:
- 01 Read Coil
- 02 Read Input Bit
- 03 Read Holding Register
- 04 Read Input Registers
- 05 Write Single Coil
- 06 Write Single Holding Register
- 15 Write Multiple Coils
- 16 Write Multiple Holding Registers
In der XC-SPS wurden die Modbus-Befehle genau so umgesetzt, der Einsatz ist sehr einfach.
- COLR - 01 Coil Read; die Syntax ist COLR Ziel-Stations-ID (Word) Zielstartadresse (Word) Länge (Word) Ablagebit (Bit) Port (Word)
Beispiel: COLR K20 K10 K3 M0 K1 - Liest über Port 1 aus Station 20 die Coils 10 bis 12 und legt sie in M0 bis M2 ab.
(Statt Konstanten können natürlich auch Datenregister übergeben werden.) - INPR - 02 Input Read; die Syntax: INPR Ziel-Stations-ID (Word) Zielstartadresse (Word) Länge (Word) Ablagebit (Bit) Port (Word)
Beispiel: INPR K12 K0 K3 M0 K2 - Liest über Port 2 aus Station 12 die Inputbits 0 bis 2 und legt sie in M0 bis M2 ab. - REGR - 03 Register Read; die Syntax: REGR Ziel-Stations-ID (Word) Zielstartadresse (Word) Länge (Word) Ablageregister (Word) Port (Word)
Beispiel: REGR K3 K0 K3 D0 K3 - Liest über Port 3 aus Station 3 die Holding-Register 0 bis 2 und legt sie in D0 bis D2 ab. - INRR - 04 Input Register Read; die Syntax: INRR Ziel-Stations-ID (Word) Zielstartadresse (Word) Länge (Word) Ablageregister (Word) Port (Word)
Beispiel: INRR K3 K0 K3 D0 K3 - Liest über Port 3 aus Station 3 die Input-Register 0 bis 2 und legt sie in D0 bis D2 ab. - COLW - 05 Coil Write, schreibt ein einzelnes Bit; die Syntax ist COLW Ziel-Stations-ID (Word) Zieladresse (Word) lokales Quellbit (Bit) Port (Word)
Beispiel: COLW K20 K10 X0 K1 - Beschreibt über Port 1 auf Station 20 das Coil 10 mit dem Inhalt von X1. - REGW - 06 Register Write, schreibt ein einzelnes Register; die Syntax ist REGW Ziel-Stations-ID (Word) Zieladresse (Word) lokales Quellregister (Word) Port (Word)
Beispiel: REGW K20 K3 CD10 K1 - Beschreibt über Port 1 auf Station 20 das Holding Register 3 mit dem Inhalt von Counter 10. - MCLW - 15 Multiple Coil Write, schreibt mehrere Coils; die Syntax ist MCLW Ziel-Stations-ID (Word) Zieladresse (Word) Länge (Word) lokales Quellbit (Bit) Port (Word)
Beispiel: MCLW K2 K10 K5 Y0 K1 - Beschreibt über Port 1 auf Station 2 die Coils 10 bis 14 mit dem Inhalt Ausgängen Y0 bis Y4. - MRGW - 16 Multiple Register Write, schreibt mehrere Holding-Register; die Syntax ist MRGW Ziel-Stations-ID (Word) Zieladresse (Word) Länge (Word) lokales Quellregister (Word) Port (Word)
Beispiel: MRGW K5 K4 K7 FD8210 K1 - Beschreibt über Port 1 auf Station 5 die Holding-Register 4 bis 10 mit dem Inhalt der Flash-Register 8210 bis 8216.
In diesen Flash-Registern stehen übrigens die Schnittstellenparameter für COM1 ;-). Näheres dazu in Kapitel 7 des Handbuchs.
Die Kommunikation mit Modbus-Peripherie ist also denkbar einfach.
Tipp: Um eine zyklische Modbus-Kommunikation zu implementieren bieten sich Sequence-Blocks an. Per positive Flanke auf unseren Shaker M8013 kann ich jede Sekunde über einen Sequence-Block mehrere Modbus-Kommunikationsbefehle ausführen und zum Beispiel die komplette Peripherie abfragen. Achtung: Auch in der Konfigurationsmaske im Sequence-Block müssen die Parameter der Modbusbefehle als Konstanten (z.B. K10 oder H20) oder Datenregister übergeben werden, sonst gibt's eine Fehlermeldung.
Freie Serielle Kommunikation
Freie serielle Kommunikation eignet sich für serielle Geräte, die kein Modbus unterstützen wie zum Beispiel Barcode-Reader. Alle drei möglichen seriellen COM-Ports unterstützen freie Kommunikation. Um freie Kommunikation zu aktivieren, muss die Stationsadresse des Ports auf 255 gesetzt werden. Es können in der Konfiguration für die freie Kommunikation auch ein Start und End Byte hinzugefügt werden. Diese werden dann automatisch mit jedem Senden oder Empfangen hinzugefügt bzw. vor dem Ablegen im Register entfernt. 8 und 16 Bit Kommunikation ist möglich, in der 8 Bit Kommunikation werden nur die Low Bytes berücksichtigt, die High Bytes werden ignoriert. Weitere Informationen zur Parametrierung der seriellen Kommunikation findet ihr in Kapitel 7 des Programmierhandbuchs.
Die zwei Befehle zur freien Kommunikation sind einfach zu implementieren:
- SEND Word (Startadresse-Quellregister) Word (Länge) Word (Port) - Beispiel SEND D0 K1 K2 sendet den Inhalt von D0 über COM2.
Während des Sendevorgangs auf COM2 ist M8132 gesetzt. - RCV Word (Startadresse-Zielregister) Word (Länge) Word (Port) - Beispiel RCV D0 K1 K2 schreibt das erste Word aus COM2 in Register D0.
Während des Empfangsvorgangs auf COM2 ist M8134 gesetzt.
Den schnellsten Zugang zu den Kommunikationsmerkern für die drei Ports findet ihr im Comment Editor.
Tipp: Um standardisierte freie serielle Kommunikation zu implementieren bieten sich Sequence-Blocks und Config-Blocks mit Free Comm Config an. Die Konfiguration der freien Kommunikation ist in beiden Blocks völlig gleich, im Sequence Block könnt ihr zusätzlich andere sequenzielle Aktionen einfügen. Über diese Free Comm Config Blocks lassen sich einfache eigene serielle Protokolle implementieren.
Peer2Peer Kommunikation
Für die Peer2Peer Kommunikation mit anderen THINGET SPS oder SPS anderer Hersteller eignen sich Modbus RTU besonders gut. Da die XC Serie sowohl Modbus Master als auch Modbus Slave beherrscht, kann sie mit Geräten fast aller Hersteller kommunizieren. Die Mapping-Adresse für die XC-Serie als Modbus Slave findet ihr im nächsten Abschnitt. Über die CAN-Schnittstelle kann die XC5 SPS darüber hinaus Daten mit hoher Geschwindigkeit mit anderen XC5 austauschen.
CAN
Die XC5-Modelle haben zusätzlich zu COM1, COM2 und der optionalen seriellen COM3 Schnittstelle eine CAN-Schnittstelle. Dafür sind zwei Kontake, einmal CAN+ und einmal CAN- an der CPU vorhanden. Die XC5 unterstützt zwei CAN-Kommunikationsarten zur Kommunikation mit anderen XC5-Steuerungen und freie CAN-Kommunikation. CANopen wird derzeit noch nicht unterstützt.
Die CAN-Stationnummer lässt sich über den Projektbaum links als auch über ein Flash-Register einstellen. CAN-Kommunikation als Master-Slave Protokoll mit anderen XC5-Steuerungen werden in der XC5 über folgende Befehle realisiert:
- CCOLR - CAN Coil Read; die Syntax ist CCOLR Ziel-Teilnehmer-ID (Word) Quelladresse (Word) Länge (Word) Ablagebit (Bit)
Beispiel: CCOLR K20 K10 K3 M0 - Liest aus Teilnehmer 20 die Coils 10 bis 12 und legt sie in M0 bis M2 ab.
(Statt Konstanten können natürlich auch Datenregister übergeben werden.)
- CCOLW - CAN Coil Write; die Syntax ist CCOLW Ziel-Teilnehmer-ID (Word) Zieladresse (Word) Länge (Word) Quellstartbit (Bit)
Beispiel: CCOLR K10 K5 K3 M0 - Beschreibt auf Teilnehmer 10 die Coils 5 bis 7 mit dem Inhalt von M0 bis M2.
- CREGR - CAN Register Read; die Syntax ist CREGR Ziel-Teilnehmer-ID (Word) Quelladresse (Word) Länge (Word) Ablageword (Bit)
Beispiel: CREGR K20 K10 K3 D2 - Liest aus Teilnehmer 20 die Register 10 bis 12 und legt sie in D2 bis D4 ab.
- CREGW - CAN Register Write; die Syntax ist CREGW Ziel-Teilnehmer-ID (Word) Zieladresse (Word) Länge (Word) Quellstartregister (Bit)
Beispiel: CREGR K10 K5 K3 D7 - Beschreibt auf Teilnehmer 10 die Register 5 bis 7 mit dem Inhalt von D7 bis D9.
Zusätzlich lässt sich ein zyklischer Austausch mit andere XC5-Teilnehmern über die CAN-Konfiguration im Projektbaum oder über Flash-Register konfigurieren. Näheres findet ihr in Kapitel 7 des Programmierhandbuchs.
Freie CAN-Kommunikationwird in der XC5 über die Befehle CSEND (Can Send) und CRCV (Can Receive) realisiert. Details findet ihr auch hierüber in Kapitel 7 des Programmierhandbuchs.
Kommunikation mit dem HMI
Die einfachste Möglichkeit, ein HMI in Kombination mit der XC-Serie zu nutzen, bieten die THINGET TouchWin TH HMI des gleichen Herstellers. Damit sind HMI wirklich Plug & Play, war selbst überrascht wie einfach es funktioniert. Einfach HMI anschließen (Kabel gibt's im Shop), im TouchWin neues Projekt öffnen, die XC am PLC Port auswählen und losvisualisieren. Adressiert wird einfach über die Speicherbereiche, die ihr inzwischen recht gut kennen solltet.
Zur Kommunikation mit anderen HMI bietet sich das Modbus Slave Protokoll an. Alle 3 möglichen seriellen COM-Ports unterstützen Modbus Slave Kommunikation, parallel zur Modbus-Master Kommunikation. Hier die Mapping-Tabelle dazu:
Auch wenn nicht alle Bits wirklich beschreibbar sind, liegen sie im Modbus-Bereich der beschreibbaren Coils (Adresse beginnt mit 0). Die Register liegen im Bereich der Holding-Register (Adressierung mit 4 beginnen, dann die 5 beschriebenen Stellen). Weitere Details zur Kommunikation findet ihr in Kapitel 7 des Programmierhandbuchs.