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