pcs7 v6.1 中自定義功能程式庫使用入門 · pcs7 v6.1...

38
PCS7 V6.1 PCS7 V6.1 PCS7 V6.1 PCS7 V6.1 中自定義功能 中自定義功能 中自定義功能 中自定義功能程式庫 程式庫 程式庫 程式庫使用入門 使用入門 使用入門 使用入門 Customized Library in PCS7 V6.1 Getting-started Getting-started Edition (2008 03 )

Upload: lethuy

Post on 18-May-2018

251 views

Category:

Documents


1 download

TRANSCRIPT

PCS7 V6.1PCS7 V6.1PCS7 V6.1PCS7 V6.1 中自定義功能中自定義功能中自定義功能中自定義功能程式庫程式庫程式庫程式庫使用入門使用入門使用入門使用入門

Customized Library in PCS7 V6.1 Getting-started

Getting-started Edition (2008年年年年----03月月月月)

A&D Service & Support

Page 2-38

摘摘摘摘 要要要要 本文以實現簡單的兩個浮點數相加求和的功能為實例,分功能塊編程、Block Icon及Faceplate製作三個部分,描述了 PCS7 V6.1下如何製作自定義功能程式庫的整個製程。 關鍵字關鍵字關鍵字關鍵字 SCL, Alarm_8p, Block Icon, Customized Object, Faceplate

Key Words SCL, Alarm_8p, Block Icon, Customized Object, Faceplate

A&D Service & Support

Page 3-38

目目目目 錄錄錄錄

2.2.1 分析控制功能需求 ......................................................................................................... 9 2.2.2 建製測試專案................................................................................................................. 9 2.2.3 編輯 SCL原始檔案 ........................................................................................................ 9

2.2.3.1 插入 SCL原始檔案 ................................................................................................. 9 2.2.3.2 設置 SCL編輯器並建製符號表 ............................................................................. 11 2.2.3.3 定義功能塊頭 ........................................................................................................ 12 2.2.3.4 定義輸入/輸出等管腳 ............................................................................................ 12 2.2.3.5 獲取當前調用功能塊的 OB號 ............................................................................... 16 2.2.3.6 根據調用 OB進行相應處理動作 ........................................................................... 16 2.2.3.7 報警處理 ............................................................................................................... 18

2.2.4 編譯 SCL原始檔案 ...................................................................................................... 19 2.2.5 定義功能塊報警資訊.................................................................................................... 19 2.2.6 調用功能塊並編譯 CFC ............................................................................................... 20 2.2.7 測試程式 ...................................................................................................................... 21 2.3.1 另存@@PCS7Typicals.pdl ......................................................................................... 21 2.3.2 生成 Block Icon............................................................................................................ 22

2.3.2.1 拷貝生成 Block Icon.............................................................................................. 22 2.3.2.2 編輯 Block Icon..................................................................................................... 22 2.3.2.3 添加 Block Icon屬性............................................................................................. 24 2.3.2.4 修改 Block Icon屬性............................................................................................. 26

2.4.1 打開並建製 Faceplate範本 ......................................................................................... 27 2.4.2 修改 Faceplate範本 .................................................................................................... 29

A&D Service & Support

Page 4-38

1.PCS7功能程式庫簡介

SIMATIC PCS7即 SIMATIC Process Control System,它是西門子公司為滿足市場需求,基於全整合自動化 TIA概念,為製程自動化應用于單一的平臺而提供的統一 DCS解決方案。 基於模組化、靈活性和開放性的設計理念,針對程序控制中一些標準的控制要求,PCS7系統預製整合了 PCS7 Library功能程式庫。此功能程式庫包括標準的範本驅動功能塊集(類比量、數位量輸入/輸出通道)、標準程序控制功能塊集(PID控制、馬達控制、閥門控制、類比量數位量監控等)、手操控制輸出功能塊集、報警功能塊集等。使用系統提供的標準功能塊,用戶可以快速地、方便地、輕鬆地、從下到上一體化地規劃專案中的具體控制流程。使用 CFC編程工具並結合 PCS7 Library功能程式庫,工程師一次性的編程即可完成如下工作:

I. AS控制器中運行的程序控制回路控制演算法;

II. 針對控制回路在上位機中相關畫面下對應的監視回路圖示;

III. 控制回路在上位機中對應的操作及參數設置子畫面;

IV. 控制回路對應的相關報警訊息、趨勢歸檔及用戶操作記錄等。 因此,使用 PCS7提供的編程工具及功能程式庫,用戶可以非常方便地規劃整個專案中對應的各種不同控制演算法及畫面。同時,基於開放性的開發理念,PCS7系統為用戶還提供了相應的功能程式庫開發工具,用於用戶自行開發適合用戶或用戶當前行業需求的功能程式庫。此功能方便了用戶在基於 PCS7所提供的功能程式庫的基礎上對整個系統的功能進行延伸擴充。使用系統提供的功能程式庫開發工具開發出來的功能程式庫與 PCS7自身所提供的功能程式庫擁有相同的功能。 此外,為了滿足某些特殊行業程序控制演算法的需求,基於 PCS7系統,西門子公司開發了相應的一些行業程式庫可以供客戶選訂,在 PCS7的 Add-on訂貨選型手冊中可以查閱到相關訂貨號,如下列舉了一些相關行業程式庫供參考。

♦ PCS7 HVAC —— 加熱、通風及空調控制功能程式庫(A&D AS) ♦ PTE 400 —— 技術程式庫(I&S IS KHE) ♦ Standard Chemistry —— 技術程式庫(A&D SC MHM) ♦ PCS 7 PS —— 發電行業程式庫(PG L6) ♦ 其他各種不同的驅動程式庫 —— (I&S ITPS KHE等) 在本文檔中,我們將主要講解 AS控制程式庫的建製、修改及上位機監控圖示和麵板的製作等。

Deleted: 組態Deleted: 組態

A&D Service & Support

Page 5-38

2.自定義功能程式庫 當用戶使用 PCS7系統定義一個功能塊,例如一個功能塊類型 Block Type,首先,在AS控制器側,它是一個功能塊(Function Block);然而在 OS側,它卻是此功能塊對應的功能塊圖示 Block Icon和一套操作面板 Faceplate。 其他的功能塊類型,比如功能(Function)在此將不予討論,因為功能不具有背景資料塊 Instance Data Block,而背景資料塊又是 OS和 AS之間進行非同步處理時,OCM(Operator Control & Monitor)屬性必要的前提條件。 � AS側 使用系統提供的相應工具,用戶定義了一個功能塊類型 Block Type,它必須包含如下部分:

� 輸入/輸出介面; � 通過介面與外部系統建立的連接完成控制任務的程式或演算法; � 通用屬性,例如塊名等; � 作為一個 AS功能塊 FB,還需包括:

♦ 輸入/輸出介面和功能塊的系統屬性; 類型相關屬性,這些屬性將應用於所有與此功能塊相關的實例中,不可修改; 實例相關屬性,這些屬性將作為新生成實例的預設值被應用,並可以根據用戶需求針對單個實例進行定制;

♦ 報警相關的文本範本 類型相關訊息,應用於所有實例,不可修改; 實例相關訊息,作為新生成的實例的範本被應用,可以根據用戶需求針對單個實例進行定制。 如果用戶在規劃製程中,調用或嵌套使用了一個 Block Type,則對應此 Block Type,系統會自動建製一個功能塊實例。此功能塊實例包含了使用此功能塊的所有資料,但不會包含代碼 Code部分。當前功能塊實例被固定分配給 Block Type,所有與此 Block Type相關的功能塊實例擁有相同的介面。每次調用功能塊實例時,系統會使用該背景資料塊來調用對應的 Block Type。 在 AS編程製程中,生成某 Block Type對應的功能塊實例的典型方法是:

� 在 CFC Chart中,嵌套調用此 Block Type。 Deleted: 組態

A&D Service & Support

Page 6-38

在 CFC中,PCS7用戶應當使用預製功能塊,只有功能塊/功能程式庫建製者才可以在一個 Block中調用多個其他 Blocks(多實例方式)。 對應每個 AS功能塊實例,用戶可以單獨規劃的內容有: � 實例名; � 實例相關的系統屬性; � 實例相關的訊息文本等;

� OS側 在 PCS7 OS側圖形規劃中,用戶生成面板實例 Faceplate Instance的典型方法有: � 在製程流程圖形中嵌套面板類型 Faceplate Type; � 在其他 Faceplate Type中嵌套面板類型; 對每個面板實例,用戶能可以單獨規劃的內容有: � 與 AS功能塊的連接,也可以通過動態的方式建立; � 組顯示 Group Display中包含的內容; 一個典型的 PCS7功能塊需要包含如下部分: � 功能及操作模式:功能的基本描述、輸入/輸出的詳細資訊、操作模式及執行的時間順序等; � 調用 OB: 嵌套 OB塊的申明。當在 CFC中調用此功能塊時,此功能塊除了將會在迴圈 OB(OB30-38)中被調用外,在任務列表中定義的

OB也會調用此功能塊(例如,用於熱啟動初始化的 OB100等)。CFC編輯器將會在編譯製程中,自動建製這些必須的 OB塊; � 容錯處理: 功能塊的布林輸出埠 ENO將會指示該功能塊的執行情況。在 FB的情況下,背景資料塊的輸出端 QERR(ENO取反)同樣也會被存儲。用戶可以利用此埠來評估功能塊的運行情況,例如,在錯誤情況下產生相應的報警訊息或採用替換值等處理機制來加強程式的容錯性能; � 啟動特性: 分兩中情況,如下

初始化啟動-Initial Startup 功能塊在相應嵌套的 OB中第一次被調用,一般情況下這些 OB是一些製程相關的 OB(例如,迴圈中斷 OB)。此時,功能塊採用系統默認的變數或預製的一些參數;

Deleted: 組態Deleted: 組態Deleted: 組態

A&D Service & Support

Page 7-38

啟動-Startup 功能塊在 CPU啟動時,第一次被調用。在此情況下,需要確保功能塊被啟動 OB調用(PCS7中,默認為 OB100)。此時,需要在“啟動特性”中對預製的處理進行描述; � 時間回應: 帶有時間回應的功能塊必須在迴圈 OB中調用。這樣,功能塊可以通過它的採樣時間(前後兩次連續的執行之間的中斷時間)來計算它的時間常量或參數; 當編譯 CFC並啟動 Update Sampling Time選項後,系統會自動採集當前迴圈 OB的執行時間並置於 SAMPLE_T埠。(一般情況下,在

CFC中此埠被設為不可見 Invisible)。 � 信號傳輸特性: 帶有信號傳輸特性的功能塊可以將製程值結合報警傳輸到 OS進行顯示;

圖 2.1:PCS7 功能塊概念 在本文中,將以實現一個簡單的兩數相加求和的功能,來演示 PCS7下如何自定義功能程式庫的整個製程(AS演算法及上位顯示畫面等)。

A&D Service & Support

Page 8-38

2.1 幫助資訊的獲取 安裝完成 PCS7後,系統提供了相應的 PDF文檔。通過如下操作可以查看 PCS7下的相關文檔:

圖 2.2 獲取幫助文檔 關於功能程式庫的開發,請參考 PCS7-Programming Instructions for Blocks。

圖 2.3 功能程式庫參考文檔 任何情況下,如果需要獲得相關操作的幫助資訊,請使用 F1鍵或者連接西門子技術支援網站:http://www.ad.siemens.com.cn/Service/獲得更多詳細資訊。

2.2 AS功能塊開發

PCS7下通常使用 SCL語言來進行功能塊的開發,請參考如下文檔:

圖 2.4 SCL參考文檔

A&D Service & Support

Page 9-38

2.2.1 分析控制功能需求 在本例中,需要實現兩個浮點數相加求和的功能,並設置一定的報警限位,當求和值大於某個設定值後,OS系統觸發相應的報警資訊。 由功能分析來確定輸入/輸出管腳及相關屬性:

� 輸入管腳——IN1(加數 1),IN2(加數 2),HLIMIT(報警上限),HYS(報警閾值);

� 輸出管腳——OUT1(求和),QH_ALM(報警上限);

2.2.2 建製測試專案 打開 PCS7,建製專案並加入 SIMATIC Station和 PC Station,並進行相應的硬體規劃,最終專案結構如下所示:

圖 2.5 基本專案框架

2.2.3 編輯 SCL原始檔案

2.2.3.1 插入 SCL原始檔案 右鍵點擊 Sources檔加,插入 SCL Source檔,或使用 External Source...導入磁片上已有的原始檔案(可通過該操作將附錄提供的 SCL Template範本檔加入到專案中),同時還可以使用”Export Source…”功能表將原始檔案導出到磁片上,具體操作如下:

Deleted: 組態

A&D Service & Support

Page 10-38

圖 2.6 插入新的原始檔案

圖 2.7 導入已有原始檔案

A&D Service & Support

Page 11-38

圖 2.8 導出原始檔案

2.2.3.2 設置 SCL編輯器並建製符號表 雙擊打開 SCL原始檔案,點擊 Options � Customize…進行 SCL編輯器設置,啟動Create Debug Info選項,具體操作如下:

圖 2.9 Options菜單

圖 2.10 啟動 Create Debug info選項 注:啟動該選項,主要用於 SCL編輯器下程式的試俥,會佔用額外的存儲空間;功能塊開發完成通過測試後,最好將其關閉,並重新生成功能塊。

A&D Service & Support

Page 12-38

通過功能表 Options� Symbol table為將要建製的功能塊分配符號名,如下所示:

圖 2.11 加入符號名 注:PCS7下建製的功能塊均為 FB塊,且為了避免和系統提供的 FB塊號衝突,通常定義 500以後的塊號,一般不定義 FC塊(無背景 DB);

2.2.3.3 定義功能塊頭 定義功能塊頭如下所示,其中 FUNCTION_BLOCK、TITLE和 NAME需要和上述符號名相同。關於功能塊頭各項參數定義的具體意義,請參考上述圖 2.3所示文檔中相關內容;

//******************************************************************************************** FUNCTION_BLOCK "ADD_FB" TITLE = 'ADD_FB' { // List of system attributes S7_tasklist:= 'OB100'; // Block is called if there is in a warm restart S7_m_c:= 'true'; // Block can be controlled and monitored S7_alarm_ui:= '1' // Setting “1” for PCS 7 message dialog ('0' for standard message dialog) } AUTHOR: ABC NAME: ADD_FB VERSION: '0.01' FAMILY: XYZ KNOW_HOW_PROTECT //********************************************************************************************

2.2.3.4 定義輸入/輸出等管腳 根據上述功能分析中所需的管腳,定義輸入輸出等管腳,具體定義如下:

� 輸入管腳

VAR_INPUT EV_ID { S7_visible:='false'; S7_link:='false'; S7_param :='false'; // Parameter cannot be set in CFC S7_server:='alarm_archiv'; // Message no. assigned by server S7_a_type:='alarm_8p' // Block signals with ALARM_8P

A&D Service & Support

Page 13-38

}:DWORD := 0; // Message ID RUNUPCYC{ S7_visible:='false'; S7_link:='false' } :INT := 3; // Number of run up cycles MSG_LOCK { S7_visible:='false'; S7_dynamic:='true'; S7_m_c:='true' } : BOOL := 0; // Enable 1=Messages locked IN1 { //加數加數加數加數 1

S7_shortcut:='addend1'; S7_unit:=''; S7_m_c:='true'; S7_dynamic:='true'; S7_archive:='shortterm' } :REAL :=0.0; //input value 1 IN2 { //加數加數加數加數 2

S7_shortcut:='addend2'; S7_unit:=''; S7_m_c:='true'; S7_dynamic:='true'; S7_archive:='shortterm' } :REAL :=0.0; //input value 2 HLIMIT { //限幅值限幅值限幅值限幅值

S7_shortcut:='limit value'; S7_unit:=''; S7_m_c:='true'; S7_dynamic:='true'; S7_archive:='shortterm' } :REAL :=100.0; //limit value for output HYS { //報警閾值報警閾值報警閾值報警閾值

S7_shortcut:='HYS'; S7_unit:=''; S7_m_c:='true' } :REAL :=1.0; //Hysteresis settings END_VAR 注:

♦ EV_ID主要用於報警觸發,所有需要定義報警的功能塊,必須定義該類型管腳,注意它的 S7_server和 S7_a_type屬性;

♦ RUNUPCYC管腳用於功能塊啟動時前幾個週期內的報警抑制,防止 CPU啟動時通訊負荷過大;

♦ MSG_LOCK用於報警鎖定;

A&D Service & Support

Page 14-38

♦ 管腳相關屬性在 SCL的編程中非常重要,把握了這些屬性並能靈活的引用是整個PCS7下自定義編程的關鍵,其具體意義請參考系統的線上幫助資訊;

� 輸出管腳

VAR_OUTPUT OUT1 { //求和值求和值求和值求和值

S7_shortcut:='sum'; S7_unit:=''; S7_m_c:='true'; S7_dynamic:='true'; S7_archive:='shortterm' } :REAL :=0.0; //output value 1 QH_ALM { //報警輸出報警輸出報警輸出報警輸出

S7_dynamic:='true'} : BOOL := 0; // 1=H-Alarm active QMSG_ERR { S7_visible:='false'; S7_dynamic:='true'} : BOOL := 0; // ALARM_8P: Error output QMSG_SUP { S7_visible:='false'; S7_dynamic:='true'; S7_m_c:='true'} : BOOL := 0; // 1=Message Suppression Active MSG_STAT { S7_visible:='false'; S7_dynamic:='true'} : WORD := 0; // Message: STATUS output MSG_ACK { S7_visible:='false'; S7_dynamic:='true'} : WORD := 0; // Message: ACK_STATE output

END_VAR 注:

♦ QMSG_ERR用於輸出報警錯誤;

♦ QMSG_SUP用於指示指示指示指示報警抑制;

♦ MSG_STAT用於指示報警狀態;

♦ MSG_ACK用於指示報警確認狀態;

� 靜態變數

VAR sbRESTART :BOOL := TRUE; // Initial start memory bit

A&D Service & Support

Page 15-38

siRUNUPCNT :INT := 0; // Counter for RUNUPCYC execution sb_SIG_1: BOOL := FALSE; //Merker ALARM_8P Signal 1 sb_SIG_2: BOOL := FALSE; //Merker ALARM_8P Signal 2 sb_SIG_3: BOOL := FALSE; //Merker ALARM_8P Signal 3 sb_SIG_4: BOOL := FALSE; //Merker ALARM_8P Signal 4 sb_SIG_5: BOOL := FALSE; //Merker ALARM_8P Signal 5 sb_SIG_6: BOOL := FALSE; //Merker ALARM_8P Signal 6 sb_SIG_7: BOOL := FALSE; //Merker ALARM_8P Signal 7 sb_SIG_8: BOOL := FALSE; //Merker ALARM_8P Signal 8 //************************************************************************************** // Declaration Section Multiple Instances(SFB/FB), remember to copy the FB/FC blocks into your projects manually! //************************************************************************************** ALARM_8P_1: ALARM_8P; // Generation of max. 8 messages with max. 10 auxiliary values

END_VAR 注:

♦ 靜態變數能保持上次運算的值,常用於保存資料;

♦ 如果需要在程式中調用其他的 FB塊,則需要為這些調用的 FB聲明靜態變數;

♦ 實現報警功能,需要定義 ALARM_8p的靜態變數;

� 臨時變數

VAR_TEMP pbALARM: BOOL; // Call up ALARM_8P pbM_SUP: BOOL; // Message suppression pb_SIG_1,pb_SIG_2,pb_SIG_3,pb_SIG_4,pb_SIG_5,pb_SIG_6,pb_SIG_7,pb_SIG_8:BOOL; // temp variable for alarm function // Start info: Structure with info for the OB that has just called the block TOP_SI: STRUCT EV_CLASS :BYTE; EV_NUM :BYTE; PRIORITY :BYTE; NUM :BYTE; TYP2_3 :BYTE; TYP1 :BYTE; ZI1 :WORD; ZI2_3 :DWORD; END_STRUCT; // Start info: Structure with info for the last called startup OB START_UP_SI: STRUCT EV_CLASS :BYTE; EV_NUM :BYTE;

A&D Service & Support

Page 16-38

PRIORITY :BYTE; NUM :BYTE; TYP2_3 :BYTE; TYP1 :BYTE; ZI1 :WORD; ZI2_3 :DWORD; END_STRUCT; DUMMY :INT; // Auxiliary variable END_VAR

2.2.3.5 獲取當前調用功能塊的 OB號

//************************************************************************************* // Dependence on Calling OB //************************************************************************************* // Read out start info with SFC6 (RD_SINFO) DUMMY := RD_SINFO (TOP_SI := TOP_SI, START_UP_SI := START_UP_SI); pbM_SUP := MSG_LOCK; IF sbRESTART THEN // Initial start TOP_SI.NUM := 100; // Execute initial start as warm restart sbRESTART := FALSE; // Reset initial start END_IF; 使用 RD_SINFO獲取當前調用該功能塊的 OB,通過評估 TOP_SI.NUM即可判斷該OB的 OB號,並在下續程式中做相應處理,例如 OB100中的初始化處理。注意需要將需要定義處理動作的 OB加入功能塊頭的 S7_tasklist屬性中(見上述功能塊頭的定義)。 注:當 CPU在運行狀態下,下載該功能塊,該功能塊第一次在控制器中運行,則此時系統並不會運行 OB100,因此,初時化動作需要通過判斷功能塊中的靜態變數

sbRESTART為 true來進行相應處理;

2.2.3.6 根據調用 OB進行相應處理動作

// In which OB was the block called ? CASE WORD_TO_INT(BYTE_TO_WORD(TOP_SI.NUM)) OF //************************************************************************************ // Startup //************************************************************************************ // OB100: Warm restart 100: QH_ALM := 0; OUT1:=0;

A&D Service & Support

Page 17-38

//default reset commands QMSG_ERR := 0; QMSG_SUP := 0; MSG_STAT := 0; MSG_ACK :=0; pb_SIG_1:= 0; pb_SIG_2:= 0; pb_SIG_3:= 0; pb_SIG_4:= 0; pb_SIG_5:= 0; pb_SIG_6:= 0; pb_SIG_7:= 0; pb_SIG_8:= 0; siRUNUPCNT := RUNUPCYC; // Save RUNUPCYC value ELSE //********************************************************************************** // Technological Section //********************************************************************************** OUT1:=IN1+IN2; IF OUT1>HLIMIT THEN QH_ALM:=true; ELSIF OUT1<HLIMIT-HYS THEN QH_ALM:=false; END_IF; //********************************************************************************** // Message suppression during the startup //********************************************************************************** IF siRUNUPCNT = 0 // RUNUPCYC cycle already elapsed ? THEN IF MSG_LOCK THEN pb_SIG_1:= 0; // Report possible outgoing ELSE pb_SIG_1:= QH_ALM; // Alarm high END_IF; pbALARM:=sb_SIG_1<>pb_SIG_1; ELSE siRUNUPCNT := siRUNUPCNT - 1; pbALARM :=FALSE; // Initialization no ALARM pbM_SUP := TRUE; END_IF; END_CASE; 使用 CASE語句來評估 TOP_SI.NUM號,並進行相應處理動作:

� 當 OB100調用該功能塊時,即進行相應的初始化動作;

� 當其他 OB調用該功能塊時,即進行相應的的控制任務;

A&D Service & Support

Page 18-38

� 判斷 siRUNUPCNT是否為 0,來進行啟動前幾個週期內的報警抑制功能;

2.2.3.7 報警處理

//************************************************************************************** // Messages with ALARM_8P //************************************************************************************** // STRING variables must not be linked to ALARM8_P as auxiliary values // so transfer in array of bytes IF pbALARM THEN ALARM_8P_1 (EN_R := TRUE, // Update output ACK_STATE ID := 16#EEEE, // Data channel for messages (always 16#EEEE) EV_ID:= EV_ID, // Message number > 0 SIG_1:= pb_SIG_1, // Signal 1 to be monitored SIG_2:= 0,//pb_SIG_2, // Signal 2 to be monitored SIG_3:= 0,//pb_SIG_3, // Signal 3 to be monitored SIG_4:= 0,//pb_SIG_4, // Signal 4 to be monitored SIG_5:= 0,//pb_SIG_5, // Signal 5 to be monitored SIG_6:= 0,//pb_SIG_6, // Signal 6 to be monitored SIG_7:= 0,//pb_SIG_7, // Signal 7 to be monitored SIG_8:= 0,//pb_SIG_8, // Signal 8 to be monitored SD_1 := AUX_PR01, // Auxiliary value 1 SD_2 := AUX_PR02, // Auxiliary value 2 SD_3 := AUX_PR03, // Auxiliary value 3 SD_4 := AUX_PR04, // Auxiliary value 4 SD_5 := AUX_PR05, // Auxiliary value 5 SD_6 := AUX_PR06, // Auxiliary value 6 SD_7 := AUX_PR07, // Auxiliary value 7 SD_8 := AUX_PR08, // Auxiliary value 8 SD_9 := AUX_PR09, // Auxiliary value 9 SD_10:= AUX_PR10); // Auxiliary value 10 QMSG_ERR := ALARM_8P_1.ERROR; // ERROR status parameter MSG_STAT := ALARM_8P_1.STATUS; // STATUS status parameter MSG_ACK := ALARM_8P_1.ACK_STATE; // Current OS confirmation status END_IF; IF (NOT QMSG_ERR) THEN // Note historical signals. sb_SIG_1:= pb_SIG_1; END_IF; IF (MSG_STAT = 21) THEN // Block locked pbM_SUP := TRUE; END_IF; QMSG_SUP := pbM_SUP; 通過調用定義的 Alarm_8P靜態變數來觸發報警功能。

� 首先判斷觸發報警的信號是否發生變化(pbALARM是否為 true)來選擇性的調用Alarm_8p功能塊,優化 CPU的運算和通訊負荷;

� 將定義的輸入管腳 EV_ID管腳付給 alarm_8p的 EV_ID管腳;

A&D Service & Support

Page 19-38

� 將觸發報警的變數賦給 SIG_1、SIG_2、……;

� 將當前 pb_SIG_1賦值給 sb_SIG_1保存當前的報警狀態; 注:PCS7下通常使用 alarm_8p功能塊來觸發報警,一個 Alarm_8p功能塊能同時實現最多 8個變數的報警,如果功能塊中需要觸發報警的變數超過 8個,則需要定義多個類似於 EV_ID的輸入管腳(注意 S7_server和 S7_a_type屬性)及多個 Alarm_8p的靜態變數,並在程式中多次調用這些 alarm_8p的靜態變數,不同的 alarm_8p使用不同的 EV_ID輸入變數;

2.2.4 編譯 SCL原始檔案 保存 SCL原始檔案,並點擊編譯按鈕編譯 SCL原始檔案,如果無錯誤資訊,則 SCL將在 Blocks檔夾中生成該功能塊;

圖 2.12 編譯 SCL原始檔案

2.2.5 定義功能塊報警資訊

Blocks檔夾中找到生成的功能塊,點擊右鍵,Special object Properties � Message…為該功能塊定義報警資訊,具體操作如下所示。

圖 2.13 定義報警資訊 按照下圖定義功能塊的報警資訊:

A&D Service & Support

Page 20-38

圖 2.14 報警訊息規劃 注:定義報警訊息時可以使用通配符,$$BlockComment$$代表功能塊的注釋資訊,$$AKZ$$代表功能塊的源,$$AREA$$代表功能塊所處的 Area區域。關於報警訊息的規劃方式詳情請參考”STEP7-Programming with Step7”手冊中的第 16章節

“Configuring Messages”的內容。

2.2.6 調用功能塊並編譯 CFC

Plant view下在某個 Hierarchy中插入 CFC,打開 CFC並從左側 Block下拖拽生成的功能塊到 CFC下進行調用,如下圖所示,並編譯 CFC;

圖 2.15 調用功能塊

Deleted: 組態Deleted: 組態

A&D Service & Support

Page 21-38

2.2.7 測試程式 將程式下載到 CPU中,並測試其功能通過。到此為止功能塊的演算法部分即完成,可以進行 OS部分的開發了。

2.3 Block Icon開發

2.3.1 另存@@PCS7Typicals.pdl 打開 OS專案,並使用圖形編輯器打開@@PCS7Typicals.pdl文件,將其另存為@PCS7Typicals.pdl,如下圖所示:

圖 2.16 打開@@PCS7Typicals.pdl

圖 2.17 另存為@PCS7Typicals.pdl 注: 另存的檔案名可以以@PCS7typicals開始後面可以添加自定義的字元,例如,可以另存為@PCS7typicals _XYZ.pdl。

A&D Service & Support

Page 22-38

2.3.2 生成 Block Icon

2.3.2.1 拷貝生成 Block Icon 將圖形下除 DIG_MON以外其他物件刪除,基於 DIG_MON拷貝一個新的 Block Icon。

圖 2.18 基於 DIG_MON生成新的 Block Icon

2.3.2.2 編輯 Block Icon 點擊拷貝的 Block Icon,右鍵 � Customized Object � Edit …,刪除不必要的圓,加入 I/O field,並定義 I/O域的相應屬性,如下所示:

圖 2.19 編輯自定義物件

A&D Service & Support

Page 23-38

圖 2.20 修改 I/O field對象名為 OUT

圖 2.21 修改 I/O field的類型為 Output 注:

Block Icon中有很多屬性為 PCS7中必須的屬性,因此刪除不必要的物件時,一定需要注意,建議除圓型物件外,不要刪除其他的物件,特別是那些隱藏在 Tagname物件後面的物件。 全選 Block Icon的所有物件,右鍵 � Customized Object � Finish Editing 完成 Block

Icon的編輯,如下圖所示:

A&D Service & Support

Page 24-38

圖 2.22 完成 Block Icon的編輯

2.3.2.3 添加 Block Icon屬性 右鍵點擊 Block Icon � Configuration Dialog…,打開屬性添加對話方塊,將 I/O field的 Outputvalue屬性加入到 Block Icon中,並重新命名為 OUT1,詳細規劃如下所示:

圖 2.23 打開屬性規劃對話方塊 點擊左側的 Links接點,雙擊右側 Output value屬性,將其添加到左側的 Links下;

Deleted: 組態

Deleted: 組態

A&D Service & Support

Page 25-38

圖 2.24 添加屬性到左側對話方塊 將屬性重命名為 OUT1;

圖 2.25 打開屬性對話方塊

A&D Service & Support

Page 26-38

圖 2.26 修改屬性名為 OUT1

2.3.2.4 修改 Block Icon屬性 右鍵點擊 Block Icon,打開屬性對話方塊,修改 General和 Links下的相關屬性,並保存該圖形,具體操作如下圖所示: 修改 General下的 type屬性為@ADD_FB/1,Servername屬性為 PCS7 ADD_FB

Control;

圖 2.27 設置 Block Icon的屬性 注:type和 Servername屬性非常重要,用於 Block Icon的識別和標識打開的面板名;

A&D Service & Support

Page 27-38

修改 Links下的 OUT1屬性 Dynamic為.OUT1,更新週期為 2s;

圖 2.28 設置 Block Icon的連接變數

2.4 Faceplate開發

2.4.1 打開並建製 Faceplate範本 雙擊WinCC下的 Faceplate Designer打開面板設計器,如下圖所示:

圖 2.29 打開面板設計器

A&D Service & Support

Page 28-38

Type中輸入功能塊名 ADD_FB,啟動 No Batch Variables選項,點擊 Generate按鈕;

圖 2.30 生成範本檔 系統將自動生成

� @PL_ADD_FB.pdl, � @PG_ADD_FB_pdl, � @PG_ADD_FB_OVERVIEW.pdl, � @PG_ADD_FB_VIEWLIST.pdl, � @PG_ADD_FB_STANDARD.pdl

圖 2.31 生成的範本檔 這些檔為 ADD_FB面板顯示的範本檔,可拷貝到其他專案中使用;

A&D Service & Support

Page 29-38

2.4.2 修改 Faceplate範本 打開上面生成的@PG_ADD_FB_STANDARD.pdl文件,打開@PCS7elements.pdl檔,將該檔下的用於製程值顯示和輸入的控制項拷貝到@PG_ADD_FB_STANDARD.pdl下。

圖 2.32 拷貝物件到@PG_ADD_FB_STANDARD.pdl中 注:

@PCS7elements.pdl檔為 PCS7系統提供的面板開發時的物件程式庫檔,所有用於操作的物件都必須拷貝自該檔,例如,按鈕、輸入框、選擇框等; 加入其他物件,編輯該圖形如下所示:

圖 2.33 編輯圖形物件

IN1对象对象对象对象

IN2对象对象对象对象

OUT1对象对象对象对象

Limit对象对象对象对象

HYS对象对象对象对象

A&D Service & Support

Page 30-38

修改各物件的屬性,如下所示,保存文檔:

� 修改 IN1的 Font屬性,Text為.IN1#shortcut,Unit為.IN1#unit,更新時間 1h;

圖 2.34 修改 IN1物件的 Font屬性

� 刪除 IN1的 UserDefined2下的屬性,修改 IN1的 UserDefined3屬性,OutputValue為.IN1,VisibleValue為.IN1,更新週期 2s;

圖 2.35 修改 IN1物件的 UserDefined3屬性

A&D Service & Support

Page 31-38

� 修改 IN2的 Font屬性,Text為.IN2#shortcut,Unit為.IN2#unit,更新時間 1h;

圖 2.36 修改 IN2物件的 Font屬性

� 刪除 IN2的 UserDefined2下的屬性,修改 IN2的 UserDefined3屬性,OutputValue為.IN2,VisibleValue為.IN2,更新週期 2s;

圖 2.37 修改 IN2物件的 UserDefined3屬性

A&D Service & Support

Page 32-38

� 修改 OUT1的 Font屬性,Text為.OUT1#shortcut,Unit為.OUT1#unit,更新時間 1h;

圖 2.38 修改 OUT1物件的 Font屬性

� 刪除 OUT1的 UserDefined2下的屬性,修改 OUT1的 UserDefined3屬性,VisibleValue為.OUT1,更新週期 2s;

圖 2.39 修改 OUT1物件的 UserDefined3屬性

A&D Service & Support

Page 33-38

� 修改 limit的 Font屬性,Text為.HLIMIT#shortcut,Unit為.HLIMIT#unit,更新時間 1h;

圖 2.40修改 limit物件的 Font屬性

� 刪除 limit的 UserDefined2下的屬性,修改 limit的 UserDefined3屬性,OutputValue為.HLIMIT,VisibleValue為.HLIMIT,更新週期 2s;

圖 2.41 修改 limit物件的 UserDefined3屬性

A&D Service & Support

Page 34-38

� 修改 HYS的 Font屬性,Text為.HYS#shortcut,Unit為.HYS#unit,更新時間1h;

圖 2.42修改 HYS物件的 Font屬性

� 刪除 HYS的 UserDefined2下的屬性,修改 HYS的 UserDefined3屬性,OutputValue為.HYS,VisibleValue為.HYS,更新週期 2s;

圖 2.43 修改 HYS物件的 UserDefined3屬性

A&D Service & Support

Page 35-38

2.5 編譯 OS專案 編譯 OS專案,選擇 Create/Update Block Icon 選項,如下所示;

圖 2.44 編譯 OS專案

2.45 Compile OS選項

A&D Service & Support

Page 36-38

2.6 運行試俥專案 下載 AS程式到控制器中,啟動 OS專案運行試俥面板,運行情況如下所示;

圖 2.46 打開 Group Display 面板 點擊右側的 Loop Display按鈕,顯示 Loop Display面板

圖 2.47 打開 loop display面板

A&D Service & Support

Page 37-38

2.7 功能程式庫的發佈 功能塊經過上述操作後測試通過,即可在實際專案中使用了。只需要將相應功能塊拷貝到實際專案的 Blocks檔夾下或拷貝到專案的程式庫中,上述建製的面板圖形檔,需要將其拷貝到專案下的 OS專案下的 GraCS目錄下。更多關於專案發佈的內容請參考圖 2.3中文檔第四章中的內容。

3. 總結

PCS7提供了一個開放的平臺用於自定義功能程式庫的開發,本文僅僅演示了一個簡單功能程式庫的開發過程,而且僅僅介紹了功能塊的編程,block icon和 faceplate的簡單製作製程。現總結一下其中的幾個關鍵點:

� 功能塊頭的定義,注意 S7_tasklist和 S7_alarm_ui兩個屬性。前者設置該功能塊在 CFC調用中,將自動加入哪些 OB塊中,例如,本文例中的自動加入 OB100用於初始化動作;後者用於設置規劃報警的視窗類型,見圖 2.14,嘗試將其修改為 0後,測試一下報警規劃窗口有何不同;

� 管腳的屬性定義,例如,S7_m_c表述自動上傳變數到 OS,S7_shortcut和S7_unit專門為模擬量設置,用於上位顯示該變數的名稱和單位,S7_string_0/1用於顯示該變數為 0或 1時的字串。鑒於篇幅的原因該處不一一列舉,希望用戶能詳細參考系統的幫助資訊,把握好屬性是 PCS7下自定義功能塊的關鍵;

� 報警功能的實現,需要定義一個埠(名字隨意),其屬性必須包含 S7_server和S7_a_type,及定義一個 alarm_8p的靜態變數。程式中調用該靜態變數時,將上述聲明的埠分配給 EV_ID埠;

� 此外,順便提醒一下用戶,PCS7中需要做定時功能時,一般不使用系統提供的計時器 Tn,而是通過自己編寫計數器的方式來實現定時功能,則此時需要借助名為S7_sampletime的屬性,有興趣的用戶可以自己實驗一下; 文中沒有涉及太多 Block Icon細節的東西,Faceplate中許可權傳遞、顯示格式、歸檔顯示的內容,也沒有介紹製作功能程式庫幫助檔及發佈程式的製程(類似於 exe安裝程式)。用戶如果有興趣,請參考圖 2.3中的文檔,其中全面描述了一個標準功能程式庫開發的整個製程,並附錄了幾個 PCS7程式庫下的功能塊源代碼。此外,還可以連接西門子中文網站或西門子熱線,獲取更多詳細資訊。此處列舉一些西門子中文網站中能獲取的相關

FAQ,供大家參考:

http://support.automation.siemens.com/cn/view/zh/22109936 http://support.automation.siemens.com/CN/view/zh/22123899 http://support.automation.siemens.com/CN/view/zh/22779943 隨本文檔附錄文中實例的開發源代碼、Block Icon及面板檔、PCS7下 SCL開發的一個典型範本檔供大家參考學習。

Deleted: 組態Deleted: 組態

A&D Service & Support

Page 38-38

附錄附錄附錄附錄----推薦網址推薦網址推薦網址推薦網址 本文原始出處來至西門子中國本文原始出處來至西門子中國本文原始出處來至西門子中國本文原始出處來至西門子中國 , , , , 此為西門子台灣為方便繁體使用者而轉換的版本若有詞義解釋不同時此為西門子台灣為方便繁體使用者而轉換的版本若有詞義解釋不同時此為西門子台灣為方便繁體使用者而轉換的版本若有詞義解釋不同時此為西門子台灣為方便繁體使用者而轉換的版本若有詞義解釋不同時,,,,以原始以原始以原始以原始文章為主若有任何詞句轉換的建議也歡迎提供你寶貴的意見文章為主若有任何詞句轉換的建議也歡迎提供你寶貴的意見文章為主若有任何詞句轉換的建議也歡迎提供你寶貴的意見文章為主若有任何詞句轉換的建議也歡迎提供你寶貴的意見,,,,謝謝謝謝謝謝謝謝 西門子(台灣)股份有限公司 網站首頁: http://www.siemens.com.tw/industry/ PCS7更新訊息: http://www.siemens.com.tw/industry/industry-product/customer-service/ PCS7 西門子(中國)有限公司 自動化與驅動集團 客戶服務與支援中心 網站首頁:http://www.ad.siemens.com.cn/Service/ 專家推薦精品文檔:http://www.ad.siemens.com.cn/Service/recommend.asp

PCS7常問問題:http://support.automation.siemens.com/CN/view/zh/10806846/133000

PCS7更新資訊:http://support.automation.siemens.com/CN/view/zh/10806846/133400