2009-04-16 16 views
3

Ich habe eine Anforderung für die Portierung von einigen vorhandenen C-Code auf eine IEC 61131-3 konforme SPS.C nach IEC 61131-3 IL Compiler

Ich habe einige Möglichkeiten, den Code in diskrete Funktionsblöcke aufzuteilen und diese Blöcke zu einer Standardlösung (Leiter, FB, strukturierter Text usw.) zu verweben. Dies würde jedoch erfordern, den C-Code zu zerlegen, um jeden Funktionsblock aufzubauen.

Mit Blick auf die IEC-Spezifikation habe ich festgelegt, dass die IEC Instruction List Form eine Zielsprache für einen Compiler sein könnte. Der Wikepedia Artikel listet zwei Entwicklungs-Tools:

  1. CoDeSys
  2. Beremiz

aber diese scheinen IEC Sprachen C werden gezielte Zusammenstellung, nicht C nach IEC.

Eine andere mögliche Lösung ist, den C-Code durch einen C zu Pascal-Übersetzer zu schieben und diesen als Ausgangspunkt für eine Structured Text-Lösung zu verwenden.

Wenn nicht, werde ich den Weg der Aufteilung des Codes in Funktionsblöcke gehen.

bearbeiten

Wie mlieson Antwort aufgefordert ich, dass der C-Code erwähnt haben sollte ein bestehendes Echtzeit-Steuerungssystem ist. Daher sollten die Programmalgorithmen bereits zu einer SPS-Umgebung passen.

Antwort

2

Meine Vermutung ist, dass ein Übersetzer C zu Pascal Sie nicht nah genug bekommen wird, um den Ärger wert zu sein. Strukturierter Text sieht Pascal sehr ähnlich, aber es gibt Unterschiede, die Sie überall korrigieren müssen.

Kein Bug Problem, aber vergessen Sie nicht, dass PLCs Laufzeitumgebung ein bisschen anders ist. Eine C-Anwendung beginnt mit main() und endet mit main(). Eine SPS nennt es main() immer wieder, 100: s mal pro Sekunde und es endet nie. Allzu langwierige Berechnungen und E/A müssen in unterschiedlicher Weise codiert werden, als eine C-Anwendung verwenden würde.

Es sei denn, Ihre C-Quelle ist viele viele tausend Zeilen Code - Rewrite es.

+0

Ich bin sehr versiert in SPS und PC-Programmierung, so dass ich alle architektonischen Unterschiede und Probleme kenne. Aber der C-Code ist für ein Echtzeitsystem irgendeiner Art (habe den Code noch nicht gesehen - das ist nächste Woche) –

1

Wenn die Menge des zu konvertierenden Codes einige tausend Zeilen beträgt, ist die Neucodierung von Hand wahrscheinlich die beste Wahl.

Wenn Sie viel Code zum Konvertieren haben, dann könnte ein automatisiertes Tool sehr effektiv sein. Unter Verwendung der DMS Software Reengineering Toolkit haben wir Übersetzer gebaut, um mechanische Bewegungsdiagramme in RLL (PLC) -Code abzubilden. DMS hat auch vollständige C-Parser/Analysatoren/Frontends. Die Stücke sind da, um einen C-zu-RLL-Code zu erstellen.

Dies ist keine leichte Aufgabe. Es dauert wahrscheinlich 6-12 Mann-Monate, um DMS so zu konfigurieren, dass es dem entspricht, was Sie wollen. Wenn das weniger ist, als es von Hand zu tun ist, dann ist es der richtige Weg, es zu tun.

3

Vielleicht kommt diese Antwort zu spät, aber es ist möglich, C-Code von CoDeSys dank einer externen Bibliothek aufzurufen.

Sie können http://forum-en.3s-software.com/viewtopic.php?t=620

an Dokumentation über das CoDeSys-Forum finden, dass Sie Ihren C-Code in die SPS mit geringfügigen Änderungen verwenden würde. Sie müssen nur die Funktionen oder Funktionsblöcke Schnittstellen definieren.

0

Es ist unmöglich. Um kurz zu sein: Die IL-Sprache ist eine 4GL (d. H. Begrenzt auf die Domäne, sowie andere IEC 61131-3-Sprachen - ST, FBD, LD, SFC). Die C-Sprache ist eine 3GL.

Um das Problem zu verstehen, versuchen Sie, die Frage zu beantworten, welchen Weg zu Express in IL-Manipulationen mit einem Zeiger? Um zum Beispiel eine Funktion durch einen Zeiger auszudrücken. Was ist mit Unterbrechungen? Low-Level-Zugang zu den Peripheriegeräten ?

(wirklich, gibt es mehr Probleme)

BTW, da die Sprache Reflex ist, auch bekannt als "C mit Prozessen". Reflex ist ein 4GL für die Kontrolldomäne mit C-ähnlicher Syntax. Aber die bekannten Übersetzer produzieren C-Code und Python-Code.

0

Die beste Lösung ist, Ihren C-Code in kleinere Teile aufzuteilen, die als SPS-Funktionsblöcke umkodiert werden können. Für jeden Block, den Sie in strukturiertem Text umschreiben, verwenden Sie den C-PASCAL-Konverter. Bereiten Sie sich auf eine Menge manuelle Arbeit vor, da die automatische Konvertierung Sie wahrscheinlich enttäuschen wird.

Werfen Sie auch einen Blick auf dieser Seite: http://www.control.com/thread/1026228786

1

Es gibt einige IEC-Entwicklungsumgebungen und Zielhardware, die C-Blöcke verwenden kann ... Ich würde auch auf den Gründen einen Blick darauf werfen, warum es hat eine sein IEC-61131 Beschwerdeziel. Ich habe ausführlich über Compliance geschrieben und warum das nicht Kniebeugen bedeutet. SoftPLC corp können mit benutzerdefinierten ladbare Module Ich bin sicher helfen ... und sie können in C ..

Schneider C-Funktionsbausteine ​​...

Labview auch unterstützt auch !! nicht sicher, warum IEC wichtig ist, das ist alles !! der Compiler würde, wenn er existiert, fehlerhaften Code erstellen :)

0

Jedes Mal, wenn ich das getan habe, habe ich es einfach geparst und konvertiert es von C direkt zu ST. Ich habe nur einige Funktionen kennengelernt, die komplett neu geschrieben werden mussten, obwohl es nur sehr wenige gab, die mit Zeigern zu tun hatten.