西門子存儲卡6ES7953-8LP31-0AA0
西門子S7-300PLC的置位/復(fù)位雙穩(wěn)態(tài)觸發(fā)器指令及示例
如果置位輸入端為“1”,復(fù)位輸入端為“0”,則觸發(fā)器被置位。此后,即使置位輸入端為0,觸發(fā)器也保持置位不變。如果復(fù)位輸入端為1,置位輸入端為“0”,則觸發(fā)器被復(fù)位。
置位優(yōu)先型RS觸發(fā)器的R端在S端之上,當(dāng)兩個輸入端都為1時,下面的置位輸入端終有效。既置位輸入優(yōu)先,觸發(fā)器被置位。
復(fù)位優(yōu)先型SR觸發(fā)器的S端在R端之上,當(dāng)兩個輸入端都為1時,下面的復(fù)位輸入端終有效。既復(fù)位輸入優(yōu)先,觸發(fā)器被復(fù)位。
例 3.1.11
如果輸入信號 I 0.0 = 1, I 0.0 = 0, 則M 0.0被復(fù)位,Q 4.0 = 0;
I 0.0 = 0, I 0.0 = 1, 則M 0.0被置位,Q 4.0 = 1;
I 0.0 = 0, I 0.0 = 0, 則M 0.0輸出保持不變,Q 4.0
輸出不變;
I 0.0 = 1, I 0.0 = 1, 則M 0.0被置位,Q 4.0 = 1。
例 3.1.12
如果輸入信號 I 0.0 = 1, I 0.0 = 0, 則M 0.0被復(fù)位,Q 4.0 = 0;
I 0.0 = 0, I 0.0 = 1, 則M 0.0被置位,Q 4.0 = 1;
I 0.0 = 0, I 0.0 = 0, 則M 0.0輸出保持不變,Q 4.0
l R Reset 復(fù)位指令
l S Set 置位指令
梯形圖LAD表示的置位/復(fù)位指令
l ---( S ) Set Coil 線圈置位指令
l ---( R ) Reset Coil 線圈復(fù)位指令
l SR Set-Reset Flip Flop 復(fù)位優(yōu)先型SR雙穩(wěn)態(tài)觸發(fā)器指令
l RS Reset-Set Flip Flop 置位優(yōu)先型RS雙穩(wěn)態(tài)觸發(fā)器指令
功能圖FBD表示的位邏輯指令
TIA博途V15還提供機器人功能。庫卡和安川等機器人制造商已將其數(shù)據(jù)塊庫用于在TIA博途中進行機器人編程。日本電裝(Denso)和瑞士史陶比爾(Stubli)等其他制造商計劃在不久的將來發(fā)布數(shù)據(jù)塊庫。這樣,控制和機器人技術(shù)的發(fā)展更加緊密,而TIA博途則能帶來從工程到機器人操作等各環(huán)節(jié)的整體解決方案。 Simatic S7-1500高級控制器產(chǎn)品系列中納入全新多功能平臺,目前能夠通過C/C++和Eclipse等商業(yè)編程工具輕松創(chuàng)建和重用高級語言應(yīng)用。Sinamics S120及其他驅(qū)動產(chǎn)品系列的集成有助于實現(xiàn)西門子全系列驅(qū)動技術(shù)在TIA博途中的組態(tài)、調(diào)試和診斷。 在標準化和更高工程效率方面,全新版本的TIA博途重視團隊合作和擴展對設(shè)備和系統(tǒng)的診斷功能。通過TIA博途多用戶工程(TIA Portal Multiuser Engineering),在團隊合作中添加了對變更對象的自動標記和離線模式。新版本下多用戶服務(wù)器中強化的變更管理功能,如用于變更歷史記錄和用戶評論等,可以改進團隊內(nèi)系統(tǒng)支持下的同步變更。 TIA博途V15還提供機器人功能。庫卡和安川等機器人制造商已將其數(shù)據(jù)塊庫用于在TIA博途中進行機器人編程。日本電裝(Denso)和瑞士史陶比爾(Stubli)等其他制造商計劃在不久的將來發(fā)布數(shù)據(jù)塊庫。這樣,控制和機器人技術(shù)的發(fā)展更加緊密,而TIA博途則能帶來從工程到機器人操作等各環(huán)節(jié)的整體解決方案。
1.全新TIA博途V15版本工程軟件平臺側(cè)重于應(yīng)用、數(shù)字化產(chǎn)品組合和工程效率2.高級語言編程得到進一步增強、集成更多驅(qū)動系統(tǒng)及功能3.開放的OPC UA功能和虛擬調(diào)試擴展了數(shù)字化產(chǎn)品組合4.項目標準化和的團隊合作,使機器和?。 另外,它還有助于自動化解決方案按照行業(yè)特定標準進行實施,如OMAC PackML(機械自動化與控制組織)或Weihenstephan(唯森)等。虛擬調(diào)試支持對自動化解決方案的虛擬驗證,也就是說控制組件與機器或系統(tǒng)的機電系統(tǒng)之間進行交互。 Simatic S7-1500高級控制器產(chǎn)品系列中納入全新多功能平臺,目前能夠通過C/C++和Eclipse等商業(yè)編程工具輕松創(chuàng)建和重用高級語言應(yīng)用。Sinamics S120及其他驅(qū)動產(chǎn)品系列的集成有助于實現(xiàn)西門子全系列驅(qū)動技術(shù)在TIA博途中的組態(tài)、調(diào)試和診斷。 在標準化和更高工程效率方面,全新版本的TIA博途重視團隊合作和擴展對設(shè)備和系統(tǒng)的診斷功能。通過TIA博途多用戶工程(TIA Portal Multiuser Engineering),在團隊合作中添加了對變更對象的自動標記和離線模式。新版本下多用戶服務(wù)器中強化的變更管理功能,如用于變更歷史記錄和用戶評論等,可以改進團隊內(nèi)系統(tǒng)支持下的同步變更
為保證系統(tǒng)穩(wěn)定運行,系統(tǒng)CPU應(yīng)避免長時間滿負荷運作,應(yīng)用程序CPU占用不宜過高??蛻粜枰谡{(diào)試階段監(jiān)測應(yīng)用程序各個進程線程占用情況,對占用過高的進程線程進行優(yōu)化。因CE自身不帶進程線程系統(tǒng)占用查看工具,我們增加了AppHelper助手工具方便客戶使用。
在之前的技術(shù)文章《CE應(yīng)用程序助手簡介》中簡單介紹過英創(chuàng)AppHelper應(yīng)用程序助手,本文將詳細介紹AppHelper的使用方法。
AppHelper查看方法
客戶在自制底板上只要引出了網(wǎng)絡(luò),USBOTG,DEBUG調(diào)試串口,或板子其它串口任意之一便可以查看AppHelper信息。
網(wǎng)絡(luò)方式
通過bnet登錄上板子,運行命令sysinfo,即可獲得AppHelper打印的進程線程信息。
bnet模式打印示例圖
USBOTG方式
使用AHC工具(使用方法見本文下一節(jié))配置AppHelper輸出為COM1。連接上板子USBOTG口,板子將以虛擬串口形式被PC識別。使用任意串口工具向該串口輸出任意三個字符(任意波特率),即可獲得AppHelper打印的進程線程信息。
USBOTG,DEBUG及其它串口打印示例圖
DEBUG調(diào)試串口方式
使用AHC工具(使用方法見本文下一節(jié))配置AppHelper輸出為DEBUG。連接板子的DEBUG串口,PC端使用任意串口工具,設(shè)置波特率115200,向DEBUG口輸出任意三個字符,即可獲得AppHelper打印的進程線程信息。
串口方式
將底板上引出,且客戶應(yīng)用程序未使用的串口連接上PC。使用AHC工具(使用方法見本文下一節(jié))配置好串口號及波特率。PC端使用任意串口工具,用設(shè)定的波特率向該串口輸出任意三個字符,即可獲得AppHelper打印的進程線程信息。
AHC工具使用介紹
AHC工具即AppHelper Config工具,用于設(shè)置AppHelper打印信息的輸出位置。有兩種辦法進行設(shè)置。
控制面板方式
在板子控制面板中運行AHC工具。
選擇好輸出信息的串口及波特率(其中COM1為USBOTG),點擊OK鍵保存配置,板子重啟后配置生效。
bnet方式
通過bnet登錄上板子,執(zhí)行命令A(yù)HC port [baud]
參數(shù)port:串口號,值為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時,baud固定為115200,當(dāng)port為1時,baud值不生效。
命令執(zhí)行后,DEBUG口可以看到打印提示信息。
打印格式說明
打印結(jié)果為數(shù)行,其中每行的格式均為:類型 ID號 占用情況 名稱
以下圖一次打印的部分截圖為例:
類型
PID表示為process進程。TID表示為上面進程下的thread線程。
ID號
即進程ID值或線程ID值。
占用情況
顯示格式為 K n% U m% total%
n值為該進程或線程在Kernel系統(tǒng)層的占用
m值為該進程或線程在User用戶層的占用
total值為總占用,它應(yīng)當(dāng)?shù)扔趎+m的和
進程下各個線程total占用和應(yīng)當(dāng)?shù)扔谶M程的total占用
名稱
進程名即EXE的名稱,線程默認沒有名稱,下一節(jié)會介紹如何給線程命名,從而能在AppHelper中顯示出來。
進程及線程監(jiān)視說明
AppHelper會打印系統(tǒng)下所有的進程的CPU占用信息。
只有在NandFlash目錄下的exe生成的進程會額外打印出它下面所有線程的CPU占用信息。
默認情況下,生成的線程只有ID號,沒有名稱,如果線程較多會不便于查看。我們可以通過簡單代碼給線程命名。
以光盤里的串口例程SPT_HEX為例:
添加一個結(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)手動將命名取消掉,避免不必要的顯示錯誤,設(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查看,啟動接收線程后,就可以看到CommRecvTread這個線程,另外個沒有命名的線程為SerialPort程序的主線程。
計算原理及誤差說明
CPU占用時間是通過計算一段時間內(nèi)(AppHelper設(shè)置為2000毫秒)CPU空閑tick值與這段時間里CPU運算周期tick值得出。
CPU空閑tick值 = CPU空閑tick計數(shù)t2 – CPU空閑tick計數(shù)t1
CPU總周期tick值 = CPU總周期tick計數(shù)t2 – CPU總周期tick計數(shù)t1
CPU占用 = 1 – (CPU空閑tick值/CPU總周期tick值)×
進程或線程的CPU占用,是通過計算一段時間CPU運算周期tick值,和這段周期里Kernel或User運行線程或進程的tick值,通過相除得到。
進程/線程Kernel占用 = (進程/線程Kernel運行tick值/CPU總周期tick值)×
進程/線程User占用 = (進程/線程User運行tick值/CPU總周期tick值)×
進程/線程CPU占用 = 進程/線程Kernel占用 + 進程/線程User占用
打印結(jié)果可能會有少量誤差,可能由于以下原因:
1、實驗值計算到個位,小數(shù)部分四舍五入,所以可能產(chǎn)生細微的誤差。
2、理想中的測量情況如下圖
但是實際情況由于AppHelper本身也會產(chǎn)生系統(tǒng)消耗,所以測量情況為下圖
在Δt值不為0的情況下,如果在Δt期間各個tick值產(chǎn)生較大跳動時,測試結(jié)果可能產(chǎn)生誤差。
3、各個進程或線程的運行tick值并非完全實時變化,而是在進程或線程完成一個時間片掛起后才加上,所以查詢函數(shù)獲得值不一定非常。
測試程序及說明
test_prc_thd是一個簡單的程序,用來測試AppHelper的進程線程監(jiān)視功能。
“添加線程”按鈕按下會創(chuàng)建一個新的線程。參數(shù)中傳入線程編號,線程ID等信息