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