• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      CFC功能塊開發(fā)中指針應(yīng)用研究

      2016-05-05 01:52:31曹忠華劉洋李志鋒秦大偉張巖鞍鋼集團鋼鐵研究院遼寧鞍山4009鞍鋼建設(shè)集團有限公司機電安裝工程分公司遼寧鞍山400
      鞍鋼技術(shù) 2016年2期
      關(guān)鍵詞:指針

      曹忠華,劉洋,李志鋒,秦大偉,張巖(.鞍鋼集團鋼鐵研究院,遼寧鞍山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功能塊進行了詳細的闡述。

      1 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ù)和功能。

      2 CFC功能塊結(jié)構(gòu)

      利用FB generator通過C語言創(chuàng)建用戶專用功能塊時,須嚴格遵守西門子定義的結(jié)構(gòu)和語法。CFC功能塊(FB)從定義文件生成。這些定義文件通過SIMATIC D7功能塊生成器轉(zhuǎn)換成目標碼和說明。每一個CFC功能塊FB都通過下面3個文件定義:

      .dat:功能塊的I/O輸入輸出和CFC信息定義模塊

      .c:功能塊運行源碼模塊(C語言編寫)。

      .bmp:功能塊圖形模塊。

      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)一些特定的算法或邏輯判斷操作。這些算法或邏輯判斷運行代碼都位于.c文件中,由C語言格式編寫而成。這些代碼包括由操作系統(tǒng)直接調(diào)用的主函數(shù)(NRM)、初始化函數(shù)(INI)以及由這兩個函數(shù)直接或間接調(diào)用的其他輔助函數(shù)。功能塊初始化函數(shù)(INI)在系統(tǒng)復位后或功能塊的第一次加載時執(zhí)行一次,完成功能塊管腳的初始化工作和內(nèi)部變量的內(nèi)存分配等工作。功能塊的主函數(shù)(NRM)每個運行周期執(zhí)行一次,完成特定的算法和邏輯判斷等功能。輔助函數(shù)使用時必須在程序開始處聲明函數(shù)原型及參數(shù),而函數(shù)體放在主函數(shù)之后。在調(diào)用外部函數(shù)前,必須使用#include指令,在源碼模塊中包含有外部函數(shù)的原形定義的頭文件。輔助函數(shù)和外部函數(shù)的調(diào)用通常在都位于主函數(shù)(NRM)中。輔助函數(shù)和外部函數(shù)的使用有利于系統(tǒng)的維護以及源文件的可重復利用。

      2.3圖形模塊

      在CFC編程時,功能塊顯示為一個具有若干個不同功能管腳的塊狀視圖,但進行功能塊編程時無需關(guān)注。

      3 CFC功能塊的實現(xiàn)和指針應(yīng)用

      使用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功能塊

      4 結(jié)論

      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

      猜你喜歡
      指針
      垂懸指針檢測與防御方法*
      軟件學報(2020年6期)2020-09-23 07:31:52
      偷指針的人
      娃娃畫報(2019年5期)2019-06-17 16:58:10
      郊游
      娃娃畫報(2019年4期)2019-05-14 16:39:32
      為什么表的指針都按照順時針方向轉(zhuǎn)動
      辨析指針數(shù)組與數(shù)組指針
      基于改進Hough變換和BP網(wǎng)絡(luò)的指針儀表識別
      電測與儀表(2015年5期)2015-04-09 11:30:42
      我們倆
      基于彩色區(qū)域識別快速報警指針識別算法
      淺析C語言指針
      軟件工程(2014年3期)2014-03-15 20:11:33
      ARM Cortex—MO/MO+單片機的指針變量替換方法
      同江市| 堆龙德庆县| 长寿区| 凤台县| 白城市| 柯坪县| 平乡县| 新民市| 渭南市| 炎陵县| 湘阴县| 克山县| 福建省| 政和县| 襄樊市| 密云县| 会理县| 富蕴县| 温州市| 宝山区| 民和| 西和县| 曲麻莱县| 读书| 肥东县| 荣成市| 涿鹿县| 连山| 仙居县| 嘉祥县| 孝昌县| 衡阳市| 巴彦县| 修文县| 宜宾市| 抚松县| 福海县| 孝感市| 齐河县| 老河口市| 尼勒克县|