曹忠華,劉洋,李志鋒,秦大偉,張巖(.鞍鋼集團鋼鐵研究院,遼寧鞍山4009;.鞍鋼建設(shè)集團有限公司機電安裝工程分公司,遼寧鞍山400)
?
CFC功能塊開發(fā)中指針應(yīng)用研究
曹忠華1,劉洋2,李志鋒1,秦大偉1,張巖1
(1.鞍鋼集團鋼鐵研究院,遼寧鞍山114009;2.鞍鋼建設(shè)集團有限公司機電安裝工程分公司,遼寧鞍山114010)
摘要:針對西門子控制器在工業(yè)控制領(lǐng)域的廣泛應(yīng)用,闡述如何采用C語言的方法編程實現(xiàn)CFC功能塊。分析了CFC功能塊的基本結(jié)構(gòu),同時給出了CFC功能塊如何基于C語言的代碼實現(xiàn)向量數(shù)據(jù)的指針方式傳遞,對基于C語言的功能塊的生成過程進行了分析。研究表明,靈活運用C語言的指針功能可以開發(fā)出滿足向量運算所需的CFC功能塊。
關(guān)鍵詞:C語言;指針;SIMATIC TDC;CFC功能塊
曹忠華,信息系統(tǒng)項目管理師,2004年畢業(yè)于吉林大學通信工程學院自動化專業(yè)。E-mail:bigczh@139.com
西門子公司的SIMATIC TDC是一種多處理器自動化系統(tǒng),擅長解決處理復雜的控制、通訊和驅(qū)動任務(wù),它采用自由組態(tài)、模塊化的設(shè)計思想,通過多處理器并行運行方式可以實現(xiàn)性能的近乎無限擴展。作為西門子公司功能最強大的控制器,TDC采用實時操作系統(tǒng)(固定時隙為25μs),擁有高速的采樣頻率和強大的數(shù)據(jù)循環(huán)處理能力,近年來在鋼鐵、航空航天、電力、交通、印刷、有色金屬制造、造紙等行業(yè)都取得了杰出業(yè)績。鞍鋼自2003年冷軋硅鋼生產(chǎn)線投產(chǎn)以來,已有多條冷軋生產(chǎn)線使用了TDC系統(tǒng)。目前鞍鋼冷軋1號線也正在進行電控系統(tǒng)向TDC系統(tǒng)轉(zhuǎn)化的改造,在改造過程中需要實現(xiàn)TDC自動化系統(tǒng)的自主編程。
本文對CFC編程方式進行了介紹,分析了CFC功能塊的結(jié)構(gòu),就如何利用C語言的指針功能開發(fā)滿足向量傳遞和運算的CFC功能塊進行了詳細的闡述。
TDC編程使用CFC編程方式。CFC(Continuous Function Chart)是一種開放的編程平臺,它將詳細的程序算法進行封裝,預(yù)制成標準功能塊(CFC block)。在功能塊中只留有少量的輸入/輸出引腳作為程序間的接口。相同類型的功能塊集合為庫,用戶可以根據(jù)編程需要將其導入安裝至編程環(huán)境,用戶程序由這些標準功能塊連接組合。系統(tǒng)集成了廣泛的預(yù)制的功能塊庫,提供了包括閉環(huán)控制、算術(shù)運算、數(shù)據(jù)類型轉(zhuǎn)換、邏輯功能、服務(wù)與診斷、通訊功能、順序控制、特殊功能等類型的約330多個經(jīng)過驗證的標準功能塊[1]。
與普通的梯形圖或語句表語言編程方式相比,CFC圖形化編程和標準程序塊庫的使用意味著編程人員無需復雜的專業(yè)編程知識。同時,CFC提供了功能強大的在線功能,可在線優(yōu)化、插入、修改和刪除功能塊,顯著縮短調(diào)試時間。因此,工藝技術(shù)人員可以快速靈活的完成程序的設(shè)計、修改和調(diào)試。
CFC功能塊在程序中可多次自由調(diào)用,圖形化連接,每個功能塊都可賦值5種循環(huán)周期中的一種。功能塊還可放置在特定的運行時間組中,在指定運行條件下同時運行或停止。另外,CFC還允許用戶通過以下3種方式創(chuàng)建完成特定功能的自定義功能塊:
(1)Chart in Chart(程序嵌套)功能,使用標準功能塊完成特定功能,并將相關(guān)的CFC程序封裝作為子程序調(diào)用。
(2)Compile Chart as Block Type同樣使用標準功能塊完成特定功能,并將相關(guān)的詳細算法步驟隱藏封裝編譯成標準功能塊的樣式,供程序調(diào)用。
(3)使用Function Block generator(下文稱為D7-FB-GEN),通過標準ANSI-C語言創(chuàng)建用戶專用功能塊,以保護用戶的專有技術(shù)。這種方式可以完成復雜的程序算法,并且可以處理硬件相關(guān)的數(shù)據(jù)和功能。
利用FB generator通過C語言創(chuàng)建用戶專用功能塊時,須嚴格遵守西門子定義的結(jié)構(gòu)和語法。CFC功能塊(FB)從定義文件生成。這些定義文件通過SIMATIC D7功能塊生成器轉(zhuǎn)換成目標碼和說明。每一個CFC功能塊FB
2.1輸入輸出和信息定義模塊
在CFC編程平臺中,功能塊顯示為一個具有少量輸入輸出管腳的塊狀視圖,功能塊之間的數(shù)據(jù)交換以管腳間的連線表示。這些管腳都具有自己的數(shù)據(jù)類型、管腳名稱、管腳注釋等,功能塊本身也具有一定的特殊屬性。DAT文件就是功能塊結(jié)構(gòu)中用來定義輸入輸出管腳和功能塊自身信息屬性的模塊。在開發(fā)CFC功能塊時,需嚴格按照特定的特殊規(guī)則來完成功能塊的屬相設(shè)置和輸入輸出定義。在DAT文件中可以定義功能塊的名稱、功能塊注釋說明、是否可以在線插入、是否可以配置在中斷任務(wù)中;同時還可以定義輸入輸出管腳的名稱、數(shù)據(jù)類型、管腳默認初始值、管腳注釋說明、管腳是否可以被連接、管腳是否可以被監(jiān)視和修改等。
2.2源碼模塊
CFC功能塊都是按照功能或者算法定義的,每一個功能塊都位于某一個特定的循環(huán)周期之中,每個周期功能塊實現(xiàn)一些特定的算法或邏輯判斷操作。這些算法或邏輯判斷運行代碼都位于
2.3圖形模塊
在CFC編程時,功能塊顯示為一個具有若干個不同功能管腳的塊狀視圖,但進行功能塊編程時無需關(guān)注。
使用D7-FB-GEN創(chuàng)建CFC功能塊時,首先需要建立一個項目,項目名稱最長不超過50個字符。每一個項目下可以創(chuàng)建多個庫,每個庫又可以包含多個功能塊。庫的名稱前3個字符必須為FBA,余下3個字符可自定義;功能塊的名稱最多由6個字符構(gòu)成。每個庫和項目每次編譯前可設(shè)置版本號,以便在導入到CFC編程平臺時方便地區(qū)別新的版本。
在創(chuàng)建CFC功能塊時,根據(jù)功能設(shè)計需求,可以選擇使用簡單模板或復雜模板,編程環(huán)境會自動創(chuàng)建前文所描述的3個文件。相對于簡單模板,復雜模板提供了功能塊初始化函數(shù)(INI),并演示了如何在程序中使用結(jié)構(gòu)變量和指針,并演示了如何在初始化函數(shù)中完成內(nèi)存的分配。通過簡單模板和復雜模板,工藝技術(shù)人員可以很方便地完成功能塊的編制工作。
在現(xiàn)代控制領(lǐng)域中,向量的運算隨處可見,比如在板形閉環(huán)控制算法和邊緣降控制算法中,更是離不開向量計算。而在西門子的模板和幫助文件中并沒有明確的展示如何進行向量的數(shù)據(jù)傳遞。下面以兩個簡單的塊來說明如何利用指針進行向量的發(fā)送和接收。
3.1功能說明和I/O管腳的定義
向量發(fā)送功能塊(S2V1)將輸入的8個float型數(shù)據(jù)整合成一個向量,并將指向該向量的指針通過輸出管腳傳送給下一個功能塊使用。根據(jù)功能需求的信息,設(shè)計該功能塊具有8個輸入管腳(X1~X8:REAL)和2個輸出管腳(VY:DWORD、QTS:BOOL),如圖1所示。由于發(fā)送向量需要在內(nèi)存中開辟專用的內(nèi)存空間,因此還定義了一個內(nèi)部變量(PTR:DINT)用于保存該內(nèi)存空間的指針。
向量接收功能塊(V2S4)根據(jù)接收到的向量指針,將該向量復制到自己的內(nèi)存空間中,并根據(jù)另一個輸入管腳決定輸出該向量中的哪4個元素。根據(jù)功能需求的信息,設(shè)計該功能塊具有2個輸入管腳(VX:DWORD、FE:INT)和5個輸出管腳(Y01~Y01:REAL、QTS:BOOL),如圖2所示。以及用于保存向量數(shù)據(jù)而開辟的內(nèi)存空間指針的內(nèi)部變量(PTR:DINT)。
圖1 S2V1功能塊
圖2 V2S4功能塊
3.2功能模塊的實現(xiàn)
向量發(fā)送和接收功能塊有一個共同點,就是都需要開辟內(nèi)存空間用來存儲向量數(shù)據(jù),這個動作一般來說都在功能塊初始化函數(shù)(INI)中實現(xiàn)。在向量發(fā)送和接收功能塊的初始化函數(shù)中,利用malloc函數(shù)申請了內(nèi)存空間,若申請失敗則將輸出管腳QTS置位報警,若申請成功則將指向該內(nèi)存空間的指針保存在了內(nèi)部變量PTR中。
INI()
{float*pointer;
pointer=(float*)malloc(sizeof(float)*8);
if(pointer==NIL)SET_B1_LOG1(QTS);
else{SET_B1_LOG0(QTS);
PTR=(u_int32)pointer;}}在向量發(fā)送功能塊中,直接將輸入管腳X1~ X8的值依次存入PTR指向的內(nèi)存空間,最后將該內(nèi)存空間的指針轉(zhuǎn)化為無符號32位整型數(shù)據(jù)格式賦值給輸出管腳VY,完成了向量指針的傳遞工作。
NRM()
{float*ptr_data;
if(IS_B1_LOG1(QTS));
else{ptr_data=(float*)PTR;
*(ptr_data)=X1;
*(ptr_data+1)=X2;省略若干行
*(ptr_data+7)=X8;
VY=(int32*)ptr_data;}}
在向量接收功能塊中,將輸入管腳VX強制類型轉(zhuǎn)換為指針,通過C語言中的內(nèi)存拷貝函數(shù)將VX所指向的內(nèi)存空間復制到PTR指向的內(nèi)存空間,最后根據(jù)輸入管腳PE決定將哪4個向量元素賦值給Y01~Y04,從而完成向量元素的分解工作。
NRM()
{float*ptr_data;
if(IS_B1_LOG1(QTS));
else{ptr_data=(float*)PTR;
memcpy(ptr_data,(float*)VX,sizeof(float)*8);
Y01=*(ptr_data+FE);
Y02=*(ptr_data+FE+1);
Y03=*(ptr_data+FE+2);
Y04=*(ptr_data+FE+3);}}
3.3功能塊的編譯與導入
DAT文件和源碼文件編寫完成后,功能塊并不能被工程項目直接引用。D7-FB-GEN首先必須將相應(yīng)的文件轉(zhuǎn)換成可編譯或可引用的文件。輸入輸出和信息定義模塊與圖形模塊集合在一起,轉(zhuǎn)換成MASK文件(以msk為后綴名的文件)。每個功能塊的源碼文件都被編譯成一個對象目標文件(以o為后綴名的文件),再將每個庫里面的個對象目標文件打包成可以使用的庫文件(以a為后綴名的文件)[2]。庫文件與MASK文件一起組成了可被引用的模塊集合,D7-FB-GEN在編譯完成后自動將其復制安裝到CFC編程平臺下。在CFC編程控制平臺下,通過Options-> Block Types命令可以打開庫導入對話框,在此可以將編譯完成的功能塊庫導入或更新到項目編程環(huán)境中。
向量發(fā)送功能塊(S2V1)與向量接收功能塊(V2S4)僅僅是一個簡單的試例程序,完成的功能并不復雜,但成功的實現(xiàn)了向量數(shù)據(jù)的指針方式傳遞。這兩個功能塊在實際編程過程中可以根據(jù)實際需要安排在合適的系統(tǒng)循環(huán)周期內(nèi)進行調(diào)用,其在實際運行中的狀態(tài)如圖3所示。
圖3 運行中的S2V1與V2S4功能塊
CFC編程平臺界面友好、調(diào)試方便,與使用CFC標準功能塊相比,使用C語言創(chuàng)建自定義功能塊的方法可以更加靈活的實現(xiàn)更為復雜的功能,同時靈活使用C語言的指針功能還可以完成硬件地址操作和向量傳遞運算等諸多高級功能。隨著西門子TDC控制器在工業(yè)控制領(lǐng)域的使用范圍越來越廣泛,開發(fā)適合項目需求的特定功能塊完善程序功能顯得越來越重要。
參考文獻
[1]鮑伯祥,陸章杰,王世寧.西門子TDC編程及應(yīng)用指南[M].北京:北京航空航天大學出版社,2007.
[2]鄭家玲,周澤雁,徐士浩,等.基于C語言的SIMATIC TDC功能塊的研究開發(fā)[J].寶鋼技術(shù),2009(1):35-38.
(編輯袁曉青)
修回日期:2015-05-07
Research on App lication of Pointers for CFC Function Blocks during Development
Cao Zhonghua1,Liu Yang2,Li Zhifeng1,Qin Dawei1,Zhang Yan1
(1.Iron&Steel Research Institutes of Ansteel Group Corporation,Anshan 114009,Liaoning, China;2.Electromechanical Installation Engineering Branch of Angang Construction Group Co.,Ltd.,Anshan 114010,Liaoning,China)
Abstract:In view of the facts that Siemens controllers are widely used in the industrial control field,itwas discussed how the CFC function blocks can be established by using C language for programming.And the basic structures of the CFC function blocks was analyzed while it was simultaneously explained how the codes based on the C language are transmitted to the pointers with quantity data by application of the CFC function blocks and subsequently the formation process of the function blocks based on C language was analyzed.Analytical results show that the CFC function blocks demanded in vector operations can be developed by the flexible application of the pointing function of C language.
Key words:C language;pointer;SIMATIC TDC;CFC function block
中圖分類號:TG232
文獻標識碼:A
文章編號:1006-4613(2016)02-0045-04