cont在c语言用法,在S7-1500中指令TSEND_C and TRCV_C如何使用?
指令被異步執(zhí)行并有以下功能:
t組態(tài)并建立一個通信連接。
通過現(xiàn)有的連接發(fā)送和接收數(shù)據(jù)。
斷開或重置通信連接。
通信連接通過CONT=1組態(tài)和建立。
發(fā)送任務(wù)在REQ參數(shù)中檢測到上升沿時會被執(zhí)行。
如果參數(shù)EN_R的值被設(shè)定”1″,數(shù)據(jù)接收會被使能。
下面考慮編程建立連接的情形下指令的行為,使用了參數(shù)CONT/REQ和CONT/NDR。
有效性
本條目對于V2.0版本的指令有效。在附件中使用了舊版本V1.4指令。CP 443-1 作為通信伙伴使用,會盡可能頻繁的發(fā)送數(shù)據(jù)。 (“TRCV_C”相關(guān)).
TSEND_C只要CONT參數(shù) = 0,REQ參數(shù)就不會有影響。
參數(shù)REQ在CONT之后置位
TSEND_C指令在CONT = 1之前,在STATUS送出 “7000” ,從CONT置位開始建立連。在連接開始建立時STATUS參數(shù)輸出值為“7001”,保持一個程序周期 ;然后,STATUS參數(shù)的值輸出“7002”,直到連接被建立。當(dāng)連接被建立后,STATUS參數(shù)的值輸出”7004″。如果此后如果參數(shù)REQ設(shè)為1,STATUS參數(shù)的值輸出 “7005”,并且同時輸出BUSY=1直到Send任務(wù)完成。當(dāng)數(shù)據(jù)被成功發(fā)送時,會輸出以下的值:STATUS=0,DONE=1和BUSY=0.。然后STATUS參數(shù)的值就會變回”7004″,這就是說TSEND_C指令不再處于發(fā)送模式。如果需要觸發(fā)一個新的發(fā)送任務(wù),REQ參數(shù)必須復(fù)位一個周期然后再次置位。
圖. 1
參數(shù)CONT和REQ同時被置位
“TSEND_C”指令輸出STATUS “7000” ,直到CONT=1和REQ=1被置位而連接開始建立。 開始建立連接時,STATUS參數(shù)的值輸出”7001″持續(xù)一個周期,然后STATUS參數(shù)的值輸出”7002″直到連接被建立。當(dāng)連接建立完成后,STATUS參數(shù)的值為“1”并且指令開始發(fā)送數(shù)據(jù),同時設(shè)置BUSY=1。隨后的程序循環(huán)中,STATUS參數(shù)的值輸出 “7005”同時BUSY=1,直到發(fā)送任務(wù)完成。當(dāng)數(shù)據(jù)發(fā)送完成,輸出下列值:STATUS=0,DONE=1,BUSY=0。然后指令的STATUS參數(shù)的值會再次為“7004”,表明指令不再處于發(fā)送模式。如需開始新的發(fā)送任務(wù),REQ參數(shù)必須復(fù)位一個周期然后再置位。
圖. 2
圖. 5 顯示了連接的斷開過程。當(dāng)連接正在被斷開時,指令TSEND_C 在STATUS參數(shù)的值為“7003”,直到連接被成功斷開。成功斷開連接會在STATUS參數(shù)報“3”。然后TSEND_C指令會在STATUS參數(shù)輸出“7000” ,表明當(dāng)前沒有任務(wù)在運行。
TRCV_C只要CONT參數(shù)不置位,EN_R參數(shù)就沒有影響。
參數(shù)CONT先置位而EN_R后置位
TRCV_C指令發(fā)送STATUS“7000”直到CONT=1被設(shè)定,同時連接開始建立。當(dāng)連接被建立時,STATUS參數(shù)的的值輸出“7001”一個周期。然后STATUS參數(shù)的值會為“7002”直到連接被建立。當(dāng)連接被建立之后,STATUS參數(shù)的值輸出“7004”。 如果參數(shù)EN_R=1 被設(shè)定,STATUS參數(shù)的值輸出”7006″ ,同時指令就會輸出BUSY=1,直到接收任務(wù)完成。當(dāng)數(shù)據(jù)被完全接收之后,輸出以下值:STATUS=0,NDR=1同時BUSY=0。只要 EN_R=1,指令的在STATUS參數(shù)的輸出值就會為”7006″;意味著繼續(xù)準(zhǔn)備接收而 BUSY=1。下面的例子中圖示有接收第二個消息的狀態(tài)。
圖. 3
參數(shù)CONT 和EN_R 同時置位
“TRCV_C”指令輸出 STATUS “7000” 。在CONT=1和EN_R=1 同時開始建立連接,STATUS參數(shù)的值輸出 “7001” 一個周期, 隨后TSTATUS參數(shù)的值會為“7002”直到連接被建立。當(dāng)連接被建立后,STATUS參數(shù)的值輸出”1″而BUSY=1 ,指令準(zhǔn)備接受數(shù)據(jù)。隨后其他程序循環(huán)STATUS參數(shù)的值輸出”7006″ 且BUSY=1,直到接收任務(wù)完成。當(dāng)數(shù)據(jù)被傳輸成功之后,輸出下列數(shù)值:STATUS=0,NDR=1,BUSY=0。只要EN_R=1,指令在STATUS參數(shù)的輸出就會為”7006″且BUSY=1,進(jìn)入繼續(xù)準(zhǔn)備接收狀態(tài)。下面的例子中圖示有接收第二個消息的狀態(tài)。
圖. 4
TRCV的特殊點當(dāng)EN_R參數(shù)被復(fù)位,TRCV_C指令會保持準(zhǔn)備接收數(shù)據(jù),直到數(shù)據(jù)再次開始被接收。保持STATUS輸出值為”7006″,且BUSY=1直到數(shù)據(jù)被成功接收,而后輸出:STATUS=0,NDR=1同時BUSY=0。最后指令在STATUS的輸出值”7004″ 同時BUSY=0。
當(dāng)CONT參數(shù)被復(fù)位,指令斷開連接。在斷開連接的過程中,指令TRCV_C在STATUS的值為”7003″直到連接被成功斷開,此時STATUS參數(shù)輸出”3″ 。最后 TRCV_C在STATUS參數(shù)輸出 “7000”;這意味著當(dāng)前沒有任務(wù)在運行。
圖. 5
在同一連接使用TSEND_C和TRCV_C如果TSEND_C和TRCV_C指令使用同一個連接ID,兩個帶有控制功能的指令 (連接建立和斷開)就會在一個連接被使能。如果不正確使用就會導(dǎo)致錯誤。(見圖.6)
指令在STATUS參數(shù)的值與單獨使用指令是不同的。因為TSEND_C在TRCV_C前調(diào)用,TRCV_C指令在STATUS 參數(shù)的值會被影響。在連接建立時,TRCV_C指令不會將STATUS “7001”作為中間狀態(tài)輸出。此外,指令TSEND_C會在TRCV_C前輸出“7004”代表連接建立。會在后一程序循環(huán)中報“7002”。只有在隨后的循環(huán)中TRCV_C指令會報STATUS“1”,代表成功建立了連接。
如果CONT參數(shù)在TSEND_C或TRCV_C上被復(fù)位,即使CONT參數(shù)在另一個指令保持置位,連接還是會被斷開。當(dāng)對于正在進(jìn)行連接斷開時,TSEND_C指令在STATUS參數(shù)輸出“7003”,而TRCV_C依舊會在STATUS參數(shù)輸出”7004″。當(dāng)連接斷開后,TRCV輸出錯誤碼STATUS = 80AA,然后TRCV_C會嘗試重新建立連接。
圖. 6
建議使用下列組合在同一連接上發(fā)送和接收數(shù)據(jù):
TSEND_C和TRCV
TSEND和TRCV_C
創(chuàng)建環(huán)境圖片基于V2.0版本的TSEND_C 和TRCV_C指令的行為,通過CPU 1516-3 PN/DP和CP 1543-1測試的, 這些行為在ISO_on_TCP,TCP和UDP 協(xié)議都是相同的。
更多信息TSEND_C和TRCV_C指令在V1.4中的行為可以在以下文檔中找到。
原創(chuàng)文章,作者:ximenziask,如若轉(zhuǎn)載,請注明出處:https://www.zhaoplc.com/plc322570.html
總結(jié)
以上是生活随笔為你收集整理的cont在c语言用法,在S7-1500中指令TSEND_C and TRCV_C如何使用?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云道哥:我曾经是饱受网络攻击摧残的创
- 下一篇: Spring Boot 网易云课堂