西門子SM1223卡件223-1BH32-OXBO
圖1 SFC chart狀態(tài)結構圖
· 狀態(tài):需要通過事件觸發(fā)才會退出該狀態(tài),包括:Ready、Run、Completed、Aborted、stopped、Held、Held(error)
· 非狀態(tài):不需要事件觸發(fā),順控程序執(zhí)行完之后會自動退出該狀態(tài),包括:Starting、Completing、error(Completing)、Holding、Error、Resuming、Resuming(Error)、Aborting、Stopping
注:
- Ready狀態(tài)也稱為Idle,Abort命令也稱為Cancel
· 圖中黑色粗線表示事件觸發(fā),即狀態(tài)改變需要事件觸發(fā),例如ReadyàRun需要Start命令。事件可以是命令、條件、外部、內部。SFC chart的命令窗口如下圖2所示:
圖2 SFC chart的命令窗口
SFC chart簡單的狀態(tài)變化如下:
1) SFC chart初始狀態(tài)為Idle,Start命令將SFC chart從“Idle"轉換到“Starting"狀態(tài)。
2) “Starting"狀態(tài)下的順控程序執(zhí)行完成后,SFC chart會自動"Run"狀態(tài)。
3) “Run"狀態(tài)的改變受SELFCOMP參數(shù)影響。SELFCOMP=1時,"Run"狀態(tài)的順控程序執(zhí)行完成后SFC chart會自動“Completing"狀態(tài);SELFCOMP=0時,需要Complete命令才能使SFC chart由“Run"狀態(tài)轉換到“Completing"狀態(tài)。
4) “Completing"狀態(tài)的順控程序執(zhí)行完成后,SFC chart會自動“Completed"狀態(tài),
5) SFC chart會在“Completed"狀態(tài),直到受到新的事件觸發(fā),例如“Reset"命令會使SFC chart回到“Idle"狀態(tài);Start命令會使SFC chart回到“Starting“狀態(tài)。
問題2. SFC chart 與順控程序有何差異?
順控程序中包含步和轉移,在步中編輯程序實現(xiàn)對工藝設備的控制;SFC chart允許用戶通過圖形化的組態(tài)和調試順控程序,單個SFC chart中可以創(chuàng)建8個順控程序。SFC chart 有16種狀態(tài),如圖1所示;而順控程序僅有五種狀態(tài),如下圖3所示。
SFC chart的命令窗口的控制命令改變的是SFC chart的狀態(tài),而不是順控程序的狀態(tài)。SFC chart的狀態(tài)改變會觸發(fā)順控程序狀態(tài)改變,通過在SFC chart不同的狀態(tài)來觸發(fā)不同的順控程序執(zhí)行。
圖3順控程序的狀態(tài)結構圖
SFC chart狀態(tài)和順控程序的狀態(tài)相互,同時又相互影響。如下圖4所示的SFC chart中包含三個順控程序RUN_KM,HOLD_KM,ABORT_KM。
圖4 SFC chart和順控程序的狀態(tài)結構
- 順控程序和SFC chart都有自己的狀態(tài)。SFC chart處于“Holding"狀態(tài),但是順控程序RUN_KM處于“Held“狀態(tài),而順控HOLD_KM處于"Running"狀態(tài)。
- 順控的狀態(tài)可以影響SFC chart的狀態(tài)。順控程序HOLD_KM未執(zhí)行完成之前,SFC chart會一直處于“Holding"狀態(tài),當HOLD_KM執(zhí)行完之后SFC chart會自動轉入“Held"狀態(tài)。
- 如果在順控程序的啟動條件中加入SFC chart的狀態(tài),SFC chart的狀態(tài)可以控制順控程序的運行。RUN_KM的啟動條件為SFC chart處于“Run"狀態(tài),HOLD_KM的啟動條件為SFC chart處于“Holding"狀態(tài)。hold命令使SFC chart從“Run"狀態(tài)轉入“Holding"狀態(tài),RUN_KM順控的暫停和HOLD_KM順控的執(zhí)行。
問題3. 順控程序的每一步是如何執(zhí)行的?
在順控程序的步中,都可以設置“Initialization“、"Processing“、"Termination“三種執(zhí)行程序,如下圖5所示。除START步和END步之外,步和轉移交替布置。圖5順控程序的步屬性
順控程序在處理“Processing“的程序中會判斷轉移條件是否(轉移邏輯和步的少執(zhí)行時間)。如下圖6所示:在未轉移條件T4時,順控程序會一直執(zhí)行S4步的“Processing“程序,如圖綠色部分Execution階段。T4后的下一個處理周期,開始執(zhí)行S5步。S4的"Termination“和S5的"Initialization“在同一個處理周期執(zhí)行,而且僅執(zhí)行一個處理周期,如圖紅色部分。
圖6順控程序步和轉移的執(zhí)行
問題4. 為什么順控程序的不能啟動?
順控程序只有在啟動條件后才能啟動。需要為每個順控程序定義啟動條件,如下圖7所示。選中順控程序后右擊在彈出的菜單中選擇“Sequence Properties",在順控程序屬性窗口的“Start condition"選項卡中設置啟動條件。下圖所示的順控程序在SFC chart的狀態(tài)為“Run"時才會啟動執(zhí)行。圖7順控程序的啟動條件
在順控程序的“General"選項卡中可以設置順控程序的優(yōu)先級,如下圖8所示。因為在幾個順控程序同時啟動條件時,優(yōu)先級高的會先執(zhí)行。如果有相同優(yōu)先級的幾個順控程序同時啟動條件,則左面的順控程序會執(zhí)行。
圖8順控程序的優(yōu)先級
除了順控程序的啟動條件,還需要判斷SFC chart的是否允許啟動:
· 要求SFC chart允許啟動,即ENSTART=1,和LI_ERR=0
· 要求比啟動優(yōu)先級高的,如 INTERROR 、 LOCKERROR 、 LOCKCOMPLETE 、 LOCKHOLD 、LOCKABORT 或 LOCKSTOP 沒有置1
· 在手動下沒有操作員錯誤,即OP_ERR=0
問題5. 順控程序中如何編輯鏈接CFC的結構變量?
在順控程序的步中編輯CFC 功能塊的結構變量時,會提示如下圖9的錯誤信息,顯示類型不匹配。圖9順控程序步中使用結構變量提示信息
轉移條件不支持結構變量,會提示如下圖10錯誤。
圖10轉移中使用結構變量錯誤信息
需要在結構變量上右擊,通過“Open Structure"命令來打開結構變量,然后選擇其中的value數(shù)值,如下圖11所示。注意:轉移條件不支持結構變量。
圖11如何在步中配置結構變量
問題6. 如何通序控制SFC chart切換到自動?
SFC chart能以外部視圖的顯示為功能塊,可以像CFC一樣通過IO互聯(lián)控制SFC chart的執(zhí)行。在工廠層級下選中SFC chart右擊,通過“Open External View"打開外部視圖;或者在SFC chart編輯界面通過菜單ViewàExternal View打開外部視圖。如下圖12所示:圖12如何調用SFC chart的外部視圖
SFC chart與控制相關的外部視圖IO如下圖13所示,表格顯示了手動和自動輸入/輸出IO的對應關系。從手動切換到自動要求ENAUT=1和AUT=1,且MAN=0。注意:AUT和MAN不能都=1,否則會提示LI_ERR錯誤,無法實現(xiàn)切換。
圖13手動和自動切換
問題7. 如何讓CPU啟動后SFC chart就運行?CPU重啟后SFC chart能否繼續(xù)執(zhí)行?
在SFC chart的屬性中可以設置啟動選項和CPU重啟后SFC chart的運行。如下圖14所示:圖14 SFC chart 屬性
· Autostart:CPU啟動后SFC chart是否自動啟動。不勾選時CPU啟動后SFC chart處于“Idle"狀態(tài),勾選后CPU啟動以后SFC chart自動“Starting"狀態(tài)。
西門子屏Smart Line
在過去的幾年中,S7- / 0
進行遠程擴展;這種適用于分布范圍很廣的。通過CPU中的–DP接口多可連接125個總線結點。中
央控制器和后一個結點的距離為
23 km
@
表4-12 S7- 0 CPU之間的PPI網(wǎng)絡通信。PPI通信前要保證PPI網(wǎng)絡上的所有站點都應當有各自不同的網(wǎng)絡地址,否則通信不會正常進行。另外,網(wǎng)絡讀寫指令進行編程和應用時要注意以下幾點:
1) 在程序中可以使用任意條網(wǎng)絡讀寫指令,但是在同一時刻,多只能有8條網(wǎng)絡讀寫指令被;
2) 每條網(wǎng)絡讀寫指令可以從遠程站點讀取/寫入多16個字節(jié)的信息;
3) 使用NETR/NETW指令向導可以編輯多24條網(wǎng)絡讀寫指令,其核心是使用順序控制指令,這樣在任一時刻只有一條NETR/NETW指令有效;
4) 每個CPU的端口只能配置一個網(wǎng)絡讀寫指令向導。
2 網(wǎng)絡讀寫指令向導組態(tài)
2.1 硬件連接
下面通過一個實例(兩臺S7- 5" style="font-family:Arial, sans-serif;font-size:10.5pt;vertical-align:middle;"> 6ES7 314 - 1AG13 - 0AB0 V2.6 3使用腳本實現(xiàn)更多定時器功能利用腳本自身的定時器, 可以通過在腳本中編程的實現(xiàn)更多其它定時功能。
3.1整 點歸檔
WinCC提供了變量歸檔,變量歸檔分為周期歸檔和非周期歸檔,不管是周期歸檔或非周期的歸檔,都又可以通過一些 變量或腳本返回值來控制歸檔, 比如:整點歸檔。下面的設置結合WinCC腳本,實現(xiàn)了在 整點開始歸檔,歸檔五分種后停止歸檔,即每個小時僅歸檔前五分鐘的數(shù)據(jù)。:Windows 7 Professional Service Pack1 , WinCC V7.0 SP3
歸檔名稱:ProcessValueArchive
歸檔變量:NewTag
歸檔周期:1 分鐘
歸檔控制變量 startarchive
C腳本觸發(fā)周期:10秒
腳本代碼:
#Include "apdefap.h"
intgscAction( void )
{
#pragma option(mbcs)
#pragma code ("kernel32.dll");
void GetLocalTime (SYSTEMTIME* lpst);
#pragma code();
SYSTEMTIME time;
int t1;
GetLocalTime(&time);
t1=time.wMinute;
if(t1==00)
{
SetTagBit("startarchive",1);
}
if(t1==05)
{
SetTagBit("startarchive",0);
}
return0;
}
歸檔設置如圖2:
圖2 歸檔設置
同理,在以上腳本的基礎上做修改,可以實現(xiàn)在某個的時間點打印報表,只要在觸發(fā)條件時調用下列函數(shù):
RPTJobPrint(" Myprintjob");
Myprintjob為 事先創(chuàng)建好的打印作業(yè)。
腳 本主要部分在于獲取當前時間,下 面的腳本實現(xiàn)了獲取當前時間并分別獲取年、月、日、時、分、秒、毫秒,星期幾的功能。
Varname1 到 Varname8 為 WinCC 內部變量。若在 WinCC畫面上顯示時,由于默認 I/O 域的 格式為999.99, 要把 Varname1 的顯示格式改為9999。
#Include "apdefap.h"
intgscAction( void )
{
#pragma option(mbcs)
#pragma code ("kernel32.dll");
void GetLocalTime (SYSTEMTIME* lpst);
#pragma code();
SYSTEMTIME time;
GetLocalTime(&time);
SetTagWord("Varname1",time.wYear);
SetTagWord("Varname2",time.wMonth);
SetTagWord("Varname3",time.wDayOfWeek);
SetTagWord("Varname4",time.wDay);
SetTagWord("Varname5",time.wHour);
SetTagWord("Varname6",time.wMinute);
SetTagWord("Varname7",time.wSecond);
SetTagWord("Varname8",time.wMilliseconds);
return 0;
}
設置或讀取時間的函數(shù)如下:
SetSystemTime
SetLocalTime
GetSystemTime
GetLocalTime
中本地計算機時間和格林威治時間是有區(qū)別的。函數(shù)“SetSystemTime / GetSystemTime"用于設置或讀取格林威治時間。
函數(shù)“SetLocalTime / GetLocalTime"用于設置或讀取本地計算機時間。
兩種時間會因地理的時區(qū)不同而改變。兩個函數(shù)使用相 同。
3.2 WinCC 項目時避免腳本初次執(zhí)行及執(zhí)行腳本
全局腳本在項目時,是要執(zhí)行一次的,在有些情況下,需要避免腳本執(zhí)行,就采用在腳本中去判斷。比如 可以創(chuàng)建 WinCC 內部布爾型變量 flag,腳本如下:
#Include "apdefap.h"
intgscAction( void )
{
#pragma option(mbcs)
if ( GetTagBit("flag")==1)
SetTagWord("NewTag",1);//根據(jù)自己的需求編寫對應代碼.
else
SetTagBit("flag",1); //Return-Type: BOOL
return0;
}
除了避免項目運行時觸發(fā)腳本執(zhí)行,我們 還可以通過 Sleep() 腳步功能執(zhí)行,比如開機后五分鐘開始執(zhí)行腳本具體功能,代碼如下:
#Include "apdefap.h"
intgscAction( void )
{
#pragma option(mbcs)
西門子SM1223卡件223-1BH32-OXBO