C-Compiler für S7! wer macht mit?

Zuviel Werbung?
-> Hier kostenlos registrieren
Jochen Kühner schrieb:
Wenn dies alles so unsinnig ist, frage ich mich, warum gibt es auch auf dem pc so viele programmiersprachen???

Wenn ich vor einem problem sitze könnte ich ja auch immer sagen das könnte ich doch auch mit dieser oder jener lösen, warum gibt es die anderen überhaupt noch?? ich denke je mehr auswahl desto besser. es kann ja sein das sich durch einen c compiler mache aufgabe viel einfacher lösen lässt als wie es mit einer der schon vorhandenen funktioniert hätte...

ich denke man sollte diesen schritt einfach wagen, man muss ihn ja nicht verwenden... und bei den problemen bei denen der einsatz dann sinvoll ist wird er schon verwendet werden...

Die Welt außerhalb von S5/S7 ist nicht so propietär, deshalb gibt es dort auch viele Wege, die man beschreiten kann, wobei die Wahl der Mittel sich trotzdem immer nach dem Zwecke richten sollte. Ob nun Pascal, C oder C++ um nur weniges zu nennen, entspricht der Entwicklung auf diesem Sektor. In der Windoof-Welt ist man aber schon wieder dabei, sich von BG einnorden zu lassen, ohne dem Microsoft Foundation Club geht da fast nix mehr und dreimal darf man raten auf welcher Basis die Siemens-OPC-Server funktionieren. Für viele Bitbumser bleibt fast gar nichts anders mehr übrig, als sich dem Diktat zu beugen.

Es gibt ein paar Dinge, die man in SCL nicht machen kann, die aber in AWL sehr wohl sauber und sicher ausformuliert werden können. Das ist z.B. ein Antrieb, um über andere Lösungen nachzudenken. Die Tatsache, das AWL nicht totzuschweigen ist und das AWL Sprachelemente aus C verwendet, ist ein weiterer Antrieb für mich. Was mich außerdem ärgert, ist die Konstanten-Schreibweise in SCL, die sich doch erheblich von den Pascal-Syntaxregeln unterscheidet (ich erwarte schon den Einwand der S7-Puristen).


ohGott schrieb:
Wer kennt noch Coros LSB?

So so von Dir war der Kram ..... :shock: aber war ok :D

Ich kenne LSB noch sehr gut weil ich auch schon lange dabei bin.
Wie stellst Du dir den Ablauf vor???


Gruß

Wenn du Interesse hast, dann melde dich an und schreib mir eine PN. Ich habe bis zum jetzigen Zeitpunkt (Wochenende) noch nicht mit einer solchen Resonanz gerechnet. Diskussionen um das Thema werden wir demokratisch in einem Team in einer privaten Atmosphäre führen.


Gruß Barnee
 
Hallo,

hat für die S5 schon mal jemand versucht, es gab dazu
ein Buch vom Franzis-Verlag:

Maschinensteuerung mit dem PC. Steuerungsaufgaben der SPS erfolgreich mit dem PC realisieren.
Autor: HOFER, Johannes,
ISBN 3772348211.
Gibt es wohl nur noch im Antiquariat.

Hat damals aber eher weniger Leute interessiert.

Viele Grüße

Gerhard Bäurle
 
Zuviel Werbung?
-> Hier kostenlos registrieren
+

Bei mir ist dann so die Idee entstanden, eine Entwicklungsumgebung für S7-Bausteine zu entwickeln, die im Rahmen der Möglichkeiten, die sich auf Simatic-S7 (Serie300/400) beziehen, statt einer Anlehnung an Pascal eben mit einer Ausrichtung zu C aufwarten kann. Der generierte Code wird im AWL-Format im Rahmen einer Textdatei gespeichert, der in die S7-Umgebung als AWL-Quelle importiert werden kann. Die Ausrichtung zu C sollte alle in C üblichen Methoden beinhalten, sofern dies entsprechend den Adressierungsmöglichkeiten der S7 durchführbar wäre.

Beinhaltet das auch die Standard C Library? Wobei ich nur die in diesem Zusammenhang sinnvollen Teile meine. Unter sinnvoll verstehe ich z.B. alles, was in <math.h> zu finden ist.
 
Question_mark schrieb:
Hallo,
Lazarus schrieb:
Letzter Satz: Zottels Zeigerakrobatik ist trotz allem den möglichkeiten entsprechend sehr sauber und gut verständlich.
Ja, keine Frage. Der Code von Zottel musste nur als Beispiel dafür herhalten, was ich auf einer SPS nicht haben möchte. Und die Kunden, die in der Nachtschicht einen Fehler suchen, bestimmt auch nicht.
Der Code von Zottel wurde schon in mehreren Threads als Beispiel für die "schrecklichen Zustände" in C herangezogen. Das Problem ist nur, das die Quellen von libnodave dafür gar kein gutes Beispiel sind, da sich Zottel meines Erachtens nach an die "guten Sitten" beim Programmieren gehalten hat. Meine Erfahrungen mit C/C++ habe ich vor 14+ Jahren gesammelt, seitdem rosten sie vor sich hin. Trotzdem komme ich mit Zottels Code sehr gut zurecht ! :D

Das Problem, das viele mit C haben (ich auch), ist doch, das C fast alles schluckt, was es vorgesetzt bekommt, und manche Programmierer dementsprechend unleserlichen Code schreiben. Nur ist das im Grunde genommen ja kein Fehler von C, sondern der dieser Programmierer. Der Fehler von C ist nur, das es solche Exzesse überhaupt erlaubt.

Ich sehe daher die Akzeptanz von C als Programmiersprache in der SPS auch kritisch, aber wer weiß, auf dem PC ist C ja auch trotz der beschriebenen Probleme wohl die am meisten verbreitete Sprache.

Gruß Axel
 
Hallo Leute,

also für spezielle Funktionen könnte ich mir auch vorstellen diese lieber in C oder VB zu programmieren als in AWL!
Wenn in z.B. in "C" übersichtlich programmiert wird, so kann der Code einfacher und schneller gelesen werden als in AWL.

Ich kenne nun nicht die Arbeitsgebiete der meisten Leute hier am Board, unser Gebiet ist der Sondermaschinenbau (Tranferstraße, Bearbeitungszentren, Montagelinien usw.). Hier wird heute sehr viel Fremdapplikationen wie Videoüberwachung, Mobby uvm. und auch Verwaltungstechnische Aufgaben in der PLC abgehandelt.
Z.B. eine Paletten oder Werkzeugverwaltung in einem Bearbeitungszentrum.
Diese Dinge in C zu Programmieren währe teils sehr hilfreich, da wenn z.B. ProTool Pro eingesetzt wird, dort teils auch mit C teilen in den Bildern gearbeitet wird.

Wenn das "Know-How" sitzt, kann der Kunde auch einen AWL oder FUP Baustein anschauen. Ein Kunde oder das Servicpersonal muß auch nicht in allen Bausteinen änderungen vornehmen. Es beschwert sich auch keiner, das z.B. bei ner NCU57x.x im Grundprogramm oder bei Hi-Graph oder bei TL2000 Bausteine gesperrt sind. ALso kann der Hersteller auch Bausteine mit Know-How sperren.

Sicherlich war früher die Nachfrage an C für für Step7 nicht so groß, aber die Möglichkeiten, Funktionen sowie Anforderungen sind in den letzten Jahre auch sehr gewachsen. Von der anderen Seite, ist es für Siemens auch nicht so einfach auf verschiedene Ebenen zu Entwickeln. Man merkt dies sehr stark, wenn man mal die versch. Engenieering Tools von Siemens zusammen verwendet. Dies ist bei Projekten in der Automobil-Industrie ja immer der Fall, da kommen die Projekthandbücher von A&D Siemens und am Anfang gibst sehr oft Probleme mit der Kombination der einzelnen Tools!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Großes Interesse

Hallo

@Barnee

Bei uns ist dieses Thema auch schon öfters diskutiert worden, denn es gäbe schon einige Fälle, bei denen man einen Algorithmus portieren möchte, in denen ein C-nach-AWL-Umsetzer sehr viel Arbeit abnehmen würde.

Die Frage ist jetzt wie Ernst die Sache schon ist und auf welche Basis man aufbaut. GCC wäre da durchaus auch eine denkbare Möglichkeit. Das Problem wird aber das Debuggen!

Gruß

Longbow
 
Question_mark schrieb:
Hallo,
Der Code von Zottel musste nur als Beispiel dafür herhalten, was ich auf einer SPS nicht haben möchte. Und die Kunden, die in der Nachtschicht einen Fehler suchen, bestimmt auch nicht.
Die Hauptanwendung sähe ich darin, einfache Aufgaben aus der allgemeinen Informatik zu portieren. Ich erinnere mich, hier mal Code für den Bubblesort-Algorithmus gepostet zu haben. In S7-AWL, weill das der gemeinsame Nenner mit dem Anfragenden war. Das sieht schon ziemlichich schrecklich aus und im Vergleich zu "richtigen" Programmiersprachen ist es eine Zumutung, Array-Indizes zu Fuß berechnen zu müssen.
Wenn ihr euch AWL-Code anschaut, in dem dann noch ein bischen mit den Adressregistern hantiert wird, steht er schlechtem C-Code an Unübersichtlichkeit nicht nach.
Natürlich gehen diese DInge auch mit SCL ganz ordentlich, aber SCL ist nun mal eine Zusatzoption, was häufig dazu führt, daß der Wartungsmann entweder kein SCL hat oder die SCL-Quellen nicht hat oder kein SCL kann.
Wenn der C-Compiler frei verfügbar wäre, fiele wenigstens die erste Hürde weg und die zweite könnte er mit etwas Interesse überwinden. Außerdem gibt es umfangreiche Sammlungen von Beispielcode für so etwas in C (oder Fortran), aber kaum in SCL.
Insgesamt sehe ich so ein Projekt positiv.
Zwei "Spezialitäten" der SPS sollten berücksichtigt werden:
1. Daß sie Maschinenbefehle zur Manipulation von Bits hat (hat ein 8051 auch, also mal bei Keil-C gucken).
2. Daß Schleifen variabler Länge die Echtzeitfähigkeit jedes Codes zunichte machen. Die S7 bietet die Möglichkeit, derartigen Code in einen OB zur Hintergrundbearbeitung zu packen.

Bezüglich vorhandener open source C-Compiler: GCC ist mehr für 32-Bit-Architekturen gemacht. Die S7 kann zwar 32-Bit-Arithmetik, aber der knappe Speicher wird besser byteweise belegt. Daher schau dir mal den SDCC an, ein C-Compiler für diverse Mikrocontroller. Dem bräuchte man nur ein neues back end (Code-Generator) hinzuzufügen, wenn mich nicht irre.
 
arcis schrieb:
....Die Ausrichtung zu C sollte alle in C üblichen Methoden beinhalten, sofern dies entsprechend den Adressierungsmöglichkeiten der S7 durchführbar wäre.

Beinhaltet das auch die Standard C Library? Wobei ich nur die in diesem Zusammenhang sinnvollen Teile meine. Unter sinnvoll verstehe ich z.B. alles, was in <math.h> zu finden ist.

Bitte um etwas Vorsicht bei solchen Vorhaben. Eine Library hat immer eine Bindung an den Prozessor für die der Code-Generator entwickelt wurde. Eine stdio-Lib für einen x86 läuft sicher nicht auf einem PowerPC, wenn diese nicht explizit für den PowerPC erstellt wurde. Unser Prozessor ist ein Etwas, das nur MC7-Code versteht, um es mal salopp auszudrücken. So denke ich mir, das sich nicht die Frage stellt, ob existierende Standard-Libs verwendbar wären. Meine (unsere) Standard-Libs sind die existierenden SFB's und SFC's, die allesamt nur STEP7 verstehen.

@deltalogic
Nee, 'tschuldigung is nich ganz mein Thema. Ich will nicht eine PLC auf einem PC realisieren, das gibt's ja schon..

afk schrieb:
Question_mark schrieb:
Hallo,
Lazarus schrieb:
Letzter Satz: Zottels Zeigerakrobatik ist trotz allem den möglichkeiten entsprechend sehr sauber und gut verständlich.
Ja, keine Frage. Der Code von Zottel musste nur als Beispiel dafür herhalten, was ich auf einer SPS nicht haben möchte. Und die Kunden, die in der Nachtschicht einen Fehler suchen, bestimmt auch nicht.
Der Code von Zottel wurde schon in mehreren Threads als Beispiel für die "schrecklichen Zustände" in C herangezogen. Das Problem ist nur, das die Quellen von libnodave dafür gar kein gutes Beispiel sind, da sich Zottel meines Erachtens nach an die "guten Sitten" beim Programmieren gehalten hat.

Leider habe ich bisher noch keinen Einblick in Zottel's Quellcode von "libnodave" genommen, um mir hier meine eigenes Urteil bilden zu können. Wenn aber afk von der Einhaltung der guten Sitten spricht, was gäbe es dann noch daran auszusetzen? Ich finde man sollte nicht alles in Topf werfen, um danach "igitt" zu rufen. Ich nehme mal an, dass afk weiss wovon er spricht, so zeigt doch Diskussion auf, dass bisher zu viel in die von mir vorgetragene Idee hinein interpretiert worden ist.

Ein Beispiel eines schlechten Programmierstils in SCL habe ich hier:
Code:
IF (Cond_Enable AND 16#0001)= TRUE THEN

    C1 := TRUE;

ELSE

    C1 := FALSE;

END_IF;



IF SHR(IN:=(Cond_Enable AND 16#0002),N:=1)= TRUE THEN

    C2 := TRUE;

ELSE

    C2 := FALSE;

END_IF;
Das lässt sich in ZWEI Zeilen verpacken ohne an Informationsgehalt zu verlieren:
Code:
C1 := (Cond_Enable AND 16#0001) <> 0;
C2 := (Cond_Enable AND 16#0002) <> 0;
Wie man sieht, ist die Angst vor unübersichtlichen Code nicht nur auf C beschränkt, man kann schlechten Programmierstil in jeder Programmiersprache üben, wenn man es nicht besser weiss. In "richtigem" Pascal würden die Zeilen übrigens so aussehen:
Code:
C1 := (Cond_Enable AND $1) <> 0;
C2 := (Cond_Enable AND $2) <> 0;
In C würden die beiden Zeilen so aussehen:
Code:
C1 = (Cond_Enable & 0x1) != 0;
C2 = (Cond_Enable & 0x2) != 0;

Boxy schrieb:
Hallo Leute,
also für spezielle Funktionen könnte ich mir auch vorstellen diese lieber in C oder VB zu programmieren als in AWL!
Wenn in z.B. in "C" übersichtlich programmiert wird, so kann der Code einfacher und schneller gelesen werden als in AWL.
Das trifft genau meine Beweggründe!

Longbow schrieb:
Hallo

@Barnee

Bei uns ist dieses Thema auch schon öfters diskutiert worden, denn es gäbe schon einige Fälle, bei denen man einen Algorithmus portieren möchte, in denen ein C-nach-AWL-Umsetzer sehr viel Arbeit abnehmen würde.
Die Frage ist jetzt wie Ernst die Sache schon ist ....

Ja, wie ich sehe, stehe ich mit meinen Gedanken zu dieser Idee nicht alleine.
Mir ist die Sache schon ernst, auch wenn ich das ganze vorerst einmal vor einem sportiven Hintergrund sehe. Wer mitmachen will, kann sich bei mir via PN melden, ich gehe davon aus, in dieser Woche ein Team bilden zu können. Alles weitere auf einem privaten Kanal.

Gruß Barnee

PS. Ist das normal, dass das Forum am Sonntagnachmittag immer Offline geht?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
C-Compiler für S7, wer macht mit?

Hallo @
Die Anzahl der Beiträge wie auch die Anzahl der Zugriffe (616 z.Zt.) bestätigen mir, dass ich mit meinem Vortrag der Idee (auch wenn sie nicht neu ist) doch bei einigen Forumsbesuchern offene Türen einrennen konnte.

Es haben sich einige Interessierte bei mir gemeldet, die bereit sind, in einem Team ein solches Projekt gemeinsam zu realisieren. Dafür danke ich erst einmal an dieser Stelle. Aus Gründen der Fairness halte ich das Angebot zum Mitmachen noch bis Mittwochabend offen. Spätere Meldungen können ggf. noch berücksichtigt werden, wir wollen jedoch die Beteiligung in einer überschaubaren Größe halten. Ich werde ab diesem Termin ein Zusammentreffen realisieren, auf welcher Basis das geschehen soll, werden wir zwischenzeitlich intern klären.

Die Meldung zum Mitmachen sollte über PN erfolgen.

Gruß Barnee
 
Barnee schrieb:
Code:
C1 := (Cond_Enable AND 16#0001) <> 0;
C2 := (Cond_Enable AND 16#0002) <> 0;

sehr interessant zu wissen.
wir haben hier auch eine maschine die in scl programmiert ist und die haben das 'in dem schlechten code' gemacht.
als ich das gesehen habe hab ich mich auch gefragt, was für aufwand den ich in awl mit einem U = erschlagen kann.

aber woher weiss man dass das auch viel besser geht.

ich hab hier vor einiger zeit schon mal gefragt ob es nicht ein brauchbares referenzbuch über scl gibt. leider ohne ergebnis, :cry:

oben angesprochenen maschine wurde auch mit c geschrieben.
die haben einen compiler geschrieben der aus dem c-code einen scl-code macht. ist zwar ein umweg aber leichter zu realisieren wie direkt von c nach awl. (soweit ich das beurteilen kann).

der generierte awl-code ist natürlich grauenerregend wie alle von scl compilierten quellen.

EDIT:
der erzeugte awl-code von der guten variante sieht übrigens auch viel besser aus: :wink:
nur für c1.
den sinn vom L0.3 kann ich aber nicht nachvollziehen.

schlecht:
Code:
      SET   
      SAVE  
      =     L      0.3
      U     #TEMP0
      SPBN  M001
      SET   
      =     #TEMP1
      SPA   M002
M001: CLR   
      =     #TEMP1
M002: CLR   
      U     L      0.3
      SAVE  
      BE
gut
Code:
      SET   
      SAVE  
      =     L      0.3
      U     #TEMP0
      =     #TEMP1
      U     L      0.3
      SAVE  
      BE
am besten. von hand :D
Code:
      U     #TEMP0
      =     #TEMP1
      BE
 
VKE und BIE

@Volker

Code:
      SET   
      SAVE 
      =     L      0.3
      U     #TEMP0
      =     #TEMP1
      U     L      0.3
      SAVE 
      BE

Das ist ganz einfach (und in dem speziellen Falle fast nur Blödsinn):

SET, setzt am Anfang der Bearbeitung das VKE auf eins;

SAVE, sichert das aktuelle (!!!!!) VKE in das BIE-Bit des Statuswortes;

= L 0.3, offensichtlich existieren noch drei weitere (lokale) Variablen vom Typ BOOL in der Funktion, daher "erfindet" der Compiler eine 4. lokale Variable - L 0.3 - und sichert das VKE vor der Ausführung weiterer Operationen ab.

Die nachfolgenden Operationen beeinflussen das VKE, statt der o.g. Verknüpfung könnte auch z.B. ein Bausteinaufruf stehen. Bei einem Fehler, der bei der Ausführung des aufgerufenen Bausteins auftreten könnte, wird dies im BIE-Bit dieses Bausteins vermerkt (wenn Fehler, dann ist das BIE-Bit auf NULL gesetzt), das BIE-Bit bestimmt die Valenz des ENO-Ausgangs des aufgerufenen Bausteins, das dann UNMITTELBAR nach dem Aufruf im aufrufenden Baustein abgefragt werden kann.

U L 0.3, klar, ist hier in dem Beispiel eh auf 1 - kann aber bei einem andern Sachverhalt zwischenzeitlich beeinflusst worden sein - setzt das VKE.

SAVE, sichert das VKE abschließend in das BIE-Flag, das wiederum beim Verlassen dieser Funktion den eigenen ENO-Ausgang beeinflusst.

Was du also hier siehst, ist nur der Rahmen, den ein Compiler generell anlegt. in dem o.g. Beispiel ist dieser (fast) überflüssig. Wenn keine Fehler bei der Bearbeitung zu erwarten sind, sollte das BIE-Bit immer korrekt gesetzt sein, es könnte ja jemand versuchen den ENO-Ausgang der Funktion auszuwerten!


Gruß Barnee
 
Zurück
Oben