2009-04-16 70 views
3

我有要求將一些現有的C代碼移植到IEC 61131-3兼容PLC。C符合IEC 61131-3 IL編譯器

我有一些選擇將代碼拆分成離散功能塊並將這些塊編織成標準解決方案(梯形圖,FB,結構化文本等)。但是這需要分割C代碼才能構建每個功能塊。

在查看IEC規範時,我聲稱IEC Instruction List窗體可能是編譯器的目標語言。該wikepedia文章列出了兩個開發工具:

  1. CoDeSys
  2. Beremiz

但這些似乎是有針對性的IEC編譯語言C,不C到IEC。

另一種可能的解決方案是將C代碼通過C到Pascal轉換器,並將其用作Structured Text解決方案的起點。

如果沒有任何這些,我會沿着將代碼拆分成功能塊的路線。

編輯

根據提示按我應該提到的是,C代碼是現有的實時控制系統mlieson的答覆。所以程序算法應該已經適合PLC環境。

回答

2

我的猜測是,C到Pascal翻譯器不會讓你接近足夠的值錢的麻煩。結構化文本看起來很像Pascal,但是在各處都需要修正。

不是一個錯誤問題,但不要忘記PLCs運行環境有點不同。 C應用程序從main()開始並在main()返回時結束。 PLC一次又一次地調用它的main(),每秒100次:它永遠不會結束。 通常情況下,冗長的計算和I/O需要以不同的方式進行編碼,而不是使用C應用程序。

除非你的C源代碼有數千行 - 重寫它。

+0

我很好地精通PLC和PC編程,所以我知道所有的體系結構的差異和問題。但是C代碼適用於某種實時系統(尚未看到代碼 - 即下週) – 2009-04-16 23:05:22

1

如果要轉換的代碼量是幾千行,那麼手動重新編碼可能是您最好的選擇。

如果你有很多代碼需要轉換,那麼自動化工具可能會非常有效。 使用DMS Software Reengineering Toolkit我們構建了轉換器,將機械運動圖映射爲RLL(PLC)代碼。 DMS還具有完整的C語言分析器/分析器/前端。這些部分是在那裏建立一個C到RLL代碼。

這不是一件容易的事。可能需要6-12個人工月才能將DMS配置成與您想要的類似的東西。如果這比手工完成要少,那麼它是正確的方法。

3

也許這個答案來得太晚,但可以從外部庫調用CoDeSys的C代碼。

您可以在http://forum-en.3s-software.com/viewtopic.php?t=620

這將讓你使用你的C代碼到PLC輕微modifcations找到CoDeSys的論壇文檔。你只需要定義函數或功能塊接口。

0

這是不可能的。簡而言之,IL語言是4GL(即,限於 域,以及其他IEC 61131-3語言 - ST,FBD,LD,SFC)。 C語言是3GL。

要理解這個問題,試圖回答這個問題,其辦法 表達IL操作的指針?例如,用指針表示調用 函數。中斷怎麼辦?低層次訪問 外設設備?

(實際上,還有更多的問題)

BTW,有反射的語言,又稱 「C與進程」。 Reflex是針對類似C語法的 控制域的4GL。但是已知的翻譯器生成C代碼和Python代碼。

0

你最好的賭注是你的C代碼分割成更小的部分可重構成PLC功能塊和用C帕斯卡的轉換器爲每一個你會在結構化文本改寫塊。準備做大量的手動工作,因爲自動轉換可能會讓你失望。

也看看這個頁面:http://www.control.com/thread/1026228786

1

有跡象表明,可以用C塊幾IEC開發環境和目標硬件...我也會看看的原因,它必須是一個IEC-61131投訴目標。我已經寫了很多關於合規性的文章,爲什麼這並不意味着蹲下。 SOFTPLC CORP能幫助我敢肯定與用戶定義的可加載模塊......他們可以在C ..

施耐德還支持C功能塊...

的Labview過!不知道爲什麼IEC是重要的!如果存在會造成一定:)

0

每次我做這個糟糕的代碼編譯器,我只是解析並轉換它用手由C直接向ST。我只遇到了一些需要完全重寫的函數,但很少涉及指針,這是ST通常扼殺的內容,遺憾的是。