Hallo Community,
ich bin seit letzter Woche ebenfalls IP-Symcon Besitzer und möchte euch heute vorstellen, wie ich die Kommunikation zwischen IP-Symcon und einer Beckhoff Steuerung ohne Modbus Server realisiert habe.
Meine Konfiguration sieht wie folgt aus:
Beckhoff Steuerung:
Modell: CX9000-1001
Image: CX9000 LF 3.09f
IP Adresse: 192.168.178.111
Windows Virtual PC (Windows XP-Mode) auf Windows 7 Ultimate x64
IP Adresse: 192.168.178.50
Installierte Software:
IP-Symcon
Version: 2.4 #1984, 30.06.11
Twincat
Version: 2.11 R2, Build 2034
Grundvoraussetzung um zwischen IP-Symcon und einer Beckhoff Steuerung zu kommunizieren ist eine funktionierende Netzwerk und ADS Verbindung. ADS steht hier für das Beckhoff eigene Kommunikationsprotokoll, welches durch Message Router im Netzwerk gemanagt wird. Als Message Router kommt auf dem VirtualPC TwinCAT und auf dem CX die TwinCATCE PLC zum Einsatz.
Nachdem der Virtual PC in meiner Umgebung die feste IP Adresse „192.168.178.50“ erhalten hat und der CX unter der „192.168.178.111“ erreichbar ist kann die ADS Konfiguration beginnen.
Dazu verbindet man sich mit dem Tool „CeRHost.exe“, welches man von der Beckhoff Website laden muss, auf den CX.
Unter “My Device\Hard Disk\System” befindet sich das Programm “TcAmsRemoteMgr”, mit dem man die lokale AMS Net Id des CX einstellen kann. Da die IP Adresse des CX „192.168.178.111“ lautet habe ich die AMS Net Id “192.168.178.111.1.1“ gewählt. Unter „Remote Computers“ muss der Virtual PC auf dem IP Symcon läuft eingetragen werden. Da die IP Adresse für den Virtual PC „192.168.178.50“ lautet habe ich die AMS Net Id „192.168.178.111.1.1“ gewählt.
Nachdem die Einstellungen vorgenommen wurden muss der CX neugestartet werden. Ob die Ams Net Id korrekt übernommen wurden kann man mit dem Tool „CxConfig“ unter “My Device\Hard Disk\System” prüfen.
Als nächster Schritt muss auf dem Virtual PC TwinCAT als ADS Message Router eingerichtet werden.
Wer die Vollversion von Twincat nicht besitzt kann die Demo installieren oder alternativ die kostenlos TwinCAT ADS Communication Library bestellen.
Um Twincat als ADS Message Router für PHP zu konfigurieren öffnet man TwinCAT System Manager und wählt im linken Baum „SYSTEM-Konfiguration“ -> Reiter „Allgemein“ -> Schaltfläche „Zielsystem wählen…“ -> Schaltfläche „Suchen (Ethernet)…“ -> Schaltfläche „Broadcast Search“. Wenn der CX in der Liste erscheint einfach auf die Schaltfläche „Route zufügen“ klicken und eine statische Route zwischen TwinCAT und dem CX besteht.
Ob die Route korekt angelegt wurde kann man unter „SYSTEM-Konfiguration“ -> „Routing Einstellungen“ -> Reiter „Aktuelle Routes“ prüfen.
Um die lokalen AMS Net Id zu prüfen und gegebenen falls zu ändern findet man unter „C:\TwinCAT\ADS Api\TcAdsDll“ ein Tool namens „TcAmsRemoteMgr.exe“.
Um die ADS Verbindung zu testen findet man unter dem selben Pfad „C:\TwinCAT\ADS Api\TcAdsDll“ ein kleines Tool namens „TcAdsTest.exe“ mit dem man einen ADS Port öffnen und anschließend einen Test Transfer ausführen kann.
Um nun per PHP eine Verbindung zur entfernten SPS aufbauen zu können muss die Beckhoff Twincat ADS-Script-DLL von „C:\TwinCAT“ nach „C:\WINDOWS\system32“ kopiert werden und mit „regsvr32 c:\Windows\System32\TcScript.dll“ registriert werden.
Die ADS-Script-DLL dient als Schnittstelle zwischen PHP und dem TwinCAT Message Router.
Das eigentliche PHP Script, welches ich im Sekundentakt und bei einem Schaltflächen Event durch IP-Symcon aufrufen lasse sieht folgender maßen aus:
<?
try{
//Neues Objekt von TcScript.dll anlegen
$tcscript = new COM('TcScript.TcScriptSync');
}catch (Exception $error) {
echo "Es konnte kein Objekt von TcScript.dll angelegt werden!";
}
try{
//Verbindung zur SPS aufbauen
$tcscript->ConnectTo("192.168.178.111.1.1", 801);
}
//Prüfen ob ein Fehler aufgetreten ist
catch (Exception $error) {
echo "Keine Verbindung zur SPS!";
}
try{
//ADS Status lesen
$tcscript->ReadAdsState();
}
//Prüfen ob ein Fehler aufgetreten ist
catch (Exception $error) {
echo "Keine ADS Kommunikation!";
}
//Auf Betätigung von Schaltflächen prüfen
if($IPS_SENDER == "WebFront"){
//Schaltfläche identifizieren
if($IPS_VARIABLE == 31881){
//Wenn Wert 1
if ($IPS_VALUE == 1){
$tcscript->WriteVar(".in_start", true);
$tcscript->WriteVar(".in_start", false);
}
}
}
//Status Variablen abfragen
try{
//Variable lesen
$read_var = $tcscript->ReadVar(".out_on_off");
//Wenn Wert true
if ($read_var == true){
//Schaltfläche makieren
SetValue(33136,1);
}
//Wenn Wert false
if ($read_var == false){
//Schaltfläche makieren
SetValue(33136,0);
}
}
//Prüfen ob ein Fehler aufgetreten ist
catch (Exception $error){
//Makierung der Schaltfläche entfernen
SetValue(33136,-1);
}
?>
Ich hoffe, ich konnte dem einen oder anderen helfen.
Fragen oder Anregungen bitte Posten.
Viel Spaß beim Testen!