LSK32N-0745常常遇到客戶咨詢自由口編程中字符中斷的相關(guān)問題,比如“字符中斷是什么?”,“字符中斷怎么用?”,“用SMB接收多個(gè)字符,如何編程?”,“字符中斷和RCV指令之間有什么關(guān)系?”。為了幫助您深入了解以上問題,我們就一起就這幾個(gè)問題進(jìn)行討論,以達(dá)到拋磚引玉的效果!
常問問題一:字符中斷是什么?
通過閱讀系統(tǒng)手冊(cè),我們知道使用字符中斷方式接收數(shù)據(jù),接收每個(gè)字符時(shí)都會(huì)產(chǎn)生中斷。在執(zhí)行與接收字符事件相連的中斷程序前,接收的字符存入SMB2寄存器中,校驗(yàn)狀態(tài)存入SM3.0。 SMB2、SM3.0都是只讀的。Port0/Port1共用SMB2/SMB3。Port0對(duì)應(yīng)于中斷事件8。Port1對(duì)應(yīng)于中斷事件25。
常問問題二:字符中斷怎么用?
以端口0接收字符為例:
當(dāng) LSK32N-0745通過端口0接收到一個(gè)字符后,會(huì)將該字符存入接收字符緩沖區(qū)SMB2,然后進(jìn)入相連接的中斷程序中。
注意,對(duì)于這段程序,如果在中斷程序中不作任何編程,那么當(dāng)CPU接收n個(gè)字符時(shí),中斷程序?qū)⒈粓?zhí)行n次,SMB2寄存器存儲(chǔ)接收到的最后一個(gè)字符。如上位機(jī)通過串口調(diào)試軟件給CPU發(fā)送3個(gè)字符16#AA、16#BB和16#C
那么與接收字符事件相連的中斷程序?qū)⒈粓?zhí)行3次,SMB2中只能保存最后一個(gè)接收到的字符16#CC
常問問題三:用SMB接收多個(gè)字符,如何編程?
由于SMB2只能存儲(chǔ)一個(gè)字符(一個(gè)字節(jié)),如果要想接受多個(gè)字符,則應(yīng)當(dāng)在CPU接收下一個(gè)字符之前,在中斷程序中通過指針編程將SMB2中存儲(chǔ)的字符移出來,以便下一次接收字符。以一個(gè)例程說明:
VD0作為地址指針指向VB100,當(dāng)端口0接收到第一個(gè)字符,將第一個(gè)字符存入SMB2,進(jìn)入接收中斷,將SMB2中的字符復(fù)制到指針VD0指向的地址字節(jié)VB100中,指針地址加1,VD0指向下一個(gè)字節(jié)VB101。當(dāng)接收第二個(gè)字符,將字符存入SMB2,進(jìn)入接收中斷,將SMB2中的第二個(gè)字符復(fù)制到指針VD0指向的地址字節(jié)VB101中,指針地址加1,VD0指向下一個(gè)字節(jié)VB102。當(dāng)接收第三個(gè)字符時(shí)以此類推。
另外,如果需要接收n個(gè)字符就結(jié)束接收,或者需要接收n個(gè)字符后循環(huán)接收,可以在中斷程序中設(shè)置一個(gè)標(biāo)志位,下面我們?cè)嚺e例說明:
例程1,接收到5個(gè)字符就結(jié)束接收的程序:
例程2,接收到5個(gè)字符后循環(huán)接收的程序:
最后要提醒您注意的是,程序中的的指針不要選擇累加器AC,因?yàn)槔奂悠鞑荒茉谥鞒绦蚝椭袛喑绦蛑袀鬟f參數(shù)。
常問問題四:字符中斷和RCV指令之間有什么關(guān)系?
簡單地說,當(dāng)RCV指令使能時(shí),接收字符不進(jìn)入SMB緩沖區(qū)。
我們可以設(shè)計(jì)個(gè)實(shí)驗(yàn)分析一下:
在主程序中我們既定義PLC執(zhí)行RCV接收指令的起始結(jié)束條件(起始條件為起始字符16#AA,結(jié)束條件為結(jié)束字符16#BB),又建立字符中斷事件8,上升沿條件觸發(fā)RCV指令。
上位機(jī)通過串口調(diào)試軟件給CPU發(fā)送字符。
程序如下圖:
狀態(tài)表監(jiān)控結(jié)果:
結(jié)論:
當(dāng)RCV指令不觸發(fā)的話,接收字符只進(jìn)入SMB2緩沖區(qū),不進(jìn)入RCV指令的接收緩沖區(qū)。
當(dāng)RCV指令觸發(fā)后,滿足CPU接收的起始和結(jié)束條件的字符存入RCV指令對(duì)應(yīng)的TBL緩沖區(qū)。起始條件之前的字符既不存入RCV緩沖區(qū),也不存入SMB2緩沖區(qū)。結(jié)束條件之后接收到的字符,存入SMB2緩沖區(qū)。
通過以上幾個(gè)問題的分析,我們對(duì)于字符中斷和SMB2的基本用法和特點(diǎn)做了介紹,相信在實(shí)際項(xiàng)目中會(huì)有更多靈活的應(yīng)用等待我們?nèi)グl(fā)掘。
工業(yè)現(xiàn)場(chǎng)經(jīng)常碰到需要用PLC采集多路模擬量尤其是熱電偶、熱電阻信號(hào)的情況,下面提供一個(gè)用西門子S7-200掛接4個(gè)S1116(北京西姆宏產(chǎn)品)前端模塊采集64模擬量的案例,與各位工控界的同仁共享。
S1116是一款待16路萬能輸入的模入前端,經(jīng)軟件設(shè)置后可直接輸入標(biāo)準(zhǔn)電壓、電流、熱阻、熱偶各種信號(hào),包括0~5V、0~10V、0~50mV、0~10mA、4~20mA、Pt100、Cu50、K分度、S分度等均可自由混接輸入,通道之間隔離,精度0.2級(jí),RS485通信接口。
西門子S7-200掛接4個(gè)S1116采集64模擬量的步驟如下:
?。ㄒ唬?用戶根據(jù)現(xiàn)場(chǎng)需求使用《S系列與S3000系列設(shè)置測(cè)試軟件》在計(jì)算機(jī)上對(duì)其進(jìn)行通道參數(shù)設(shè)置和精度校驗(yàn)。并將計(jì)4個(gè)S1116的通信站址分別設(shè)置為1、2、3、4,通信速率設(shè)置為38400bps,通信協(xié)議為S¬_PLC。
(二) 將S7-200(以226為例)的RS485通信接口和4個(gè)S1116的RS485通信接口用雙絞線串接起來,S7-200通信口(九芯)的3腳接4個(gè)S1116的37端子(485+);S7-200通信口(九芯)的8腳接4個(gè)S1116的36端子(485-);S7-200通信口(九芯)的5腳接4個(gè)S1116的35端子(485地)。
?。ㄈ?在S7-200上灌裝北京西姆宏提供的S系列I/O前端與 S7-200的連接程序(程序名為S_PLC),并按該程序使用說明修改相應(yīng)的掛接前端個(gè)數(shù)定義單元 (VB3900)和掛接前端型號(hào)定義單元(VB3902、VB3903、VB3904、VB3905)。
?。ㄋ模?運(yùn)行該程序,馬上就可以在相應(yīng)的數(shù)據(jù)映射區(qū)(位于VB4000至VB4128共128字節(jié))看到所需采集的64模擬量的工程量值(溫度就是多少度,壓力就是多少兆帕,整型數(shù))。
就是這么簡單。此種方法最多可采集512路模擬量或多或1024路開關(guān)量(32個(gè)站時(shí)),還可以用于控制多路模擬量或開關(guān)量輸出,各位同仁如有問題請(qǐng)留下地址郵編電話,北京西姆宏儀器儀表有限公司有工程師為您提供服務(wù)。