plc自由口編程處理
對于后者,主站在發(fā)送后,從站是不會回復數(shù)據(jù)的,主站不能等,而應該結(jié)束RCV接收狀態(tài),然后發(fā)送,那么為什么和如何結(jié)束RCV接收狀態(tài)呢?
一 為什么要結(jié)束RCV接收狀態(tài)呢?
發(fā)送指令XMT將數(shù)據(jù)發(fā)送出去就完事,而接收RCV不一樣,一次完整成功的RCV過程需要以下步驟:
1 使能位:SM87.7=1/SM187.7=1,執(zhí)行RCV的時候會檢查該位
2 執(zhí)行RCV
3 等待消息起始條件
4 接收信息
5 等待消息結(jié)束條件
6 退出接收狀態(tài)
RCV指令啟動后并不一定就接收消息,如果消息起始條件沒有達到,那就一直處于等待接收的狀態(tài);
如果消息始終沒有開始或者結(jié)束,通信口就一直處于接收狀態(tài)。這時如果嘗試執(zhí)行XMT指令,就不會發(fā)送任何消息。
所以要結(jié)束接收RCV接收狀態(tài)后才能執(zhí)行XMT。
二:如何結(jié)束RCV接收狀態(tài)?
手冊上給出6種結(jié)束條件:
1.結(jié)束字符檢測
2.字符間計時器
3.信息計時器
4.最大字符計數(shù)
5.校驗錯誤
6.用戶終止
方法1:前4種條件在從站發(fā)生通訊故障后就失效了,必須要配合用戶終止
一般執(zhí)行XMT后,在發(fā)送完成中斷里執(zhí)行RCV,同時啟動定時中斷或者啟動定時器或者執(zhí)行開始間隔時間BITIM,計時時間到復位使能位SM87.7/SM187.7,同時執(zhí)行RCV,這樣結(jié)束RCV指令,比如定時中斷里發(fā)送:
LD SM0.0
R SM87.7, 1
RCV VB0, 0
S SM87.7, 1
LD SM0.0
DTCH 10
LD SM0.0
XMT VB100, 0
方法2:設置:SMB87=16#9C, SMW90/SMW190=0,SMW92/SMW192=x
執(zhí)行RCV指令x毫秒后自動結(jié)束接收狀態(tài)。
如果用的是字符中斷方式接收信息,那么將中斷分離后即可發(fā)送
DTCH 8
XMT VB100, 0
用結(jié)束字符作為結(jié)束條件的時候,如果與設備的通信斷了,CPU就會停滯在接受狀態(tài),之后的發(fā)送也不成功了,通訊也徹底斷了。
后來別人教我在發(fā)送前面用復位SMB87.7結(jié)束發(fā)送就好了。
自由口用RCV接收,接收到的數(shù)據(jù)總是一部分,不全,反復檢查做實驗,才發(fā)現(xiàn)原來是結(jié)束的定時器時間設短了,導致數(shù)據(jù)沒有接收完,RCV就結(jié)束了,增大了時間,一切就OK了。
剛做自由口編程時,一下載下去,編程軟件就無法和CPU通信了,后來打到停止狀態(tài),CPU才恢復PPI,可以正常監(jiān)控,下載了。
評論