Twincat XAE und der Simulink Coder

rafox

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich bin ein totaler SPS Anfänger. Ich möchte eine SPS programmieren und kann dafür auf den SimulinkCoder zurückgreifen. Mit dem Simulink Coder kann ich schon ganz gut umgehen (einbindung, parameterübergabe etc klappt!) aber nun stehe ich vor einem recht speziellen Problem.

ich möchte für eine Parameteridentifikation einen Messdatensatz in Twincat aufnehmen.

im zweiten schritt soll mein Twincat Programm dann die Parameter einer Übertragungsfunktion erstmal raten und diese an eine mit simulink erstellte und eingebundene Funktion übergeben. diese soll mit den Parametern einen Sprungversuch ausführen die die sprungantwort soll wiederum aufgezeichnet werden und mit den gemessenen daten verglichen werden (least squares). mit einem optimieralgorithmus soll das solange wiederholt werden bis meine Modellübertragungsfunktion annähernd gleiche werte wie das system ausgibt.

nun ist meine frage: lässt sich ein mit simulink erstelltes und mit dem coder übersetztes modul wie eine funktion und schnell (also natürlich nicht in echtzeit ;) , sondern die normale simulink-simuliergeschwindigkeit ;) ) ausführen?

wie gesagt ich bin ein anfänger in Sachen SPS, ich habe mir schon InfoSys u.a. angeschaut aber viel Futter wird einem da ja nicht gegeben. für anfänger bitte immer alles ganz einfach erklären:ROFLMAO:

Über jegliche Hilfe würde ich mich sehr freuen.

wie gesagt ich nutze Twincat XAE (Twincat 3.1) mit hoffentlich demnächst OScat. und matlab2012b.

Beste grüße
rafox
 
Moin,

kurze Antwort: ja! Mit beiden Möglichkeiten!

Du meintest du bist SPS Anhänger, verwendest Du den PLC Coder von Mathworks? Oder wirklich den Simulink Coder und das TE1400 von Beckhoff?

Erste Lösung: Mit dem PLC Coder von Mathworks wird aus dem Simulink Modell SPS Coder erzeugt. Hat die Nachteil, dass man hier wirklich nur Standardblöcke verwenden kann. Diese werden beim Bauprozess durch SPS Code-Schnipsel ersetzt. Sobald man also embedded Matlab oder C Code einsetzt kann man dieses Produkt nicht mehr verwenden.

Besser Lösung: TE1400 + Simulink Coder von Beckhoff. Hier gibt es diese Einschränkungen nicht. Es wird ein TwinCAT-Modul erzeugt. Dieses kann man beliebig häufig instanziieren und entweder direkt an eine Task hängen und es ausführen lassen oder es aus anderen Modulen heraus aufrufen. Aus der SPS heraus hat man auch Zugriff auf das Prozessabbild und auch die interenen Parameter (wenn man das erlaubt). Den Zustand des Moduls kann man jederzeit in TwinCAT sehen, hier wird das Blockschaltbild aus Simulink noch einmal dargestellt und die Parameter und Signalwerte online dargestellt (ähnlich dem Online Monitoring in der SPS). Kurz gesagt geht! Für letzteres gibt es auch Sample Code von Beckhoff .. der steht aber noch nicht im Netz .. also einfach mal nachfragen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
achso gerade noch gesehen
"nun ist meine frage: lässt sich ein mit simulink erstelltes und mit dem coder übersetztes modul wie eine funktion und schnell (also natürlich nicht in echtzeit , sondern die normale simulink-simuliergeschwindigkeit ) ausführen? " Ja es lässt sich in Echtzeit ausführen .. alles andere macht auch keinen Sinn! Wenn du mit der SPS kommunizieren willst müsstest du sonst eigenständig für synchronität sorgen.

Es gibt auch die Möglichkeit das Modul schneller oder langsamer laufen zu lassen (z.B. für Echtzeitsimulationen) aber in deinem Fall macht das keinen Sinn!

Für den Fall das du das Modul in Simulink ausführen willst gäbe es noch das TE1410 (interface für Matlab) .. das ist im Prinzip eine ADS-Verbindung zwischen Simulink und TwinCAT, die man grafisch konfigurieren kann. Dann könnte dein Model tatsächlich in Simlink ablaufen und würde mit der SPS Kommunizieren.
 
Ich möchte das aus Simulink erstellte Modul ja einem Optimieralgorithmus übergeben, der solange Parameterwerte ausprobiert, bis er was passendes gefunden hat. Das Modul wird also gut und gerne 500mal aufgerufen. Das Modul soll als Funktion arbeiten und mir ein Array mit zeitstempeln und den jeweiligen sprungantwortdaten des Modells liefern. mit modelldaten und messdaten wird least squares berechnet und dementsprechend die aktuelle güte des modells bewertet.
wie funktioniert nun die kommunikation zwischen meinem Mainprogrramm und dem Modul genau? wie kann ich ein SImulinkModell als Programmfunktion deklarieren, sodass sie eben nicht nicht echtzeit ausgeführt wird...?

oder macht man sowas ganz anders?

beste grüße
rafi
 
Du verdrehst hier ein paar grundsätzliche Dinge! Das Modul MUSS im Echtzeitkontext aufgerufen werden nur halt nicht selbst zyklisch angetriggert durch eine Task! Ich mach ein Beispiel heute Abend, bin nur gerade mit dem Handy unterwegs.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab es noch nicht geschaft ein einfaches Sample zu machen. Es wird bei der Generierung eines TwinCAT Moduls aus Matlab/ Simulink herraus immer auch ein SPS-Funktionsbaustein mit generiert, der eine Art Wrapper darstellt. Den kannst du Dir schonmal ins Projekt reinholen. Alles was du dann noch machen musst, ist die ObjectID des Simulink-Moduls in der Deklaration zuweisen, und dann kannst du das sofort verwenden.
Es gibt mittlerweile in den aktuellen 3.1 Versionen (Buildnummer < 4009) noch schönere Möglichkeiten. Da kann man diese Module auch dynamisch zur Laufzeit instanziieren ... Sowie das Attribute 'TcInitSymbol' mit dem man dann Initialisierungsparameter in einem seperaten Reiter (also nicht im Programmcode) festlegen kann. ... Zur einfachen übersicht wie es prinizpiell funktioniert reicht aber auch der bereits generierte Funktionsbaustein. Du findest ihn unter C:\TwinCAT\3.1\CustomConfig\Modules\<dein Modulename>\ ...PLCopenPOU.xml. Diesen kannst du über den PLCopen-XML-Import in dein Projekt reinholen. Bei Fragen einfach melden.
 
Servus,
Ich "missbrauche" am besten mal diesen Thread, da mein Anliegen hier auch hereinpasst. Und zwar nutze ich schon seit längerem Matlab/Simulink für Modellbildung und Reglersynthese. Die Regler/Beobachter Struktur soll nun auf ein Beckhoff System übertragen werden, mit dem ich mich gar nicht auskenne. Also wurde mir das TE1400 Target empfohlen, weil dort die komplette Logik ohne Kenntnisse von TC3/61311 zu realisieren sei. Also habe ich mir das TC3+TE1400 heruntergeladen und möchte nun testen, ob das überhaupt funktioniert.

Ich hab nur ein Problem: ( nachdem die Installation schon etwas verwirrend war)
Und zwar sagt mir Simulink nach dem Auslösen von "Build" immer, dass ich kein "twincattestcertificate" hätte.
Die Frage ist: wo soll ich das her bekommen? Ich habe das TC3 ja noch nichtmal gestartet? Das Ziel der Matlab integration ist ja eigentlich auch gänzlich auf diese Engineering Umgebungen verzichten zu können(so hab ich das zumindest verstanden).
Naja in dem "Beckhoff Infosys" steht dazu: Demomodus mit nur 100 Blöcken für nicht kommerzielle Zwecke (wo mein Test zugehört). Das reicht mir. Aber wie aktiviere ich den? Wenn ich in dem License Manager bei den Blöcken TC1000,1100,1200,1210,1300,1320, sowie TE 1400 häkchen setze und die Sieben Tage Testlizenz anklicke wird das Problem nicht gelöst.

So ich hoffe mein Text war nicht zu verwirrend.
Grundsätzlich will ich einfach M-S 2013a mit TC3 in Verbindung bringen um zu gucken wie und ob das funktioniert, um das dann evtl. weiter zu verwenden.

Vielen Dank schon mal im vorraus!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Neals,

erstmal Danke für deine schnelle Antwort!!! Jetzt bin ich eine Fehlermeldung weiter :p .
Und zwar musste ich erstmal Visual Studio 12 professional nachinstallieren, damit ich überhaupt eine Eingabeaufforderung bekomme. (Ich glaube TC3 hat einfach VS10 ohne Eingabeaufforderung mitinstalliert)
Jetzt funktioniert die Codegenerieung schon einmal. Allerdings wollte ich auch die Publish Funktionalität testen.
Ich habe wie InfoSys es befiehlt weiter gemacht und nun kommt der Fehler:

"Publish Procedure Failed"

in der logtxt steht mehrfach, dass eine" tcDef.h(108) : fatal error c1083: Datei (include) kann nicht geöffnet werden : ntddk.h No Such file or directory [C:\Twincat\test01_tct\test01]

was das nun wieder zu bedeuten hat?
Muss ich noch etwas vorher bzw. davor konfigurieren, was nicht direkt in der Anleitung zum TE1400 steht wie das Driver Signing?

Gruß Damler
 
Hallo Neals,

danke nochmals für die Hilfe. Ich hatte zwar Winddk installiert aber er will Version 8 partout nicht haben, daher musste ich es Deinstallieren und winddk7.1 installieren.
Es ist mir schon fast peinlich aber ...Nun habe ich einen weiteren Fehler:
Bei Publish Module kann er die "tcmatsim.props" in twincatdir/3.1/sdks/VSprops\ nicht finden.
Ich hab nachgesehen, so eine Datei mit dem Namen gibt es auf dem ganzen Rechner nicht.
 
Hi,
ich häng mich mal hier in diesem Thread mit ein.
Nutze momentan das TE 1400 und das TE 1410 in Verbindung mit der aktuellen TC3.1
Bei der Anzeige von Simulinkmodellen innerhalb TC3 hab ich das Problem, dass das Blockdiagramm nicht alle Verbindungen anzeigt. Lediglich die Verbindungen, welche blau eingefärbt sind werden später während der Laufzeit aktualisiert.
Ist das eine Einstellungssache?
Danke
Gruß AndyBlockdiagramm.PNG
 
Hi,
ich häng mich mal hier in diesem Thread mit ein.
Nutze momentan das TE 1400 und das TE 1410 in Verbindung mit der aktuellen TC3.1
Bei der Anzeige von Simulinkmodellen innerhalb TC3 hab ich das Problem, dass das Blockdiagramm nicht alle Verbindungen anzeigt. Lediglich die Verbindungen, welche blau eingefärbt sind werden später während der Laufzeit aktualisiert.
Ist das eine Einstellungssache?
Danke
Gruß AndyAnhang anzeigen 25592

Ja und nein :D

nicht alle Signale werden vom Simulink Coder so generiert, dass man deren Werte abgreifen kann. Bei denen wo man es kann werden diese blau dargestellt. Man kann es aber insofern beeinflussen, als man Signale in Simulink als Testsignale definieren kann. Dann werden die ebenfalls blau.

Testsignale definieren ist ganz einfach: dem Signal in Simulink einen Namen geben und dann kann man in den Model settings auf den Signalnamen klicken und Testsignal anhacken.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Morgen,
danke mal für die schnelle Antwort. Die Signale hab ich insofern mal benannt, allerdings bei der Auswahl des Hakens für Testsignale war ich bisher noch nicht erfolgreich. Den Haken hab ich unter Signal Properties bei "Test Point" gesetzt. Hatte jedoch keine Auswirkung.
Beim Versuch den Haken in den Model Configuration Parameter beim Punkt TC Advanced - "Set testpouints at Simulink Scope..:" zu setzen stürzt Matlab ab... :sad:
ModellConfigurationParam.jpgSignalProperties.PNG
 
das kommt auf die Stellen darauf an. Wenn z.B. das Signal außer für Anzeigeelemene (wie das Scope) nicht mehr verwendet wird, wird es vom Coder wegoptimiert. Somit steht es auch für Test Points nicht mehr zur Verfügung.

Welche Version des TE1400 verwendest du? Und welche Matlab Version?
 
Ich nutze im Moment die Matlab R2013b (Version 8.2). TC3.1 läuft mit der Build 4016.5.
Aufgefallen ist mir dabei, sobald ich ein Gain in die Verbindung mit einbaue, dann wird mir das Signal wieder angzeigt.
In erster Linie geht es darum, Daten aus dem Bus unter TC Scope zu loggen, sofern nötig. Diese sollten dann direkt im Blockdiagramm greifbar sein.
 
Zurück
Oben