曹忠華,劉洋,李志鋒,秦大偉,張巖(.鞍鋼集團鋼鐵研究院,遼寧鞍山4009;.鞍鋼建設集團有限公司機電安裝工程分公司,遼寧鞍山400)
?
CFC功能塊開發中指針應用研究
曹忠華1,劉洋2,李志鋒1,秦大偉1,張巖1
(1.鞍鋼集團鋼鐵研究院,遼寧鞍山114009;2.鞍鋼建設集團有限公司機電安裝工程分公司,遼寧鞍山114010)
摘要:針對西門子控制器在工業控制領域的廣泛應用,闡述如何采用C語言的方法編程實現CFC功能塊。分析了CFC功能塊的基本結構,同時給出了CFC功能塊如何基于C語言的代碼實現向量數據的指針方式傳遞,對基于C語言的功能塊的生成過程進行了分析。研究表明,靈活運用C語言的指針功能可以開發出滿足向量運算所需的CFC功能塊。
關鍵詞:C語言;指針;SIMATIC TDC;CFC功能塊
曹忠華,信息系統項目管理師,2004年畢業于吉林大學通信工程學院自動化專業。E-mail:bigczh@139.com
西門子公司的SIMATIC TDC是一種多處理器自動化系統,擅長解決處理復雜的控制、通訊和驅動任務,它采用自由組態、模塊化的設計思想,通過多處理器并行運行方式可以實現性能的近乎無限擴展。作為西門子公司功能最強大的控制器,TDC采用實時操作系統(固定時隙為25μs),擁有高速的采樣頻率和強大的數據循環處理能力,近年來在鋼鐵、航空航天、電力、交通、印刷、有色金屬制造、造紙等行業都取得了杰出業績。鞍鋼自2003年冷軋硅鋼生產線投產以來,已有多條冷軋生產線使用了TDC系統。目前鞍鋼冷軋1號線也正在進行電控系統向TDC系統轉化的改造,在改造過程中需要實現TDC自動化系統的自主編程。
本文對CFC編程方式進行了介紹,分析了CFC功能塊的結構,就如何利用C語言的指針功能開發滿足向量傳遞和運算的CFC功能塊進行了詳細的闡述。
TDC編程使用CFC編程方式。CFC(Continuous Function Chart)是一種開放的編程平臺,它將詳細的程序算法進行封裝,預制成標準功能塊(CFC block)。在功能塊中只留有少量的輸入/輸出引腳作為程序間的接口。相同類型的功能塊集合為庫,用戶可以根據編程需要將其導入安裝至編程環境,用戶程序由這些標準功能塊連接組合。系統集成了廣泛的預制的功能塊庫,提供了包括閉環控制、算術運算、數據類型轉換、邏輯功能、服務與診斷、通訊功能、順序控制、特殊功能等類型的約330多個經過驗證的標準功能塊[1]。
與普通的梯形圖或語句表語言編程方式相比,CFC圖形化編程和標準程序塊庫的使用意味著編程人員無需復雜的專業編程知識。同時,CFC提供了功能強大的在線功能,可在線優化、插入、修改和刪除功能塊,顯著縮短調試時間。因此,工藝技術人員可以快速靈活的完成程序的設計、修改和調試。
CFC功能塊在程序中可多次自由調用,圖形化連接,每個功能塊都可賦值5種循環周期中的一種。功能塊還可放置在特定的運行時間組中,在指定運行條件下同時運行或停止。另外,CFC還允許用戶通過以下3種方式創建完成特定功能的自定義功能塊:
(1)Chart in Chart(程序嵌套)功能,使用標準功能塊完成特定功能,并將相關的CFC程序封裝作為子程序調用。
(2)Compile Chart as Block Type同樣使用標準功能塊完成特定功能,并將相關的詳細算法步驟隱藏封裝編譯成標準功能塊的樣式,供程序調用。
(3)使用Function Block generator(下文稱為D7-FB-GEN),通過標準ANSI-C語言創建用戶專用功能塊,以保護用戶的專有技術。這種方式可以完成復雜的程序算法,并且可以處理硬件相關的數據和功能。
利用FB generator通過C語言創建用戶專用功能塊時,須嚴格遵守西門子定義的結構和語法。CFC功能塊(FB)從定義文件生成。這些定義文件通過SIMATIC D7功能塊生成器轉換成目標碼和說明。每一個CFC功能塊FB
2.1輸入輸出和信息定義模塊
在CFC編程平臺中,功能塊顯示為一個具有少量輸入輸出管腳的塊狀視圖,功能塊之間的數據交換以管腳間的連線表示。這些管腳都具有自己的數據類型、管腳名稱、管腳注釋等,功能塊本身也具有一定的特殊屬性。DAT文件就是功能塊結構中用來定義輸入輸出管腳和功能塊自身信息屬性的模塊。在開發CFC功能塊時,需嚴格按照特定的特殊規則來完成功能塊的屬相設置和輸入輸出定義。在DAT文件中可以定義功能塊的名稱、功能塊注釋說明、是否可以在線插入、是否可以配置在中斷任務中;同時還可以定義輸入輸出管腳的名稱、數據類型、管腳默認初始值、管腳注釋說明、管腳是否可以被連接、管腳是否可以被監視和修改等。
2.2源碼模塊
CFC功能塊都是按照功能或者算法定義的,每一個功能塊都位于某一個特定的循環周期之中,每個周期功能塊實現一些特定的算法或邏輯判斷操作。這些算法或邏輯判斷運行代碼都位于
2.3圖形模塊
在CFC編程時,功能塊顯示為一個具有若干個不同功能管腳的塊狀視圖,但進行功能塊編程時無需關注。
使用D7-FB-GEN創建CFC功能塊時,首先需要建立一個項目,項目名稱最長不超過50個字符。每一個項目下可以創建多個庫,每個庫又可以包含多個功能塊。庫的名稱前3個字符必須為FBA,余下3個字符可自定義;功能塊的名稱最多由6個字符構成。每個庫和項目每次編譯前可設置版本號,以便在導入到CFC編程平臺時方便地區別新的版本。
在創建CFC功能塊時,根據功能設計需求,可以選擇使用簡單模板或復雜模板,編程環境會自動創建前文所描述的3個文件。相對于簡單模板,復雜模板提供了功能塊初始化函數(INI),并演示了如何在程序中使用結構變量和指針,并演示了如何在初始化函數中完成內存的分配。通過簡單模板和復雜模板,工藝技術人員可以很方便地完成功能塊的編制工作。
在現代控制領域中,向量的運算隨處可見,比如在板形閉環控制算法和邊緣降控制算法中,更是離不開向量計算。而在西門子的模板和幫助文件中并沒有明確的展示如何進行向量的數據傳遞。下面以兩個簡單的塊來說明如何利用指針進行向量的發送和接收。
3.1功能說明和I/O管腳的定義
向量發送功能塊(S2V1)將輸入的8個float型數據整合成一個向量,并將指向該向量的指針通過輸出管腳傳送給下一個功能塊使用。根據功能需求的信息,設計該功能塊具有8個輸入管腳(X1~X8:REAL)和2個輸出管腳(VY:DWORD、QTS:BOOL),如圖1所示。由于發送向量需要在內存中開辟專用的內存空間,因此還定義了一個內部變量(PTR:DINT)用于保存該內存空間的指針。
向量接收功能塊(V2S4)根據接收到的向量指針,將該向量復制到自己的內存空間中,并根據另一個輸入管腳決定輸出該向量中的哪4個元素。根據功能需求的信息,設計該功能塊具有2個輸入管腳(VX:DWORD、FE:INT)和5個輸出管腳(Y01~Y01:REAL、QTS:BOOL),如圖2所示。以及用于保存向量數據而開辟的內存空間指針的內部變量(PTR:DINT)。

圖1 S2V1功能塊

圖2 V2S4功能塊
3.2功能模塊的實現
向量發送和接收功能塊有一個共同點,就是都需要開辟內存空間用來存儲向量數據,這個動作一般來說都在功能塊初始化函數(INI)中實現。在向量發送和接收功能塊的初始化函數中,利用malloc函數申請了內存空間,若申請失敗則將輸出管腳QTS置位報警,若申請成功則將指向該內存空間的指針保存在了內部變量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;}}在向量發送功能塊中,直接將輸入管腳X1~ X8的值依次存入PTR指向的內存空間,最后將該內存空間的指針轉化為無符號32位整型數據格式賦值給輸出管腳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強制類型轉換為指針,通過C語言中的內存拷貝函數將VX所指向的內存空間復制到PTR指向的內存空間,最后根據輸入管腳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首先必須將相應的文件轉換成可編譯或可引用的文件。輸入輸出和信息定義模塊與圖形模塊集合在一起,轉換成MASK文件(以msk為后綴名的文件)。每個功能塊的源碼文件都被編譯成一個對象目標文件(以o為后綴名的文件),再將每個庫里面的個對象目標文件打包成可以使用的庫文件(以a為后綴名的文件)[2]。庫文件與MASK文件一起組成了可被引用的模塊集合,D7-FB-GEN在編譯完成后自動將其復制安裝到CFC編程平臺下。在CFC編程控制平臺下,通過Options-> Block Types命令可以打開庫導入對話框,在此可以將編譯完成的功能塊庫導入或更新到項目編程環境中。
向量發送功能塊(S2V1)與向量接收功能塊(V2S4)僅僅是一個簡單的試例程序,完成的功能并不復雜,但成功的實現了向量數據的指針方式傳遞。這兩個功能塊在實際編程過程中可以根據實際需要安排在合適的系統循環周期內進行調用,其在實際運行中的狀態如圖3所示。

圖3 運行中的S2V1與V2S4功能塊
CFC編程平臺界面友好、調試方便,與使用CFC標準功能塊相比,使用C語言創建自定義功能塊的方法可以更加靈活的實現更為復雜的功能,同時靈活使用C語言的指針功能還可以完成硬件地址操作和向量傳遞運算等諸多高級功能。隨著西門子TDC控制器在工業控制領域的使用范圍越來越廣泛,開發適合項目需求的特定功能塊完善程序功能顯得越來越重要。
參考文獻
[1]鮑伯祥,陸章杰,王世寧.西門子TDC編程及應用指南[M].北京:北京航空航天大學出版社,2007.
[2]鄭家玲,周澤雁,徐士浩,等.基于C語言的SIMATIC TDC功能塊的研究開發[J].寶鋼技術,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