Selbstgeschriebene Software-SPS in C unter Windows

clumsi

Well-known member
Beiträge
136
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,

auch wenn die meisten Forumuser hier wahrscheinlich "kommerzielle SPSen" programmieren, habe ich mal eine Frage zu einem Steuerungsprojekt, was nichts mit CoDeDys, FUP, KOP, AWL etc. zu tun hat.

Es geht um eine produzierende, automatisierte Anlage im Uni-Umfeld, die prinzipiell einen Ablauf (Teil produzieren) in einer Schleife durchführt.
Bussystem: CANopen, 500kBit/s, ca. 10-20 CAN-Knoten, ~100 Digitale I/O's, ~20 Analogsignale (je 2-4 byte)
Beispiel Aktoren: Ventile für Pneumatikzylinder, Meldeleuchten, Triggerausgänge für selbstständige Anlagen (Roboter, etc.)
Beispiel Sensoren: Näherungsschalter, Lichtschranken, Taster, Rückmeldungen von selbstständigen Anlagen (Roboter, etc.)

Der CAN-"Master" ist eine PCI-CAN-Karte im PC. Der Zugriff erfolgt aus einem C-Programm, was auch für Messdatenerfassung und Virtualisierung zuständig ist.
Der Zugang zur Prozessebene geschieht nur durch die Funktionen "CAN_Read()" und "CAN_Write()". Es wird jeweils immer ein komplettes CAN-Frame, bestehend aus ID, Länge, 8 Bytes gesendet/empfangen. Der PC muss also jedes auflaufende CAN-Frame untersuchen, vergleichen und prüfen, ob sich der Zustand eines Bits (z.B. Taster) geändert hat. Wenn das der Fall ist, folgen weitere Folgen von Funktionen.

Das System läuft bis jetzt seit einigen Jahren gut und relativ sicher an einer Anlage, die demnächst modernisiert wird. Ich überlege, das gleiche System nochmal einzusetzen, wollte aber erstmal Fragen, ob ihr sowas vielleicht auch schonmal gemacht habt, Erfahrungen dabei habt, oder Tipps geben könnt. Ansonsten einfach mal die Meinung, wie das in den Augen eines professionellen SPS-Programmieres ist.... ;-)

Im Anhang noch ein grobes Bild über meine Programmstruktur. Ich werde das evtl. noch verfeinern und nochmal hier reinstellen.

Grüße,
clumsi

programmschema.jpg
 

MasterOhh

Well-known member
Beiträge
1.582
Punkte Reaktionen
397
Die Frage ist, was ist der Sinn der Anlage. Soll sie wirklich nur Teile produzieren, oder ist ihre gesamte Funktionsweise irgendwie Bestandteil des Studiums?

Wenn die Anlage nur dazu dient etwas herzustellen, oder meinetwegen ein technisches Verfahren zu demonstrieren, würd ich es auf jeden Fall mit einer SPS realisieren.
Ganz einfach weil Industriesteuerungen genau für diesen Zweck entwickelt wurden. Für einen lächerlich geringen Anschaffungspreis (je nach Leistungsklasse und Peripherie natürlich) wird einem schon soviel an Arbeit und damit an Zeit abgenommen, das sich die Kostenfrage einfach nicht mehr stellt.
Und wer das Know How hat so ein Projekt mit einem, von 0 auf selbstgeschriebenen, C-Programm zu verwirklichen, der wird sich in die SPS Programmierung sofort hineinfinden.

Für ein Uni-Umfeld würd ich Steuerungen von Beckhoff empfehlen. Beckhoff bietet mit dem ADS Protokoll bereits eine offene Schnittstelle um leicht von Außen auf die Steuerungsfunktionen zugreifen zu können (div. Programmiersprachen, Labview etc.) -> Stichwort "Automation in Science".
Natürlich lohnt sich da auch ein Blick auf die anderen Hersteller (Siemens, Wago usw. usf).
 

Mobi

Well-known member
Beiträge
1.368
Punkte Reaktionen
135
Zuviel Werbung?
->Hier kostenlos registrieren
Also ich stehe in Kontakt mit der TU Dresden. Dort setzen sie z.B. die Steuerungen von Phoenix ein für ihre Versuchsaufbauten.
Eine SPS kann auch weniger abstürzen als Windoof. Der Zugriff auf die Steuerung von einem PC z.B. ist auch relativ einfach über OPC, HTTP-Request oder halt ein eigenes TCP-Protokoll.
 

spqr76

Well-known member
Beiträge
125
Punkte Reaktionen
4
Hallo ,
ich denke da an stabilität wenn ich deinen Beitrag so lese. Die frage die ich mir stelle ist die Laufzeit am Tag dieser Anlage wird häufig ein oder ausgeschaltet Betriebsstunden etc. Beim CAN Bus so wie ich ihn kenne kommt es auch auf die Umgebung an . Hatte schon des öfteren Probleme mit Hochfrequenten Subsystemen. Und du hast geschrieben relativ stabil das ist Auslegungssache :D . In der Endlosschleife vermute ich eine Prozessor Auslastung von 99% je nach OS. Dies bedeutet wieder wärme etc.... Also sind wir wieder beim Thema Betriebsstunden. Würde ich jetzt rein so aus dem Bauchgefühl herraus sagen. Wenn es akzeptabel und störungsfrei funktioniert; dies ist eben vorraussetzung ; würde ich es wieder so machen. Kommt eben auf die Probleme an die es bisher gab. Aber eine sehr interessante Sache ...
 
Zuletzt bearbeitet:

nekron

Well-known member
Beiträge
314
Punkte Reaktionen
24
Moin Moin,

Da es ja an der Uni ist, ist bestimmt eines der folgenden Projekte interessant ... Indirekt hängen die beiden eh zusammen ...

http://www.beremiz.org/

Bzw. CanFestival als CanOpen Master. Arbeitet mit den meisten passiven CAN Karten zusammen !

Beremiz ist eine Art SoftSPS unter Linux und komplett Open Source.

Vielleicht einen Versuch Wert ?

Gruß,
Michael
 
OP
C

clumsi

Well-known member
Beiträge
136
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Danke erstmal für Eure Antworten! Die Anlage gehört primär nicht zu einem Projekt, in dem es darum geht, Programmieren zu lernen. Teile produzieren ist das Hauptziel.

Die frage die ich mir stelle ist die Laufzeit am Tag dieser Anlage wird häufig ein oder ausgeschaltet Betriebsstunden etc.
Die Laufzeit der Anlage ist relativ gering. Einige Wochen garnicht, und dann ab und zu mal 8 Stunden für wenige Tage.

In der Endlosschleife vermute ich eine Prozessor Auslastung von 99% je nach OS.
Mit Endlosschleife ist eine Schleife gemeint, die den einzelnen Produktionsablauf ständig nacheinander durchführt. CPU-Auslastung ist nicht besonders hoch. Es wird übrigens auch Ereignisgesteuert gearbeitet. Bei stehender Anlage gibt es also nur Heartbeat- und ähnliche Frames.

Ich habe mich mal ein bisschen über verschiedene Steuerungen informiert und bin erstmal bei einem "SPS-programmierbaren Feldbuscontroller" von Wago hängen geblieben. In diesem Controller würde ich dann wichtige Ablauffunktionen ausgliedern. Das Grundsystem könnte dann weiterhin mit PC bestehen bleiben, der PC hat dann hauptsächlich übergeordnete Auslöse- Einstell- und Visualisierungsfunktionen.

beremiz und CANFestival ist noch relativ neu für mich. Auch das werde ich mir mal genauer angucken.
 

spqr76

Well-known member
Beiträge
125
Punkte Reaktionen
4
Hallo,
ich kenne viele Appliaktionen die durch eine Schleife sehr hohe CPU Auslastungen verursachen. Ein Kollege von mir befasst sich sehr intensiv mit Prozessorkennlinien in zusammenhang mit Betriebstemperatur und Lebensdauer. Da gibt es erstaunliche Erkenntnisse mit guten Kühlsystemen. Desewegen auch meine fragen und Anmerkungen zu deinem Projekt. Ich finde es grundsätzlich erstmal gut was eigenes zu schaffen , als auf vorhandenes zurück zu greifen ( in der Entwicklung ). Aber die stabilität ist eben sehr wichtig . Da die Anlage sehr überschaubar betrieben wird kann man auch gern etwas neues testen etc.... Viel Erfolg :)
 

ducati

Well-known member
Beiträge
7.614
Punkte Reaktionen
1.704
Teile produzieren ist das Hauptziel

Dann schmeiss den Quatsch weg und nimm ne richtige SPS!.

Ansonsten stehe ich auf dem Standpunkt, dass man auch an der Uni die Dinge so lehren sollte, wie sie in der Praxis üblich sind. Und in der Praxis nimmt man für ne Industriesteuerung eine SPS, und kein irgendwie zusammengebasteltes C-Programm auf nem PC.

Und wenns ums C-programmierenlernen geht, da gibts so viele Möglichkeiten, aber bitte nicht am Beispiel einer Maschinensteuerung!

Gruß.
 

Rio

Member
Beiträge
6
Punkte Reaktionen
2
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,
interessantes Projekt. Ich wuerde fuer Ablaufsteuerungen eigentlich immer eine SPS vorziehen, bzw. die Arbeitsweise einer Handelsueblichen SPS, sprich zyklische Stapelverarbeitung. Es macht ein Programm einfacher und uebersichtlicher und dadurch auch robuster. Einen Event gesteuertem Ablauf stelle ich mir gerade sehr komplex vor, kann natuerlich falsch liegen ;). Da man sich schnell in Endlosschleifen verhackt wenn ein Event auf das naechste warten muss etc.pp. Dieses Problem der "Gleichzeitigkeit" hat man so in er Stapelverarbeitung nicht. Signale werden Zyklisch abgefragt und verarbeitet. Die Prioritaet stelle die Stelle im Programm fest (Oben wichtig unten weniger wichtig). So ist eine Aenderung von hoher Prioritaet "sofort" bei den weniger wichtigen Teile "angekommen" und man muss sich keinen Kopf um Ausnahmen aus der Reihe machen. Jeder untergeordneter Ablauf kuemmert sich gleich mit um die Ausnahme.
Bei der Hardware ist eine getestete. ausgereifte SPS wahrscheinlich auch robuster als jeder Handelsuebliche x86 PC (ob mit Windows oder *NIX).

Gruss Rio
 

LowLevelMahn

Well-known member
Beiträge
766
Punkte Reaktionen
90
Hier sprechen alle von Problemen, Robustheit, Schwierigkeiten usw. - ich glaube ja nicht das es auf der Ebene entscheidend ist ob C, VB, SPS oder sonstiges zum Einsatz kommt - der Bedarf scheint ja gedeckt zu sein und schätze zu weit geringeren Kosten in Hardware als die SPS-Lösung - Studenten kosten ja sonst nix :)

btw: Der eine Thread mit zyklischem Ablauf drinnen ist bis auf die "fehlende" Echtzeit auch nicht mehr viel anders als eine SPS - wer C programmieren kann schreibt auch damit ein stabiles produktives System (ja klar die Fehlermoeglichkeiten sind deren mehr - darauf muss man eben achten - aber das bedeutet definitiv nicht das es automatisch schlechter ist)
 

winnman

Well-known member
Beiträge
1.956
Punkte Reaktionen
296
Ja das Programm zweifelt ja auch niemand an.
Aber wie schauts mit der HW aus?

In einer SPS kann man sich im allgemeinen auf eine stabile HW verlassen. EMV, . . . bei Beachtung des Aufbaus sollte kein Problem darstellen.
Die Komponenten CPU. E, A, . . . Arbeiten vernünftig zusammen.

Also ein stabiles System :)

Wenn ich nun an den beschriebenen Aubau denke:
Rechner mit Windows (soll ja doch hin und wider ein Problem geben)
PCI Karte mit CAN (läuft der Treiber im Windows wirklich stabil? Was passiert bei einem OS Update?
Peripherie am CAN, Ist das was selbstgebautes oder was fertiges?

Also da wurde überall viel Zeit Investiert.

Bei Industrie SPS steckt man normalerweise nur an 2 Punkten Zeit rein:
Auswahl der HW
Erstellung des Programms (inkl. HW config, . . .)

Um das ganze Umfeld braucht man sich nicht groß zu kümmern.

Das Programm läuft in seinem Zyklus, der ist vorgegeben, alles ist einfach zu überschauen.

Für Privatanwendung mag das in C Ok sein.

Aber ich würde so was niemals einem Kunden verkaufen wollen.
Wenn ich bei einem Problem nicht erreichbar bin, wer soll da was korrigieren?

Bei Industri SPS kann jeder der halbwegs auf dem System Fit ist und die entsprechenden Anlagenkenntisse hat, da Änderungen machen (auch wenn es hin und wider besser wäre der eine oder andere lässt die Finger davon).

Beim Selbstgebastelten C gibt es sicher auch viele die da drankönnen, aber im Industriebereich kommen die Instandhalter eher aus der Elektro / Elektronikschiene und nicht aus dem IT Bereich. Mit Hammer und Amboss kann da jeder umgehen, mit Step7, Codesys, . . in FUP Programmiert finden die sich zurecht. Aber wenn da viel in C ist, dann noch kompiliert werden muss, ev keine Onlineansicht der Zustände auf FUP Ebene möglich ist, dann wird da selten wer was vernünftige machen können.
 

spqr76

Well-known member
Beiträge
125
Punkte Reaktionen
4
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo ,
@winman es gibt diverse SoftSPS lösungen für PC Systeme die gut gemacht sind. Es kommt immer auf eine gute Umsetzung an. Und natürlich OS :p

ducati
quote_icon.png
Zitat von ducati

Teile produzieren ist das Hauptziel- Dann schmeiss den Quatsch weg und nimm ne richtige SPS! Ansonsten stehe ich auf dem Standpunkt, dass man auch an der Uni die Dinge so lehren sollte, wie sie in der Praxis üblich sind. Und in der Praxis nimmt man für ne Industriesteuerung eine SPS, und kein irgendwie zusammengebasteltes C-Programm auf nem PC.

Das sehe ich nicht so , greift man immer wieder auf bestehendes zurück macht man keine technologische Weiterentwicklung. Klar kann man darüber streiten ob es in der " normalen Produktion/Praxis " sinnvoll ist sich im Studium mit anderen Dingen beschäftigt zu haben , aber das ist ansichtsache. Ich denke da eher an neue Schnittstellen , neue Kommunnikationswege die entwickelt werden müssen um das Ziel zu erreichen. Das ist doch eher der Gedanke der bei so einem Projekt auschhlaggebend ist bzw sein sollte, auch wenn die Basis Produktion ist.
Wenn die Herstellung eines Produktes Ziel des Projektes ist, sollte man die Gelegenheit nutzen um eigene Dinge zu testen etc..... prgrammieren, hardware, komponenten....

Wer eine Produktionsmaschine für eine Fabrik braucht geht doch nicht zur UNI oder ? (das soll nicht abwertend gemeint sein. Es gibt nur diverse Maschinenhersteller) Selbst wenn ist das doch dann eher ein Prototyp.... Ich habe von solchen Projekten bisher nur in Zusammenhang mit Entwicklung gehört. Wo Abläufe oder Herstellverfahren getestet werden um Maschinen dafür zu bauen. So kenne ich das jedenfalls...


Grüsse SPQR
 
OP
C

clumsi

Well-known member
Beiträge
136
Punkte Reaktionen
0
Hallo,
entschuldigt bitte meine späte Antwort, aber ich habe die letzte Mailbenachrichtigung nicht mitbekommen und bin davon ausgegangen, dass sich hier nichts mehr getan hat.... Durch zufälliges Vorbeischauen habe ich mich dann vom Gegenteil überzeugt. ;)
Die Hardwarekomponenten sind zum Großteil nicht selber gebaut (fertige CANopen-Module), es gibt aber selbstgebaute Mikrocontrollerlösungen, die vielleicht auch mal mit eingebaut werden sollen. Dafür ist dieser Framebasierte Datenaustausch natürlich sinnvoll.
Ich werde mit dem C-Programm erstmal weitermachen und die Prioritäten der wichtigen Threads überarbeiten. Dann geht es erstmal (fast) nur noch darum, ob die Vorgehensweise mit dem Switch-Case-Konstrukt so sinnvoll ist. (Immer wieder den Switch-Block aufrufen und mit dem Switch-Argument an die entsprechende Stelle im Case springen; Siehe Bild)
Danke und Grüße,
clumsi
 

karsten.thueer

New member
Beiträge
4
Punkte Reaktionen
0
Hi, ja so sind auch meine Erfahrungen. Eine mit C geschriebene Soft-SPS auf Windows Rechnern, kann durchaus stabil laufen.
Das Problem sind meistens halt die Rechner. (Nicht Windows) !!

Damit ihr euch mal ein Bild machen könnt, ladet euch doch die Soft-sps von abc herunter. Die gibst kostenlos zum ausprobieren für 1 Stunde laufzeit.
(natürlich gibts da tricks :) für längere Laufzeiten.
Aber die läuft bei mir seit Monaten stabil mit Profinet... Also viele Soft-SPS können das, was ne 400er auch kann.
Nur sind sie eben billiger und wenn ihr vernünftige HW habt, dann klappt das i.d. Regel auch.
neben ibh find ich die von abc wirklich ziemlich gut. schauts euch an hier:
http://www.siemens-s7-schulung.de/

ist sogar ne Anleitung dabei und nen Video. Abc sagt, die kann sogar echtzeit (sollte mit gigabet eth) auch kein problem sein.
lg
 
OP
C

clumsi

Well-known member
Beiträge
136
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
naja, da muss ich aber nochmal dazu sagen, dass mein bisheriges Programm ja nicht ganz SPS-typisch ist. Es gibt keine Zykluszeit und keinen zyklischen Durchlauf. Das macht die ganze Sache vielleicht etwas komplizierter, an gewissen Stellen aber auch einfacher. Das ganze Programm hat mit einer SPS erstmal nichts zu tun. Eine Funktion des Programmes ist jedoch erstmal das Senden und Empfangen von beliebigen CAN-Nachrichten. Dazu wird der Treiber des PCI-CAN Interfaces benutzt. Eine weitere Funktion ist dann die funktionelle Verbindung einer Standard-C-Funktion "Ventil a öffnen/schließen" mit diesen Sende-Funktionen. Die eigentliche Abfolge-Logik liegt im Programm verteilt (hauptsächlich in der Switch-Funktion) vor.
Bei meinem jetzigen Stand wäre es z.B. problematisch die Funktion "Lampen prüfen" zu integrieren. Das Drücken des entsprechenden Tasters ruft eine Funktion beim Drücken und Loslassen aus. Beim Drücken müsste sich das Programm alle aktuellen Steuerbits für die Lampen merken, dann alle Lampen einschalten. Beim Loslassen müssen erstmal alle Lampen aus, und dann der alte Zustand wieder eingeschaltet werden. Das Problem: Ändert sich ein Soll-Lampenzustand während des Lampentests, wird er nach Loslassen nicht übernommen. In diesen Fällen könnte ja auch eine zyklisch arbeitende Funktion Vorteile haben.
Aber vielleicht gibt es ja eine Alternative die sich an meine bisherige Lösung mit dem Switch-Case-Konzept (eventgesteuert) anlehnt, aber trotzdem mehr mit Variablen arbeitet, d.h. Zustände werden nicht einfach nur gesetzt (Lampen, Ventile), sondern werden vorrangig in Variablen gelegt und eine Funktion sorgt dafür, dass der Zustand immer der Variablen entspricht.
 
Oben