日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CoDeSys

發(fā)布時間:2023/12/10 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CoDeSys 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


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

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


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


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


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


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


3S競爭者

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

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


CoDeSys框架組成

兩部分:

1、CoDeSys IDE。

? ?即CoDeSys集成開發(fā)環(huán)境,符合IEC61131編程規(guī)范,安裝于PC機(jī)上,運(yùn)行于Windows或者Linux下。由最終應(yīng)用用戶所使用的開發(fā)工具。

2、CoDeSys Runtime。

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

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

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

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

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

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



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


CoDeSys底層運(yùn)行原理


? ?Codesys runtime是建立在OS上的,常見的OS有wince,windows,linux,vxworks。構(gòu)建在OS的優(yōu)勢就在于系統(tǒng)的擴(kuò)展性更強(qiáng),PC的更多功能都可以在PLC上實現(xiàn)。

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

IEC task被內(nèi)建的看門狗監(jiān)控,監(jiān)視PLC的實際工作周期是否超出預(yù)定時間,如果超出則IEC task任務(wù)停止,向系統(tǒng)報告錯誤。


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



這里有幾個概念:

優(yōu)先級,數(shù)值越小優(yōu)先級越高,根據(jù)任務(wù)的實時性,設(shè)定優(yōu)先級

任務(wù)類型

循環(huán):周期性執(zhí)行任務(wù)

自由運(yùn)行:只要啟動程序就處理任務(wù),CPU空閑就運(yùn)行該task。

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

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

說說MCU如何使用watchdog吧。


while(1)

{

//用戶自己寫的程序

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

}



CoDeSys的watchdog定時監(jiān)視PLC的實際工作周期是否超出預(yù)定時間,避免PLC在執(zhí)行程序的過程中進(jìn)入死循環(huán),或者PLC執(zhí)行非預(yù)定程序造成系統(tǒng)癱瘓。當(dāng)任務(wù)超時,任務(wù)復(fù)位,進(jìn)入初始狀態(tài),繼續(xù)執(zhí)行。


對比一下AB control logix的任務(wù)實現(xiàn)

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

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

任務(wù)命名包括任務(wù)功能,優(yōu)先級和執(zhí)行周期

任務(wù)的三種類型:


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

2. 周期型任務(wù),定時中斷執(zhí)行的邏輯程序,需定義周期時間,設(shè)定優(yōu)先級別,最多可以定義31個

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

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


CoDeSys的編程工具

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

CodesysV2.3還是強(qiáng)調(diào)過程編程,到了V3.5則強(qiáng)調(diào)面向?qū)ο?#xff0c;C 的影子更多了。

言歸正傳,應(yīng)用者也不需要關(guān)心那么多技巧,能實現(xiàn)功能,并且代碼具有可維護(hù)性就是一個合格的工程師。


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說明書的例程,不知道看出有什么不同?

FC在程序中直接調(diào)用即可,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帶有自己獨(dú)立的數(shù)據(jù)塊,比如例中的age,sex,grade。


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

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

2.FC和FB都有自己的TEMP變量,存儲在系統(tǒng)的本地stack上。當(dāng)FC和FB調(diào)用完畢,TEMP變量會釋放。

3.FB有靜態(tài)變量,FC沒有。靜態(tài)變量在背景DB中,FB調(diào)用完畢,靜態(tài)變量仍然有效。

西門子300中,DB分為背景DB和共享DB,背景DB和FB相關(guān)聯(lián)。

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


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


看到這里,大家再思索一下,德系PLC的編程思想雖然實現(xiàn)形式不同,但強(qiáng)調(diào)的概念都一樣,一定要理解這些概念,才能熟練應(yīng)用。


4.PLC_PRG

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

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


5.lib庫的使用

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


用戶自己實現(xiàn)的lib庫,包含兩種:Internal lib,External lib,有什么區(qū)別呢?

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



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語句是我比較喜歡的功能,可以實現(xiàn)手動自動,可以實現(xiàn)多工位。

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


更多CoDeSys的使用細(xì)節(jié)可參考CoDeSys說明書“CoDeSys_V23_E.pdf”

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



總結(jié)

以上是生活随笔為你收集整理的CoDeSys的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。