西門子存儲(chǔ)卡6ES7953-8LP31-0AA0
西門子內(nèi)存卡6ES7953-8LP31-0AA0是微型存儲(chǔ)卡 用于 S7-300/C7/ET 200, 3,3V Nflash,8 MByte
為保證系統(tǒng)穩(wěn)定運(yùn)行,系統(tǒng)CPU應(yīng)避免長時(shí)間滿負(fù)荷運(yùn)作,應(yīng)用程序CPU占用不宜過高??蛻粜枰谡{(diào)試階段監(jiān)測應(yīng)用程序各個(gè)進(jìn)程線程占用情況,對(duì)占用過高的進(jìn)程線程進(jìn)行優(yōu)化。因CE自身不帶進(jìn)程線程系統(tǒng)占用查看工具,我們?cè)黾恿薃ppHelper助手工具方便客戶使用。
在之前的技術(shù)文章《CE應(yīng)用程序助手簡介》中簡單介紹過英創(chuàng)AppHelper應(yīng)用程序助手,本文將詳細(xì)介紹AppHelper的使用方法。
AppHelper查看方法
客戶在自制底板上只要引出了網(wǎng)絡(luò),USBOTG,DEBUG調(diào)試串口,或板子其它串口任意之一便可以查看AppHelper信息。
網(wǎng)絡(luò)方式
通過telnet登錄上板子,運(yùn)行命令sysinfo,即可獲得AppHelper打印的進(jìn)程線程信息。
telnet模式打印示例圖
USBOTG方式
使用AHC工具(使用方法見本文下一節(jié))配置AppHelper輸出為COM1。連接上板子USBOTG口,板子將以虛擬串口形式被PC識(shí)別。使用任意串口工具向該串口輸出任意三個(gè)字符(任意波特率),即可獲得AppHelper打印的進(jìn)程線程信息。
USBOTG,DEBUG及其它串口打印示例圖
DEBUG調(diào)試串口方式
使用AHC工具(使用方法見本文下一節(jié))配置AppHelper輸出為DEBUG。連接板子的DEBUG串口,PC端使用任意串口工具,設(shè)置波特率115200,向DEBUG口輸出任意三個(gè)字符,即可獲得AppHelper打印的進(jìn)程線程信息。
串口方式
將底板上引出,且客戶應(yīng)用程序未使用的串口連接上PC。使用AHC工具(使用方法見本文下一節(jié))配置好串口號(hào)及波特率。PC端使用任意串口工具,用設(shè)定的波特率向該串口輸出任意三個(gè)字符,即可獲得AppHelper打印的進(jìn)程線程信息。
AHC工具使用介紹
AHC工具即AppHelper Config工具,用于設(shè)置AppHelper打印信息的輸出位置。有兩種辦法進(jìn)行設(shè)置。
控制面板方式
在板子控制面板中運(yùn)行AHC工具。
選擇好輸出信息的串口及波特率(其中COM1為USBOTG),點(diǎn)擊OK鍵保存配置,板子重啟后配置生效。
telnet方式
通過telnet登錄上板子,執(zhí)行命令A(yù)HC port [baud]
參數(shù)port:串口號(hào),值為0-6,0表示DEBUG串口,1表示USBOTG轉(zhuǎn)虛擬串口,2-6分別表示板子的COM2-COM6。
參數(shù)baud:波特率,可選參數(shù),如果不填表示保持原波特率,支持1200,2400,4800,9600,19200,38400,57600,115200。當(dāng)port為0時(shí),baud固定為115200,當(dāng)port為1時(shí),baud值不生效。
命令執(zhí)行后,DEBUG口可以看到打印提示信息。
打印格式說明
打印結(jié)果為數(shù)行,其中每行的格式均為:類型 ID號(hào) 占用情況 名稱
以下圖一次打印的部分截圖為例:
類型
PID表示為process進(jìn)程。TID表示為上面進(jìn)程下的thread線程。
ID號(hào)
即進(jìn)程ID值或線程ID值。
占用情況
顯示格式為 K n% U m% total%
n值為該進(jìn)程或線程在Kernel系統(tǒng)層的占用
m值為該進(jìn)程或線程在User用戶層的占用
total值為總占用,它應(yīng)當(dāng)?shù)扔趎+m的和
進(jìn)程下各個(gè)線程total占用和應(yīng)當(dāng)?shù)扔谶M(jìn)程的total占用
名稱
進(jìn)程名即EXE的名稱,線程默認(rèn)沒有名稱,下一節(jié)會(huì)介紹如何給線程命名,從而能在AppHelper中顯示出來。
進(jìn)程及線程監(jiān)視說明
AppHelper會(huì)打印系統(tǒng)下所有的進(jìn)程的CPU占用信息。
只有在NandFlash目錄下的exe生成的進(jìn)程會(huì)額外打印出它下面所有線程的CPU占用信息。
默認(rèn)情況下,生成的線程只有ID號(hào),沒有名稱,如果線程較多會(huì)不便于查看。我們可以通過簡單代碼給線程命名。
以光盤里的串口例程SPT_HEX為例:
添加一個(gè)結(jié)構(gòu)體的定義
typedef struct _THREAD_INDEX
{
DWORDdwSize;
DWORDdwThreadID;
TCHARszThreadName[32];
_THREAD_INDEX*pNext;
}THREAD_INDEX;
在創(chuàng)建線程后給線程命名
這里把串口接收線程命名為"CommRecvTread"
hRecvThread = CreateThread(0, 0, CommRecvTread, this, 0, &m_dwTID);
HANDLE hHLP;
DWORD dwLen;
hHLP = CreateFile(L"HLP1:", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
THREAD_INDEXthreadIndex;
wsprintf(threadIndex.szThreadName, L"CommRecvTread");
threadIndex.dwThreadID = m_dwTID;
threadIndex.dwSize = sizeof(THREAD_INDEX);
WriteFile(hHLP, &threadIndex, sizeof(THREAD_INDEX), &dwLen, NULL);
CloseHandle(hHLP);
在結(jié)束線程后取消命名
線程結(jié)束后應(yīng)當(dāng)手動(dòng)將命名取消掉,避免不必要的顯示錯(cuò)誤,設(shè)置線程名為空,即可取消原命名。
HANDLE hHLP;
DWORD dwLen;
hHLP = CreateFile(L"HLP1:", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
THREAD_INDEXthreadIndex;
wsprintf(threadIndex.szThreadName, L"");
threadIndex.dwThreadID = m_dwTID;
threadIndex.dwSize = sizeof(THREAD_INDEX);
WriteFile(hHLP, &threadIndex, sizeof(THREAD_INDEX), &dwLen, NULL);
CloseHandle(hHLP);
命名線程后再使用AppHelper查看,啟動(dòng)接收線程后,就可以看到CommRecvTread這個(gè)線程,另外個(gè)沒有命名的線程為SerialPort程序的主線程。
計(jì)算原理及誤差說明
CPU占用時(shí)間是通過計(jì)算一段時(shí)間內(nèi)(AppHelper設(shè)置為2000毫秒)CPU空閑tick值與這段時(shí)間里CPU運(yùn)算周期tick值得出。
CPU空閑tick值 = CPU空閑tick計(jì)數(shù)t2 – CPU空閑tick計(jì)數(shù)t1
CPU總周期tick值 = CPU總周期tick計(jì)數(shù)t2 – CPU總周期tick計(jì)數(shù)t1
CPU占用 = 1 – (CPU空閑tick值/CPU總周期tick值)×
進(jìn)程或線程的CPU占用,是通過計(jì)算一段時(shí)間CPU運(yùn)算周期tick值,和這段周期里Kernel或User運(yùn)行線程或進(jìn)程的tick值,通過相除得到。
進(jìn)程/線程Kernel占用 = (進(jìn)程/線程Kernel運(yùn)行tick值/CPU總周期tick值)×
進(jìn)程/線程User占用 = (進(jìn)程/線程User運(yùn)行tick值/CPU總周期tick值)×
進(jìn)程/線程CPU占用 = 進(jìn)程/線程Kernel占用 + 進(jìn)程/線程User占用
打印結(jié)果可能會(huì)有少量誤差,可能由于以下原因:
1、實(shí)驗(yàn)值計(jì)算到個(gè)位,小數(shù)部分四舍五入,所以可能產(chǎn)生細(xì)微的誤差。
2、理想中的測量情況如下圖
但是實(shí)際情況由于AppHelper本身也會(huì)產(chǎn)生系統(tǒng)消耗,所以測量情況為下圖
在Δt值不為0的情況下,如果在Δt期間各個(gè)tick值產(chǎn)生較大跳動(dòng)時(shí),測試結(jié)果可能產(chǎn)生誤差。
3、各個(gè)進(jìn)程或線程的運(yùn)行tick值并非*實(shí)時(shí)變化,而是在進(jìn)程或線程完成一個(gè)時(shí)間片掛起后才加上,所以查詢函數(shù)獲得值不一定非常。
測試程序及說明
test_prc_thd是一個(gè)簡單的程序,用來測試AppHelper的進(jìn)程線程監(jiān)視功能。
“添加線程”按鈕按下會(huì)創(chuàng)建一個(gè)新的線程。參數(shù)中傳入線程編號(hào),線程ID等信息。
西門子存儲(chǔ)卡6ES7953-8LP31-0AA0
圖1-2:傳統(tǒng)的現(xiàn)場級(jí)與車間級(jí)自動(dòng)化監(jiān)控及信息集成系統(tǒng)
1.1.4 系統(tǒng)主要缺點(diǎn)
(1)信息集成能力不強(qiáng): 控制器與現(xiàn)場設(shè)備之間靠I/O連線連接,傳送4-20mA模擬量信號(hào)或24VDC等開關(guān)量信號(hào),并以此監(jiān)控現(xiàn)場設(shè)備。這樣,控制器獲取信息量有限,大量的數(shù)據(jù)如設(shè)備參數(shù)、故障及故障紀(jì)錄等數(shù)據(jù)很難得到。底層數(shù)據(jù)不全、信息集成能力不強(qiáng),不能*CIMS系統(tǒng)對(duì)底層數(shù)據(jù)的要求。
(2)系統(tǒng)不開放、可集成性差、專業(yè)性不強(qiáng):除現(xiàn)場設(shè)備均靠標(biāo)準(zhǔn)4-20mA/24VDC連接,系統(tǒng)其它軟、硬件通常只能使用一家產(chǎn)品。不同廠家產(chǎn)品之間缺乏互操縱性、互換性,因此可集成性差。這種系統(tǒng)很少留出接口,答應(yīng)其它廠商將自己專長的控制技術(shù),如控制算法、工藝流程、配方等集成到通用系統(tǒng)中往,因此,面向行業(yè)的監(jiān)控系統(tǒng)很少。
(3)可靠性不易保證:對(duì)于大范圍的分布式系統(tǒng),大量的I/O電纜及敷設(shè)施工,不僅增加本錢,也增加了系統(tǒng)的不可靠性。
(4)可維護(hù)性不高:由于現(xiàn)場級(jí)設(shè)備信息不全,現(xiàn)場級(jí)設(shè)備的在線故障診斷、報(bào)警、記錄功能不強(qiáng)。另一方面也很難完成現(xiàn)場設(shè)備的遠(yuǎn)程參數(shù)設(shè)定、修改等參數(shù)化功能,影響了系統(tǒng)的可維護(hù)性。
1.1.5 現(xiàn)場設(shè)備的串行通訊接口是現(xiàn)場總線技術(shù)的原形
由于大規(guī)模集成電路的發(fā)展,很多傳感器、執(zhí)行機(jī)構(gòu)、驅(qū)動(dòng)裝置等現(xiàn)場設(shè)備智能化,即內(nèi)置CPU控制器,完成諸如線性化、量程轉(zhuǎn)換、數(shù)字濾波甚至回路調(diào)節(jié)等功能。因此,對(duì)于這些智能現(xiàn)場設(shè)備增加一個(gè)串行數(shù)據(jù)接口(如RS-232/485)是非常方便的。有了這樣的接口,控制器就可以按其規(guī)定協(xié)議,通過串行通訊方式(而不是I/O方式)完成對(duì)現(xiàn)場設(shè)備的監(jiān)控。假如設(shè)想全部或大部分現(xiàn)場設(shè)備都具有串行通訊接口并具有同一的通訊協(xié)議,控制器只需一根通訊電纜就可將分散的現(xiàn)場設(shè)備連接,完成對(duì)所有現(xiàn)場設(shè)備的監(jiān)控,這就是現(xiàn)場總線技術(shù)的初始想法。
1.2.4 現(xiàn)場總線技術(shù)的產(chǎn)生
基于以上初始想法,使用一根通訊電纜,將所有具有同一的通訊協(xié)議通訊接口的現(xiàn)場設(shè)備連接,這樣,在設(shè)備層傳遞的不再是I/O(4-20mA/24VDC)信號(hào),而是基于現(xiàn)場總線的數(shù)字化通訊,由數(shù)字化通訊網(wǎng)絡(luò)構(gòu)成現(xiàn)場級(jí)與車間級(jí)自動(dòng)化監(jiān)控及信息集成系統(tǒng)。
1.2 現(xiàn)場總線技術(shù)概念
1.2.1 現(xiàn)場總線技術(shù)
目前,*的現(xiàn)場總線技術(shù)概念描述如下:現(xiàn)場總線是安裝在生產(chǎn)過程區(qū)域的現(xiàn)場設(shè)備/儀表與控制室內(nèi)的自動(dòng)控制裝置/系統(tǒng)之間的一種串行、數(shù)字式、多點(diǎn)通訊的數(shù)據(jù)總線。其中,“生產(chǎn)過程”包括斷續(xù)生產(chǎn)過程和連續(xù)生產(chǎn)過程兩類。
或者,現(xiàn)場總線是以單個(gè)分散的、數(shù)字化、智能化的丈量和控制設(shè)備作為網(wǎng)絡(luò)節(jié)點(diǎn),用總線相連接,實(shí)現(xiàn)相互交換信息,共同完成自動(dòng)控制功能的網(wǎng)絡(luò)系統(tǒng)與控制系統(tǒng)。
1.2.2 現(xiàn)場總線技術(shù)產(chǎn)生的意義
(1)現(xiàn)場總線(Fieldbus)技術(shù)是實(shí)現(xiàn)現(xiàn)場級(jí)控制設(shè)備數(shù)字化通訊的一種產(chǎn)業(yè)現(xiàn)場層網(wǎng)絡(luò)通訊技術(shù);是一次產(chǎn)業(yè)現(xiàn)場級(jí)設(shè)備通訊的數(shù)字化革命?,F(xiàn)場總線技術(shù)可使用一條通訊電纜將現(xiàn)場設(shè)備(智能化、帶有通訊接口)連接,用數(shù)字化通訊代替4-20mA/24VDC信號(hào),完成現(xiàn)場設(shè)備控制、監(jiān)測、遠(yuǎn)程參數(shù)化等功能。
(2)傳統(tǒng)的現(xiàn)場級(jí)自動(dòng)化監(jiān)控系統(tǒng)采用一對(duì)一連線的、4-20mA/24VDC信號(hào),信息量有限,難以實(shí)現(xiàn)設(shè)備之間及系統(tǒng)與外界之間的信息交換,使自控系統(tǒng)成為工廠中的“信息孤島”,嚴(yán)重制約了企業(yè)信息集成及企業(yè)綜合自動(dòng)化的實(shí)現(xiàn)。
(3)基于現(xiàn)場總線的自動(dòng)化監(jiān)控系統(tǒng)采用計(jì)算機(jī)數(shù)字化通訊技術(shù),使自控系統(tǒng)與設(shè)備加進(jìn)工廠信息網(wǎng)絡(luò), 構(gòu)成企業(yè)信息網(wǎng)絡(luò)底層,使企業(yè)信息溝通的覆蓋范圍一直延伸到生產(chǎn)現(xiàn)場。在CIMS系統(tǒng)中,現(xiàn)場總線是工廠計(jì)算機(jī)網(wǎng)絡(luò)到現(xiàn)場級(jí)設(shè)備的延伸,是支撐現(xiàn)場級(jí)與車間級(jí)信息集成的技術(shù)基礎(chǔ)。