2009-04-16 11 views
3

既存のCコードをIEC 61131-3準拠のPLCに移植する必要があります。C to IEC 61131-3 ILコンパイラ

コードを個別の機能ブロックに分割し、これらのブロックを標準ソリューション(ラダー、FB、構造化テキストなど)に織り込むオプションがあります。しかし、これは各機能ブロックを構築するためにCコードを修正する必要があります。

IEC仕様を見ると、IEC Instruction Listフォームがコンパイラのターゲット言語になる可能性があるということを批判しました。

  1. CoDeSys
  2. Beremiz

しかし、これらはC、IECのないCにIEC言語のコンパイルターゲットにしているように見える:wikepediaの記事は、2つの開発ツールを示します。

もう1つの解決策は、CコードをCからPascalへのトランスレータにプッシュし、これをStructured Textソリューションの出発点として使用することです。

これらのいずれでもない場合は、コードを機能ブロックに分割するルートを下ります。

編集

私はCのコードは、既存のリアルタイム制御システムであることを言及している必要がありますmliesonの応答によって促されたよう。したがって、プログラムアルゴリズムは既にPLC環境に適合しているはずです。

答えて

2

私の推測によれば、CからPascalへの翻訳者は、あなたを困らせてしまうくらい近くにいるわけではありません。構造化されたテキストはPascalによく似ていますが、どこにでも修正する必要があります。

問題はありませんが、PLCのランタイム環境は少し異なります。 Cアプリケーションはmain()から始まり、main()が戻るときに終了します。 PLCはmain()を何度も何度も何度も繰り返し、毎秒100回実行します。 通常、長時間の計算とI/Oは、Cアプリケーションが使用するよりも異なる方法でコード化する必要があります。

あなたのCソースが何千ものコード行でない限り、それを書き直してください。

+0

私はPLCとPCプログラミングに精通しているので、アーキテクチャの違いと問題点はすべて知っています。しかし、Cコードは、ある種のリアルタイムシステム用です(コードはまだ見ていません - それは来週です) –

1

変換するコードの数が数千行の場合、おそらく手で記録するのが最善の策です。

変換するコードがたくさんある場合は、自動化ツールが非常に効果的です。 DMS Software Reengineering Toolkitを使用して、メカニカルモーションダイアグラムをRLL(PLC)コードにマップするトランスレータを作成しました。 DMSには完全なCパーサ/アナライザ/フロントエンドもあります。これらの部分はCからRLLへのコードを作成するためのものです。

これは簡単な作業ではありません。 DMSをあなたが望むものに似たものに構成するには、6〜12人月がかかりそうです。それが手で行うことよりも少ない場合は、それを行う正しい方法です。

3

おそらくこの答えは遅すぎるかもしれませんが、外部ライブラリのおかげでCoDeSysからCコードを呼び出すことは可能です。

あなたはマイナーmodifcationsでPLCにあなたのCコードを使用することを与えるだろうhttp://forum-en.3s-software.com/viewtopic.php?t=620

でCoDeSysのフォーラムでドキュメントを見つけることができます。関数または関数ブロックのインタフェースを定義するだけで済みます。

0

不可能です。簡潔にするために、IL言語は4GLです(ドメイン 、他のIEC 61131-3の言語ST、FBD、LD、SFCに限定されています)。 C言語は3GLです。

にどのようにして、質問に答えるためにしようと、問題を理解するには、ポインタでIL操作で表現しますか?例えば、 関数をポインタで呼び出すことができます。割り込みについてはどうですか?周辺機器の低レベルアクセス

(実際には、より多くの問題がある)

ところで、リフレックス言語、別名 "プロセスとC" があります。 Reflexは、Cのような構文を持つ 制御ドメインの4GLです。しかし、既知の翻訳者は CコードとPythonコードを生成します。

0

あなたの最善の策は、C言語コードをPLCの機能ブロックとして再コード化できる小さな部分に分割し、構造化されたテキストで書き換える各ブロックに対してCからPASCALへのコンバータを使用することです。自動化された変換はおそらくあなたを失望させるので、多くの手動作業を行う準備をしてください。

また、このページを見てみましょう:http://www.control.com/thread/1026228786

1

Cブロックを使用することができ、いくつかのIECの開発環境とターゲットハードウェアがありますが...私もそれがする必要がある理由を見てみますIEC-61131苦情の対象です。私はコンプライアンスとそれがスクワットを意味しない理由について広範に書いています。あまりに

のLabview ...

シュナイダーもCの機能ブロックをサポートしています。.. SOFTplcコープは、私は、ユーザー定義されたローダブルモジュールと確信していることができます...そして、彼らはCにすることができます! IECがなぜ重要なのかはっきりしないコンパイラが存在すると確かに悪いコードを作成するでしょう:)

0

これを行うたびに、私はちょうど手作業でCからSTに直接変換して変換しました。私は、完全に書き換えが必要ないくつかの関数に遭遇しただけですが、STが一般的に目がないのは、残念なことにポインタを扱うものはほとんどありませんでした。