# Codesys Anlage visualisieren und simulieren



## filli (1 Februar 2019)

Hallo,

ich bin, was das Thema SPS angeht, noch relativ neu und stehe gerade vor einem Problem wo ich etwas Rat gebrauchen kann.

Ich habe einen Versuchsaufbau, welcher eine Industrieanlage abbildet. Dieser wird über eine Wago 750-SPS angesteuert.
Programmiert wird das ganze mit Codesys und dem PFC200-Addon. Auf der SPS soll eine Visualisierung (Web-VISU) laufen, wo der Nutzer Eingaben machen kann um die Anlage zu beeinflussen. Soweit noch kein Problem.

Aber:
Ich will/muss ebenfalls eine Simulation der gesteuerten Anlage erstellen, um am realen Modell nichts kaputt zu machen.
Wir haben hier noch andere Anlagen mit Siemens-PLC's und da nutzen wir hierfür SPS-VISU, das kann aber nicht mit Codesys (oder doch?).

Meine Idee war jetzt, einen/mehrere Tasks laufen zu lassen, die die Simulation erledigen. Also z.B.:
"Wenn Ausgang XY TRUE ist, dann zähle Zeitabhängig eine Variable hoch, die die aktuelle Motorposition abbildet".
Dann soll bei bestimmten Positionen Eingänge gesetzt werden, an denen im realen Modell Taster hängen. Dazu hab ich jetzt folgende Fragen:

- Wie kann ich Hardwareeingänge in der Simulation aus der programmierten Software heraus setzen?
- Kann ich einzelne Tasks auf die Simulation beschränken? (Die Anlagensimulation soll ja nicht auf der realen Hardware laufen)
- Wie kann ich am besten die Softwareteile der Anlagensimulation von der eigentlichen Steuerungssoftware trennen? (Mehrere Projekte? Mehrere Applikationen? Separate Tasks, siehe vorige Frage? Ganz anders?)


Weiterhin möchte ich auch den Zustand der simulierten Anlage visualisieren, das muss bzw. soll aber auch nicht auf der realen SPS laufen.
Ich brauche also zwei Visualisierungen.


Gibt es vielleicht auch separate Tools (sowas wie SPS-VISU), mit denen man sowas machen kann? Geld ist da erstmal zweitrangig.

Ich wäre sehr dankbar für ein Paar Ideen. Gern auch nur irgendwelche Schlagworte nach denen ich suchen kann.

Viele Grüße
filli


----------



## sa1bot (1 Februar 2019)

Da du nicht schreibst welche  CODESYS Version (V2.3 oder V3) gehe ich im Jahre 2019 einfach mal von V3 aus.
CODESYS Selbst hat einen Simulationsmodus, der ist aber an sich dazu da um Applikation ohne Steuerungs laufen zu lassen.
Den Simulationsmode für deine Anlage musst du dir selbst programmieren.
Nicht so ganze einfach dein Vorhaben aber es gibt ein paar Ansätze.

"- Wie kann ich Hardwareeingaenge in der Simulation aus der programmierten Software heraus setzen?"
Ich kenne jetzt keine Einstellung in CODESYS welches das Überschreiben der der Hardwareeingänge erlaubt außer das manuelle Forcen.
Allerdings kann man das sehr einfach Abbilden indem man seine I/Os auf eine eigene I/O Variableliste mappt, und man für die Variablen
im der Applikation eine weitere Liste verwendet, und am Anfang des Main Zyklus kopiert man die Werte um von I/O Variablen in Applikationsvariablen.
Wenn man jetzt in den Simulationsmodus geht, unterbindet man einfach den Kopiervorgang, und schon kann man die Applikationsvariablen setzen wie man möchte.

"- Kann ich einzelne Tasks auf die Simulation beschrÃ¤nken? (Die Anlagensimulation soll ja nicht auf der realen Hardware laufen)"
Nicht direkt, was man machen kann ist einen Simulationstask zu definieren und diesen niederprior mit hoher Zykluszeit aufzurufen 
oder man macht den Task Statusgesteuert und Verknüpft ihn mit einer "SimulationOn" BOOL und er wird nur aufgerufen solange
diese True ist.

"- Wie kann ich am besten die Softwareteile der Anlagensimulation von der eigentlichen Steuerungssoftware trennen?"
Wieso willst du diese Trennen ? Alles in ein Projekt packen und entweder über Bedingungen oder Tasks aufrufen oder nicht.
Da bist du als Programmierer frei wie und wann du was aufrufst.
Das Projekt selbst kann ja in den Geräte/POU Fenstern mit Ordnern frei gliedern.

"Ich brauche also zwei Visualisierungen."
Erstelle dir die Visus welche du für Simulation noch brauchst
Füge in einem VisuManager zwei WebVisus ein,nen bei eine die Start HTM WebVisuSimu.htm
und wähl eine andere StartVisu aus, aus den SimuVisus.

Die beiden WebVisus werden dann unabhängig von einander laufen.


----------



## filli (5 Februar 2019)

sa1bot schrieb:


> _gehe ich im Jahre 2019 einfach mal von V3 aus._



Jup, genau.



sa1bot schrieb:


> I_ndem man seine I/Os auf eine eigene I/O Variableliste mappt, und man für die Variablen_
> _im der Applikation eine weitere Liste verwendet, und am Anfang des Main Zyklus kopiert man die Werte um von I/O Variablen in Applikationsvariablen._
> _Wenn man jetzt in den Simulationsmodus geht, unterbindet man einfach den Kopiervorgang, und schon kann man die Applikationsvariablen setzen wie man möchte._



Danke dafür, dass ich da nicht selbst drauf gekommen bin... 



sa1bot schrieb:


> _Man macht den Task Statusgesteuert und Verknüpft ihn mit einer "SimulationOn" BOOL und er wird nur aufgerufen solange_
> _diese True ist._



So hab ich es jetzt auch gemacht.



sa1bot schrieb:


> _Wieso willst du diese Trennen ? Alles in ein Projekt packen und entweder über Bedingungen oder Tasks aufrufen oder nicht._
> _Da bist du als Programmierer frei wie und wann du was aufrufst._
> _Das Projekt selbst kann ja in den Geräte/POU Fenstern mit Ordnern frei gliedern._



Die Sache ist, ich muss dass dann Leuten in die Hand geben, die etwas ... naja ... unbedarft sind. Die sollten nach Möglichkeit nur das Zeug sehen, was sie auch selbst programmieren, also die Steuerungslogik und die Bediener-Visu.


Danke erstmal,
filli


----------



## sa1bot (6 Februar 2019)

Hallo filli

"Die Sache ist, ich muss dass dann Leuten in die Hand geben, die etwas  ... naja ... unbedarft sind. Die sollten nach Möglichkeit nur das Zeug  sehen, was sie auch selbst programmieren, also die Steuerungslogik und  die Bediener-Visu."
Was man hier noch machen kann ist, dass man unter POUs->Projekteinstellungen->Benutzer und Gruppen
seinem Projekt eine Benutzerverwaltung gibt.
https://help.codesys.com/webapp/_cds_dlg_project_settings_user_groups;product=codesys;version=3.5.13.20
Dann kann man bei den einzelnen Projektbausteinen über Rechtslick->Eigentschaften->Zugriffe
einstellen welche Nutzergruppen welche Bausteine sehen können und welche nicht.

Alternativ die Simulationsbausteine in eine Compiled Lib auslagern.
Dann kann man die Bausteine und den Aufruf zwar sehen. Aber man 
kann nicht  reinschauen, es sind dann Blackboxen.


----------

