FAQ: alles rund um TwinCAT 2

Chräshe

Level-2
Beiträge
873
Reaktionspunkte
274
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Ihr,

Wer macht mit, das Beckhoff FAQ etwas auszubauen?
Es muss ja nicht jeder über die selben Stolpersteine fallen.
Fügt einfach den Beitrag an, ich nehme ihn dann verlinkt in die Liste auf...

Gruß
Chräshe

.----------------------------------------------------------------
Inhalt:

- Linkliste für Einsteiger
- CPU-Steuerungs-Simulation mit Arbeits- PC
- Persistente Daten
- CE basierende Supplementprodukte installieren Am Beispiel von "TwinCAT PLC HMI CE" (Kostenpflichtig mit Lizenzschlüssel)
- Einstellen der Monitorauflösung bei der Verwendung der TwinCAT PLC Visualisierung
- Überblick über die Beckhoff Visualisierungen
- Überblick über die Visualisierungen von Drittanbieter
- Aktuelle TwinCAT 2.11 R3 - Version
- Nützlich: Bereichsüberschreitungen beim Zugriff auf Arrays verhindern
- Nützlich: Datei-Funktionsbausteine zum lesen und schreiben von Dateien
- TwinCAT Webserver erklärt



 
Zuletzt bearbeitet:
Linkliste für Einsteiger:

Beckhoff Information System
Hier ist alle Dokumentation über Beckhoff zu finden. Die Struktur ist nach Produktgruppen und Artikel aufgebaut. Wer nicht weiß, was er sucht, hat schlechte Karten... ;-)

TwinCAT Quick Start
Kurzanleitung um einen schnellen Überblick zu bekommen.

YouTube:
TwinCAT Quick Start (englisch)
erste Verbindung mit Beckhoff CX einrichten (englisch)
TwinCat Einführung - Teil 1 von 5 (deutsch, leider bescheidenes Bild)

Der Programm-Editor von TwinCAT ist weitgehendst mit dem von CoDeSys identisch. Für den Anfang halte ich die beiden Handbücher von CoDeSys als eine gute Ergänzung. Gerade die Grundlagen sind mit der Suchfunktion in den beiden PDF schnell gefunden. Bei Beckhoff wird in der Online-Hilfe mitunter sehr viel mehr gefunden, als einem lieb ist...
http://www.wago.com/wagoweb/documentation/759/ger_manu/333/m07590333_00000000_1de.pdf (SPS)
http://www.wago.com/wagoweb/documentation/759/ger_manu/333/m07590333_00000000_2de.pdf (VISU)

YouTube:
CoDeSys Quick Start Teil 1

Open-Source auf Basis der IEC61131-3 zum mitmachen: die OSCAT -Bibliothek
Willkommen bei OSCAT
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
CPU-Steuerungs-Simulation mit Arbeits- PC:

TwinCAT kann wie CoDeSys zum kennen lernen ganz ohne spezielle Hardware getestet werden.
Bei TwinCAT gibt es aber die Auswahl "Simulation" im Editor nicht.

Alternativ reichen aber folgende Einstellungen im System-Manager:

- den System-Manager öffnen
- unter „Datei/Neu“ eine neue Datei öffnen
- unter „Aktionen/Konfiguration“ aktivieren“
- die Frage „Neustart in Run-Modus?“ mit „OK“ bestätigen
=> unten rechts sollte das Feld welches die CPU-auslastet grün werden – die Steuerung ist bereit...
 
Zuletzt bearbeitet:
Persistente Daten:

Daten die erhalten bleiben - nach Spannungsausfall oder Online-Change

Bei den Busklemmen-Controller waren remanente und persistente Daten je nach Gerät eine Selbstverständlichkeit. Umso mehr enttäuscht war ich, als ich bei den PC-basierenden Systemen auf das Thema gestoßen bin.
Es gibt inzwischen für jedes Problem ein Lösung. Damit ihr euch nicht durch die unendlichen Weiten des InfoSys quälen müsst, eine kurze Zusammenfassung.


1. Variante: Die CPU verfügt über eine 1-Sekunden-USV

Aktuell verfügen Folgende Steuerungen über die 1s USV: C6915, CX5000, CX8000, CP62xx, CP77xx
Weitere werden hoffentlich folgen...

Hier ist es ausreichend, die Variablen als „PERSISTENT“ zu deklarieren und im Programm die Funktion FB_S_UPS aufzurufen...

Code:
 PROGRAM MAIN
 [FONT=courier new]VAR
     fbUPS       : FB_S_UPS;    (* UPS-FB instance *)
      eUpsMode    : E_S_UPS_Mode    := eSUPS_WrPersistData_Shutdown;  
     ...
 END_VAR

     fbUPS(eUpsMode := eUpsMode);    (* immer im Main als erste Anweisung stehen lassen *)[/FONT]


2. Variante: Die CPU verfügt über keine USV

Variablen die „PERSISTENT“ deklariert sind, können aus dem Programm heraus mit der Funktion WritePersistentData gespeichert werden. Leider findet das speichern auf der Flash- Karte statt. Dieser Speicher hat eine begrenzte Anzahl an Speicherzyklen, bis er ausfallen kann. Daher sollte man nie hergehen und einfach alle x Sekunden das schreiben auslösen.

In dem Beispiel IPC_X86.zip ist eine schöne Lösung für dieses Problem. Alle zu speichernden Variablen sind unter VAR PERSISTENT in einer Struktur abgelegt. Die Funktion MEMCMP vergleicht diese Struktur mit einer Kopie im normalen Speicherbereich. Sind alle Werte identisch passiert nichts. Sobald ein Wert geändert wird, z.B. durch die Eingabe eines Bedieners..., werden die neuen Werte in die Kopie übertragen (siehe Funktion MEMCPY) und mit WritePersistentData die Variablen auf die Flash- Karte gesichert.

Für Rezepturen, Einstellungen, Positionslisten usw. ist das absolut zufriedenstellend.

Nicht verwenden sollte man diese Variante, wenn Variablen dabei sind, die sich schnell und häufig ändern. Das könnte zum Beispiel bei Stückzählern, Betriebsstundenzähler oder remanenten Schrittketten der Fall sein. Da kommt die 3.Variante ins Spiel...


3. Variante: Die Verwendung des NOVRAM

NOVRAM kann beliebig oft beschrieben und gelesen werden. Die Netzteile für die CX10xx bringen bereits 8k NOVRAM mit.
Die entsprechenden Variablen müssen nur als Ausgang (%Q*) deklariert und im System-Manager mit dem NOVRAM verknüpft werden.
Anzumerken ist, dass die CPU-Belastung mit wachsender NOVRAM- Belegung stark anwächst, da dieser Speicher Zyklisch gelesen und geschrieben wird!

Somit ist die 3.Variante nur als Ergänzung zur 2.Variante interessant.
 
Zuletzt bearbeitet:
CE basierende Supplementprodukte installieren

Am Beispiel von "TwinCAT PLC HMI CE" (Kostenpflichtig mit Lizenzschlüssel)

Das Supplement kann hier runter geladen werden:
http://beckhoff.de/default.asp?download/supplement_sys.htm
Links die Software, rechts ist der Link für die Dokumentation – hab zuerst nur die Doku gefunden...:oops:

Folgende Anleitung ist ganz OK:
http://infosys.beckhoff.de/index.ph...ce/html/tcplcvisu_hmi_ce_install.htm&id=21005

Zwei Hinweise sind vielleicht noch ganz hilfreich:

1) Wenn man das Produkt "TwinCAT PLC HMI CE" gleich mit der CPU bestellt, ist es in der Regel vorinstalliert und man kann sofort loslegen.
Leider bestätigen Ausnahmen die Regel. Obwohl man das Häkchen für die VISU an der Steuerung an und abwählen konnte, war das Supplement nicht, oder zumindest nicht richtig installiert. Die Fehlermeldung beim versuch das SPS- Programm zu übertagen lautete:
„Die Target Visualisierung wird vom Zielsystem nicht unterstützt!“
In dem Fall muss "TwinCAT PLC HMI CE" noch mal installiert werden.

2) Es steht in der Anleitung ganz unscheinbar:
"Beenden Sie das CE Gerät einmalig nach der Installation per "Start-> Suspend. Erst dann werden die Einstellungen in der Registry auf die Compact Flash des CE Geräts gesichert. "

Ja, das kann ich bestätigen. Wenn man nur den Hauptschalter umlegt, war die ganze Mühe umsonst.
Ich weiß, ihr lest die Anleitungen mindestens genau so sorgfältig wie ich. Darum erwähne ich das nochmal... ;)

Gruß
Chräshe
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Einstellen der Monitorauflösung bei der Verwendung der TwinCAT PLC Visualisierung:

Bei der Verwendung der TwinCAT PLC Visualisierung, ist es leider erforderlich, die Monitorauflösung an 2 Orten einzustellen.

1.) Einstellung der Bildschirmauflösung in der Entwicklungsumgebung, was im wesentlichen die Größe vom weißen Feld bei der Projektierung bestimmt. Sonst weiß man beim erstellen der VISU gar nicht, wie viel Platz zur Verfügung steht.

Dazu muss der Eintrag in folgender Datei angepasst werden:
"C:\TwinCAT\PLC\TwinCAT PLC Control.ini"
Eintrag:
VisuWidth=640 (640 ändern in z.B. 800 oder 1024)
VisuHeight=480 (480 ändern in z.B. 600 oder 768)

Damit die CE-Steuerung auch weiß, was sie für einen Monitor zur Verfügung hat, muss das dort nochmal separat eingestellt werden.

2.) Änderung lokal am CE-Gerät:
“Start” --> “Settings” --> “Control Panel” --> “Display” (oder so ähnlich)
--> Restart per "Start-> Suspend notwendig, damit die Änderung gespeichert wird!
 
Überblick über die Beckhoff Visualisierungen

PLC Control
Ist die Visualisierung, die automatisch in TwinCAT integriert ist. Auf dem Zielsystem muss nichts eingerichtet oder installiert werden.
Man hat auf alle Variablen aus dem Projekt Zugriff. Für die Inbetriebnahme ist das eine sehr komfortable Einrichtung...
Bereits vom kleinsten Controller bis zum dicksten PC kann diese VISU verwendet werden.
______________

PLC HMI
Kann als kostenpflichtiges Supplement nachinstalliert werden.
Fast wie „PLC Control“, nur dass es direkt auf dem Zielsystem läuft und für die Maschinenbedienung verwendet werden kann.
Es ist also auf jeden Fall ein eine PC- basierende Steuerung erforderlich.
Bei Änderungen im SPS-Programm muss die VISU leider gestoppt werden. :?
______________

PLC HMI CE
Die Windows CE-Variante für PC- basierende Steuerungen.
Onlineänderungen sind problemlos möglich.
Kann als kostenpflichtiges Supplement nachinstalliert werden.
Leider gibt es funktionelle Einschränkungen :|
______________

PLC HMI Web
Die webbasierte Variante für PC- basierende Steuerungen.
Kann als kostenpflichtiges Supplement nachinstalliert werden.
Leider gibt es funktionelle Einschränkungen :neutral:
Ein Client (Browser) benötigt zur Anzeige der web basierten Visualisierung TwinCAT PLC HMI Web eine Java-VM
 
Zuletzt bearbeitet:
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Überblick über die Visualisierungen von Drittanbieter

Das Kapitel "Third Party Produkte" gibt einen Überblick bestehender Visualisierungssysteme anderer Hersteller mit Anbindung an TwinCAT.

Die Liste ist längst noch nicht vollständig, es gibt noch mehr Hersteller als hier aufgeführt.
Persönlich habe ich mit den Geräten von Beijer sehr gute Erfahrungen gemacht.

Gloeru empfiehlt das Galileo von Eaton, das sehr einfach über TCP/IP ADS mit TwinCAT kommuniziert.
Sehr schön ist, dass es auch ein vernünftiges Mobil-Panel gibt.
Anbei die Anleitung...

Alternativ kann man auch mit Visual Basic, Visual C, Delphi, Java, …, eine Oberfläche selbst erstellen und mit ADS die Daten austauschen.

Gruß
Chräshe
 
Zuletzt bearbeitet:
Die Funktion Checkbound funktioniert wie folgt:
- Du legst eine Funktion mit den Namen Checkbounds an und kopierst den Code unten in die Funktion mit der Variablendeklaration.
- Im Code würde ich jeweils bei den beiden "Fehler-IFs" entweder je eine globale boolsche Variable setzen oder je eine INT-Variable hochzählen lassen.
-> Übersetzen und ausprobieren, weiter musst du nichts machen (Die Funktion muss NICHT aufgerufen werden, das macht TwinCAT selbst)

Bitte beachte, dass die Auslastung massiv und sprunghaft steigen kann, was im schlimmsten Fall zu Zykluszeitüberschreitungen führen kann!

Deshalb nur mit Vorsicht an realer Hardware ausprobieren. Das TwinCAT System kann jederzeit stoppen, was mit einem Totalausfall der SPS gleichzusetzen ist. Insbesondere Achsen können aufgrund von fehlenden Sollwert-Telegrammen unkontrolliert austrudeln!

Solange die Funktion mitübersetzt wird (also nicht "vom Übersetzen ausschliessen" -> grüne Schrift) ist sie scharf...

Zum Auswerten kann ein Breakpoint in die Funktion gesetzt werden, dann stoppt die Steuerung im Fehlerfall. Auch dies bitte ohne Hardware oder mit entsprechender Vorsicht durchführen...

Variablendeklaration:
Code:
FUNCTION CHECKBOUNDS : DINT  
VAR_INPUT
 index, lower, upper : DINT;
 END_VAR

Code:
Code:
IF index<lower THEN  
   CHECKBOUNDS := lower;
   -> giCheckBoundsLower := giCheckBoundsLower + 1;  
ELSIF index>upper THEN  
  CheckBounds := upper;
   -> gbCheckBoundsUpper = TRUE; 
ELSE
    CHECKBOUNDS := index; 
END_IF
 
Datei-Funktionsbausteine zum lesen und schreiben von Dateien.

Hier ein paar Links:
FB_FileOpen Öffnen einer Datei.
FB_FilePuts Einen Nullterminierten-String in eine Text-Datei schreiben.
FB_FileClose Schließen einer Datei.
...
Beispiel: Dateizugriff aus der SPS
CSV-Format Hilfsbausteine (ganz unten)

So weit ich mich noch erinnere, musst du aufpassen, dass immer nur eine File-Funktion aktiv ist.
Sonst kommt da eventuell was durcheinander. Viellicht ist das auch inzwischen intern abgefangen – das hab ich nicht mehr geprüft.

Zu beachten ist bei WinCE-Betriebssystemen, dass sich die Laufwerksbuchstaben zum normalen Windows unterscheiden:
Code:
[COLOR=#000000][FONT=courier new]
[/FONT][/COLOR][B][COLOR=#008000][FONT=courier new]'C:\';           (* XP/W7 PC *) [/FONT][/COLOR][COLOR=#000000][FONT=courier new]
[/FONT][/COLOR][COLOR=#ee82ee][FONT=courier new]'\Hard Disk\';   (* WinCE CF-Karte *)[/FONT] 
[FONT=courier new]'\Hard Disk2\';  (* WinCE lokaler USB-Stick *)[/FONT][/COLOR][/B]
 
TwinCAT Webserver erklärt

Einführung
Mit dem JavaScript Zugriff auf ein TwinCAT System, kann eine eigene webbasierte Visualisierung erstellt werden. Es werden keine zusätzlichen Lizenzen benötigt. Die Installation besteht aus drei Schritten. Zuerst muss der IIS (Internet Information Service) von Windows installiert und konfiguriert werden, welcher als Webserver zur später die Visualisierung hostet. Danach muss ein Zugang zum ISS erstellt werden, sofern ein Zugriff von ausserhalb (Internet) erfolgen soll. Jetzt erst wird JavaScript programmiert, um aus TwinCAT die gewünschten Werte zu erhalten.

Schritt 1, IIS installieren
Alle nötigen Schritte hat Beckhoff im Infosys zusammengefasst. Es empfiehlt sich, die Anleitung ganz genau zu befolgen. Der IIS kann auch auf einem anderen Rechner als der SPS installiert und genutzt werden. Die Steuerung sollte jedoch sich im gleichen lokalen Netz befinden.
Win7: http://infosys.beckhoff.com/content/1033/tcadswebservice/html/webservice_install_7.htm?id=17781
Win XP: http://infosys.beckhoff.com/content/1033/tcadswebservice/html/webservice_install_xp.htm?id=17782
Win CE : http://infosys.beckhoff.com/content/1033/tcadswebservice/html/webservice_install_ce.htm?id=17783
Sind die Tests gemäss Infosys erfolgreich verlaufen, kann zu Schritt 2 übergegangen werden.

Schritt 2, Netzwerkkonfiguration
Wer die Webvisu nur im lokalen Netz nutzen möchte, kann diesen Schritt überspringen. Soll die WebVisu übers Internet erreichbar sein, sind netzwerkseitig ein paar Überlegungen und Einstellungen nötig. Da die meisten wohl keine fixen IPs haben, muss ein dynamischer DNS (oft DynDNS oder DDNS genannt) her. Einige Router-Hersteller bieten diesen Service standardmässig an. (Weitere Infos zu DDNS gibt’s zuhauf bei Google) Danach muss ein Portforwarding auf dem Router aktiviert werden. Und zwar leitet der Router die Anfrage vom Internet (Welche ja an den Router gesendet wurde) an den Rechner/SPS mit den IIS weiter. Dazu wird eingehender Port geöffnet und an den lokalen Rechner an Port 80 weitergeleitet. Ab sofort ist der IIS aus dem Internet erreichbar! (Bitte denkt an die Sicherheit um den Zugriff zu kontrollieren!)

Schritt 3 – Erstellen der JavaScript und HTML Dateien
Hier soll zuerst auf die JavaScript Bibliothek von Beckhoff eingegangen werden. Dazu bitte die Demo-Datei herunterladen und das Programm laden. Danach werden wir hier Schritt für Schritt die Konfiguration durchgehen. (Link Infosys)

Code:
[B]var NETID = ""; // Empty string for local machine;             
var PORT = "801"; // TC2 PLC Runtime = 801, TC3 PLC Runtime = 851[/B]
Hier muss, falls der IIS nicht auf der SPS selbst läuft, die NetID der Steuerung eingetragen werden, sowie der korrekte Port.

Code:
[B]var SERVICE_URL = "http://localhost/TcAdsWebService/TcAdsWebService.dll"; // HTTP path to the TcAdsWebService;[/B]
Wichtig hier ist, dass die URL aus Sicht des Browsers (Also der Notebooks, Tablet, Smartphone etc) gesetzt werden muss. Entweder muss hier die lokale IP oder sogar die öffentliche IP, bzw den DynDNS Name eingetragen werden. (Wer eine bessere Lösung weiss, darf sich gerne melden!)

Code:
[B]var general_timeout = 500;
var readLoopDelay = 500;[/B]
Je nach Steuerung empfiehlt es sich, das general_timeout zu erhöhen. Read LoopDelay je nach Bedarf, 500ms ist übers Internet schon ziemlich schnell.

Code:
[B]var handlesVarNames = [
            "MAIN.byteValue",[/B]
In diese Liste werden die gewünschten PLC-Variablen eingetragen. Globale Variablen benötigen einen führenden Punkt (wie in der Visu)

Code:
var [B]hByteValue[/B] = reader.readDWORD(); 
var [B]hWordValue[/B] = reader.readDWORD();
Hiermit werden die Handles erzeugt. Jede Variable die gelesen werden soll, braucht einen Handle.

Code:
//  "MAIN.byteValue" // BYTE                     
readSymbolValuesWriter.writeDINT(TcAdsWebService.TcAdsReservedIndexGroups.SymbolValueByHandle); // IndexGroup                     
readSymbolValuesWriter.writeDINT([B]hByteValue[/B]); // IndexOffset = The target handle 
readSymbolValuesWriter.writeDINT([B]1[/B]); // size to read
Diese Blöcke können nach belieben kopiert werden, es muss jedoch der korrekte Handle und die benötigte Anzahl Bytes eingetragen werden.

Code:
[B]26 + (8 * 4)[/B], // Length of requested data + 4 byte errorcode per variable;
Das hier ist wohl die schwierigste Zeile. Und zwar muss die Grösse der gewünschten Daten berechnet werden. Jede Variable hat unabhängig ihres Typs 4 Bytes Errorcode. Zusätzlich benötigt jede Variable ihrem Typ ensprechend Bytes. Boolsche Variablen benötigen ebenfalls ein Byte.
Beispiel: Eine Real Variabe: 4 Byte für den Real-Wert + 4 Byte Errorcode = 8 Byte, eine LREAL-Variable benötigt 12 Byte...

Code:
[I][COLOR=#a9a9a9]//  "MAIN.realValue" // REAL                     
var realValue = reader.readREAL();[/COLOR][/I]
Besser:
[B]var rWindSpeed = parseFloat(reader.readREAL()).toFixed(2);                     
var rTideSpeed = parseFloat(reader.readREAL()).toFixed(1)[/B];
Danach werden die Werte ausgelesen. Ich empfehle, anstelle des Beckhoffvorschlags die Werte zu Floats zu parsen. Mit dem Befehl .toFixed(Komamstellen) kann die Anzahl gewünschter Kommastellen gewählt werden. Zudem liegt die Variable als Zahl und nicht als String vor. (z.B. für Berechnungen nötig)

Code:
[B]td_MoorNW[/B].innerHTML = rMoorNW; 
[B]td_MoorNE[/B].innerHTML = rMoorNE;
Mit diesen Zeilen werden die Werte in die entsprechenden Tabellenzellen eingefügt.

Code:
<tr bgcolor=#CCCCCC>             
     <td>Mooring NW: [t]</td>             
     <td id="[B]td_MoorNW[/B]"></td>      <- Hier wird der Wert angezeigt
 </tr> 
        <tr bgcolor=#B8EDFF>             
    <td>Mooring NE: [t]</td>             
    <td id="[B]td_MoorNE[/B]"></td>       <- Hier wird der Wert angezeigt       
</tr>
Was dann im HTML-Teil entsprechend gekennzeichnet werden muss.

Code:
[I][B]Ganz am Anfang:[/B][/I]
    Date.prototype.today = function(){          
return ((this.getDate() < 10)?"0":"") + this.getDate() +"/"+(((this.getMonth()+1) < 10)?"0":"") + (this.getMonth()+1) +"/"+ this.getFullYear()                  
};            
 //For the time now             
Date.prototype.timeNow = function(){  
                return ((this.getHours() < 10)?"0":"") + this.getHours() +":"+ ((this.getMinutes() < 10)?"0":"") + this.getMinutes() +":"+ ((this.getSeconds() < 10)?"0":"") + this.getSeconds();                 };

[I][B]Und nach den Wertzuweisungen folgende Zeile:[/B][/I]
[COLOR=#a9a9a9]td_MoorNE.innerHTML = rMoorNE;[/COLOR]
[B]var newDate = new Date();  
div_log.innerHTML  = "LastSync: " + newDate.today() + " - " + newDate.timeNow();[/B]
Damit wird bei jedem Update der Werte die aktuelle Zeit des Browsers ausgegeben. Ist sehr nützlich bei Zugriffen über das Internet und grossen Latenzzeiten (z.B. Satelittenuplink)

Das ganze sieht dann z.B. so aus:
Screenshot_2013-12-07-19-38-05.png

Ich möchte hier auch noch die Bibliothek von NieZuSpaet erwähnen:
@Guga: dann der Vollständigkeit halber noch der Hinweis auf die TAME-Javascript-Lib, die den ADSWebService etwas nutzerfreundlicher macht.

http://tomcx.github.io/tame3/
Anhang anzeigen 22549Anhang anzeigen 22550Anhang anzeigen 22551

Auf die Verknüpfung mit Highcharts werde ich (vielleicht) später noch eingehen, da man damit wirklich sehr schöne Grafiken automatisch und animiert erzeugen kann!
ADCP.jpg Wind.jpg

Für Anregungen bin ich sehr dankbar, bitte benutzt doch diesen Thread oder PM, um diese FAQ sauber zu halten...
 
Zuletzt bearbeitet:
Zurück
Oben