CoDeSys



?????? CoDeSys是全球最著名的PLC內核軟件研發廠家德國的3S(SMART,SOFTWARE,SOLUTIONS)公司出的一款與制造商無關的IEC 61131-1編程軟件。CoDeSys 支持完整版本的IEC61131標準的編程環境,支持標準的六種編程語言。是一個標準的軟件平臺,被很多硬件廠家支持,可編程超過150家OEM生產的自動裝置。CoDeSys提供了許多組合產品的擴充,諸如各種不同領域的總線配置程序、完全的目測化和運動控制系統。

?????? CoDeSys是一種功能強大的PLC軟件編程工具,它支持IEC61131-3標準IL 、ST、 FBD 、LD、 CFC、 SFC六種PLC編程語言,用戶可以在同一項目中選擇不同的語言編輯子程序,功能模塊等。


?????? CoDeSys是可編程邏輯控制PLC的完整開發環境(Controlled Developement System的縮寫),在PLC程序員編程時,CoDeSys為強大的IEC語言提供了一個簡單的方法,系統的編輯器和調試器的功能是建立在高級編程語言的基礎上(如Visual C )。


?????? 現在國內PLC用戶使用的版本多為CoDeSys V2.3,最新的版本是CoDeSys V3(目前最新版本為V3.5)。V3 在軟件架構上有了很大的改善,朝安全軟件的方向發展,目前正在申請TUV關于EN 61508的SIL認證。


?????? HOLLSYS(和利時G3 PLC),Kinco(深圳步科F1 PLC),ABB AC500系列,IFM,EPEC,Rexroth,Wago,Parker,Beckhoff,Festo,施耐德等PLC廠家都是使用CoDeSys平臺開發自己的編程軟件的。當然了,還有很多其他公司。


?????? 另外,CoDeSys也提供觸摸屏功能(Visualization),但這不是他的強項,基本都是采用OPC 工控機的方案,ABB,倍福都有很好的方案,都是面向不差錢的客戶。


3S競爭者

?????? CoDeSys的其他競爭對手還有KW、infoteam、ISAGRAF。聽說infoteam(國內稱一方梯隊)也挺牛的,不太了解,想說說KW,同屬于德國企業,主要是產品為multiprog。

KW的主要客戶有菲尼克斯的AutomationWorx、富士電機的D300Win、研華的Multiprog,苞米勒的PLC和伺服系列,三菱應該也是它的大客戶,但是編程方式卻是按照日本人的習慣來的。


CoDeSys框架組成

兩部分:

1、CoDeSys IDE。

? ?即CoDeSys集成開發環境,符合IEC61131編程規范,安裝于PC機上,運行于Windows或者Linux下。由最終應用用戶所使用的開發工具。

2、CoDeSys Runtime。

? ?即硬件平臺系統。需要設備制造商與3S公司共同完成,3S公司需要評估硬件開發商所設計的硬件系統,并為其定制CoDeSys Runtime框架,客戶需要為此向3S付費。然后硬件及系統開發商需要根據本系統的外圍輸入輸入等配置,編寫相應的驅動,并以庫或者PLC Configure接口的形式提供給CoDeSys ID開發環境調用。實際上就是形成一套Target安裝包。此外,CodeSys還會對每個使用其CoDeSys Runtime的設備貼標,設備供應商需要為每個3S標牌付費,作為其知識產權的一部分。

3、最終用戶(應用開發商)可以下載通用的CoDeSys IDE。

? ?里面提供基本的IEC61131編程環境,但是對于一個具體的硬件PLC或者HMI,需要安裝與該硬件相對應的Targets包。這個 Targets包的入口文件是*.tnf文件,有其來指定:

1、targets(*.tar)文件,對應 CoDeSys IDE的Target Setting項.

2、PlcConf文件夾下的*.cfg文件,對應CoDeSys IDE的PLC Configuration項。其安裝路徑由InstallTarget組件程序的Installation選項指定。反映在CoDeSys IDE上就是:Project\Options\Directories\Target\Configuration files: "**\*\PlcConf\"。

3、Lib文件夾下的諸*.lib文件,提供底層的CoDeSys Runtime的驅動接口。對應CoDeSys IDE的Library Manager。其安裝路徑由InstallTarget組件程序的Installation選項指定。反映在CoDeSys IDE上就是:Project\Options\Directories\Target\Libraries: "**\*\Libs\"。

Codesys的今生,未來?

Codesys的今生,未來?


上圖,就是安裝target的過程,也就是每個OEM廠家安裝自己硬件的過程。


CoDeSys底層運行原理

Codesys的今生,未來?


? ?Codesys runtime是建立在OS上的,常見的OS有wince,windows,linux,vxworks。構建在OS的優勢就在于系統的擴展性更強,PC的更多功能都可以在PLC上實現。

control task被操作系統每隔一段時間(典型是1ms)調用一次。

IEC task被內建的看門狗監控,監視PLC的實際工作周期是否超出預定時間,如果超出則IEC task任務停止,向系統報告錯誤。


? ?說到這里講講PLCOPEN的IEC 61131-3標準(這個IEC具體名字,網上現查的,方博士掌握的很好)。IEC 61131-3多任務操作系統,也沒查到具體如何實現,自己之前做過嵌入式開發,了解OS以及RTOS,自認為和RTOS類似,熱情高的朋友可以網上看看RTOS,重點是RTOS的優點是什么?歐洲的產品都很注重概念,概念理解了,就可以讓你自由發揮。這里就多插一句,日系PLC在做大型項目時,還是和低端PLC一樣,編程習慣類似匯編,編程上想要實現框架的概念非常難,因此在歐洲比較難推廣。現在日系也在改進,加入了ST編程,使用了功能塊,也算是日本人的妥協吧。

Codesys的今生,未來?


這里有幾個概念:

優先級,數值越小優先級越高,根據任務的實時性,設定優先級

任務類型

循環:周期性執行任務

自由運行:只要啟動程序就處理任務,CPU空閑就運行該task。

Event觸發型:觸發位的上升沿調用程序。外部事件觸發功能,未定制的廠家此選項不能使用

看門狗(早期單片機上的一個概念,紡織程序進入死循環,提出了定時喂狗的概念,其本質就是一個減法定時器)

說說MCU如何使用watchdog吧。


while(1)

{

//用戶自己寫的程序

Watchdog = 10ms; //watchdog timer后臺按照tick做減法,如果timer為0,就觸發一個硬件中斷,告訴用戶程序在單位時間內沒執行完,檢查錯誤。正常則每次喂狗,設置timer為10ms

}



CoDeSys的watchdog定時監視PLC的實際工作周期是否超出預定時間,避免PLC在執行程序的過程中進入死循環,或者PLC執行非預定程序造成系統癱瘓。當任務超時,任務復位,進入初始狀態,繼續執行。


對比一下AB control logix的任務實現

control logix項目分為任務(task),程序(program)和例程(routine)。

任務(task):每個control logix控制器最多32個任務,僅有一個continuous任務,其余為Periodic或者event任務。

任務命名包括任務功能,優先級和執行周期

任務的三種類型:


1. 連續型任務,指的是周而復始連續執行的任務,一個項目只允許定義1個,亦可以不定義,等同于codesys中的PLC_PRG(POU)。

2. 周期型任務,定時中斷執行的邏輯程序,需定義周期時間,設定優先級別,最多可以定義31個

3. 事件觸發型任務,事件觸發引起的任務調度,事件觸發可以是外部輸入點引起(如同PLC5/SLC),也可以由consumed tag引起或者直接指令調用引起,還可以由運動控制狀態引起,需要設定優先級別,最多定義31個。

Control logix中的producer/consumer的概念非常好,體現在其組網能力上。比如某一個模塊是消息的生產者,產生消息存放在消息塊中,其他需要此變量的功能塊,定義一個消息consumer即可。有興趣的朋友可以自己看看相關資料。


CoDeSys的編程工具

IL 、ST、 FBD 、LD、 CFC、 SFC六種語言,我個人比較鐘愛ST,CFC。

CodesysV2.3還是強調過程編程,到了V3.5則強調面向對象,C 的影子更多了。

言歸正傳,應用者也不需要關心那么多技巧,能實現功能,并且代碼具有可維護性就是一個合格的工程師。


1.高級語言中的struct,union。

Stuct在西門子SCL語言中被稱為UDT(user defined type),AB RSLogix 5000中也被稱為UDT

TYPE TRAFFIC :

(RED, YELLOW:=1, GREEN:=10);

END_TYPE


TYPE STRUCT1 :

STRUCT

P1:INT;

P2:INT;

P3:INT;

END_STRUCT

END_TYPE


2.指針,c,c 中的頂級利器,在codesys中也可以使用

Example in ST:

pt:POINTER TO INT;

var_int1:INT;

var_int2:INT;

pt := ADR(var_int1);

var_int2:=pt^;


3.FC,FB的概念

Codesys的今生,未來?

Codesys的今生,未來?

Codesys的今生,未來?

Codesys的今生,未來?

Codesys的今生,未來?


上述是CoDeSys說明書的例程,不知道看出有什么不同?

FC在程序中直接調用即可,FB則需要先定義實例(instance),Instance: FUB。這里的Instance就是C 中的對象實例。怎么理解這個實例呢?上個最傻的高級語言的例子吧。


class Student

{

int age;

int sex;

int grade;


void DoWork(void);

};


Student tony, jany;


tony.age = 10;

tony.sex = male;

tony.grade = 3;

tony.DoWork();


jany.age = 9;

jany.sex = female;

jany.grade = 3;

jany.DoWork();


這里的DoWork就類似FB,可以看到FB帶有自己獨立的數據塊,比如例中的age,sex,grade。


對比西門子S300/S400的FC、FB

1.FC不具備自己的存儲區,FB有自己的存儲區-背景DB。

2.FC和FB都有自己的TEMP變量,存儲在系統的本地stack上。當FC和FB調用完畢,TEMP變量會釋放。

3.FB有靜態變量,FC沒有。靜態變量在背景DB中,FB調用完畢,靜態變量仍然有效。

西門子300中,DB分為背景DB和共享DB,背景DB和FB相關聯。

景DB和共享DB沒有本質區別,它們的數據都可以被任何一個DB,FC或者FB讀寫。它們的區別在于使用目的:背景DB為FB提供數據,其數據格式和FB變量聲明一致;共享DB目的為用戶程序提供一個可保存的數據區。

Codesys的今生,未來?


如果對C比較熟悉,可以這樣理解:FC和FB像C中的函數,只不過FB可以生成靜態變量,在下次函數調用時數據可以保留,而FC的變量只在調用期內有效,下次調用又重新更換。每次調用FC的I/O區域必須要自己每次手動輸入,而FB就不要,省去不少麻煩,如果在上位機控制直接輸入DB控制地址就可!


看到這里,大家再思索一下,德系PLC的編程思想雖然實現形式不同,但強調的概念都一樣,一定要理解這些概念,才能熟練應用。


4.PLC_PRG

PLC_PRG是一個預定義的POU(program of unit),每個工程必須包含這個特定的程序,這個POU在每個cycle中調用一次。其本質就是一個freewheeling程序。

如果使用了多任務,可以不包含PLC_PRG,按照任務配置表執行特定程序。


5.lib庫的使用

Lib的使用體現了codesys高級語言的特性,支持math.lib,string.lib,canopen.lib,可以使用自定義的lib

Codesys的今生,未來?


用戶自己實現的lib庫,包含兩種:Internal lib,External lib,有什么區別呢?

內部是完全利用CoDeSys實現的自定義lib庫。外部庫則需要利用相關的編譯鏈去編譯,更多被底層開發者所采用,可以直接利用OS底層的API進行編程,性能效率更高。


Codesys的今生,未來?

6.好用的case語句


CASE INT1 OF

1, 5:

BOOL1 := TRUE;

BOOL3 := FALSE;

2:

BOOL2 := FALSE;

BOOL3 := TRUE;

10..20:

BOOL1 := TRUE;

BOOL3:= TRUE;

ELSE

BOOL1 := NOT BOOL1;

BOOL2 := BOOL1 OR BOOL2;

END_CASE;


case語句是我比較喜歡的功能,可以實現手動自動,可以實現多工位。

K5 PLC沒有日系的STL,也沒有西門子的SCR指令,可以通過其他方式實現類case方法,大家也可以思考下。


更多CoDeSys的使用細節可參考CoDeSys說明書“CoDeSys_V23_E.pdf”

能想到的也就這些,暫時寫到這里吧,文中更多強調的是概念,具體編程實現和技巧涉及很少,個人實戰也不是很多,認識也有膚淺,大家看后有什么好的想法,也請告知,謝謝!



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254739.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254739.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254739.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用halcon結合機械XY軸對相機進行9點標定

小哥哥小姐姐覺得有用點個贊唄! 先在halcon中計算仿射變換矩陣并驗證 //在圖像中找到的模板中心位置 PicX:[1680.721,2065.147,911.499,526.798,1290.920,1285.731,1300.953] PicY:[968.321,964.366,976.283,980.035, 587.055,394.727,1355.487] //與圖像中查找…

Ubuntu Linux 提出新的發布模式——測試周

2019獨角獸企業重金招聘Python工程師標準>>> 導讀開源技術項目最大的優勢之一就是社區的每個人都可以自由地提出想法,如果獲得社區支持,它可以變成現實。著名的 Ubuntu 開發人員 Simon Quigley 就提出了一個可能改變 Ubuntu Linux 開發過程的…

264 I和IDR

I和IDR幀都是使用幀內預測的。它們都是同一個東西而已,在編碼和解碼中為了方便,要首個I幀和其他I幀區別開,所以才把第一個首個I幀叫IDR,這樣就方便控制編碼和解碼流程。IDR幀的作用是立刻刷新,使錯誤不致傳播,從IDR幀開始,重新算一個新的序列…

gen_caltab生成標定文件

目錄gen_caltab(算子)描述參數gen_caltab(算子) gen_caltab - 為具有矩形排列標記的校準板生成校準板描述文件和相應的PostScript文件。 gen_caltab(:: XNum,YNum,MarkDist,Diamet…

主席樹,喵~

稍微總結一下主席樹吧 Too Difficult!搞了一天搞出一大堆怎么令人悲傷的辣雞代碼。總之先總結一下吧,以后碰到這種問題直接拿去毒害隊友好了。 UPD 5/24 茍狗是沙比 一個節點記錄三個信息:lson,rson,sum 用pid表示節點個數。 build void buil…

【轉】小白級的CocoaPods安裝和使用教程

原文網址:http://www.jianshu.com/p/e2f65848dddc 百度有很多CocoaPods的安裝教程.第一次看的時候,確實有點摸不透的感覺.經過思考,一步一步來實踐,前后花了三十幾分鐘,才順利使用..所以想了想,我還是寫一個小白級的教程吧.細到每一個細節都說明. 讓你不用10分鐘解決…

常見錯誤總結

少打頭文件 少打using namespace std; 命名沖突&#xff0c;全局變量與局部變量命名一致&#xff0c;導致使用的值不是期望值 邊讀邊寫&#xff0c;導致改后讀&#xff0c;覆蓋寫入的值 長整數移位溢出&#xff0c;1<<63是錯誤的&#xff0c;應該寫成1ll<<63 循環變…

x264_sps_init

x264_sps_init此函數為序列量化集的初始化。主要對結構體x264_sps_t中參數的初始化。 void x264_sps_init( x264_sps_t *sps, int i_id, x264_param_t *param ) { sps->i_id i_id;首先設置序列參數集的ID b_qpprime_y_zero_transform_bypass判斷碼率控制方法是否是恒定質量…

HALCON相機標定相機內參相機外參

目錄相機標定1.相機標定是什么2.怎么使用halcon進行相機內外參標定&#xff1f;&#xff08;1&#xff09;搭建硬件1.**相機連好電腦&#xff0c;用相機廠家軟件打開相機&#xff0c;檢查一下相機是否正常。**2.**接下來使用halcon連接相機**&#xff08;2&#xff09;開始標定…

ionic更改端口號

ionic serve -p 8888 —— 重新指定端口號為8888 serve [options] ............................... 啟動本地服務器進行開發測試 dev/testing   [--consolelogs|-c] ..................... 輸入app的控制臺到ionic的控制臺顯示   [--serverlogs|-s] .....................…

angular change the url , prevent reloading

http://stackoverflow.com/questions/14974271/can-you-change-a-path-without-reloading-the-controller-in-angularjs $location.search({vln: $scope.vln_id}, false);會改變url中 &#xff1f; 后面的 搜索參數&#xff0c;但是controller不會重新實例化。angular 官方文檔…

Ubuntu apt-get 更新/查看軟件

ubuntu 升級軟件&#xff1a; sudo apt-get update 更新源  sudo apt-get upgrade 更新已安裝的包  sudo apt-get dist-upgrade 升級系統 ubuntu升級特定軟件&#xff1a; 可以用 sudo apt-get install pkgname 看軟件安裝位置:dpkg -L xxxx 查看軟件是否安裝&#xff1…

X264設定

--aq-mode <integer> AQ method [1]- 0: Disabled- 1: Variance AQ (complexity mask)說明&#xff1a;自適應量化方法&#xff0c;可以改善某些場景過于模糊等問題&#xff0c;默認開啟- 0: 關閉- 1: 可變AQ推薦值&#xff1a;默認范例&#xff1a;--aq-mode 1--aq-stre…

C#圓形卡尺測量程序基于halcon

廢話不多說上源碼 覺得帖子有用給點個贊哈 先來個效果圖 下邊的是源碼&#xff0c;自己新建一個文件粘貼進去&#xff0c;包含到您現在的項目 中。這串源碼后邊是使用方法。 using System; using System.Collections.Generic; using System.Linq; using System.Text; usin…

MySQL松散索引掃描與緊湊索引掃描

什么是松散索引&#xff1f; 答&#xff1a;實際上就是當MySQL 完全利用索引掃描來實現GROUP BY 的時候&#xff0c;并不需要掃描所有滿足條件的索引鍵即可完成操作得出結果。 要利用到松散索引掃描實現GROUP BY&#xff0c;需要至少滿足以下幾個條件&#xff1a;◆ GROUP BY 條…

算法馬拉松24

算法馬拉松24 A 小C的多邊形 題意&#xff1a;n1個點的多邊形。給外圈的邊標記上1~n&#xff0c;里圈的邊也標記上1~n&#xff0c;使得對于一個外圈相鄰點與中間點構成的三角形的邊權之和都相等。\(n \le 10^6\) 題解&#xff1a;顯然每個三角形權值和為\(\frac{3(n1)}{2}\) 一…

HUD2795 線段樹(單點更新)

題目中給出的h和w范圍均大&#xff0c;其實n的最大范圍才200000&#xff0c;所以我們建立的線段樹大小為min(h,n),線段樹的每一個節點包含一個變量c&#xff0c;記錄當前區間內還剩下的可以put on的最大長度。插入一個數時&#xff0c;如果該數大于該區間最大值&#xff0c;則返…

科維PLC運行時系統ProConOS embedded CLR 2.2 特定應用

ProConOS embedded CLR是新型的開放式標準化PLC運行時系統&#xff0c;符合IEC 61131標準&#xff0c;可執行不同的自動化任務&#xff08;PLC、PAC、運動控制、CNC、機器人和傳感器&#xff09;。   通過采用國際標準的微軟中間語言&#xff08;依據IEC/ISO 23271標準為MSIL…