對(duì)于自動(dòng)化控制或電氣工程師來(lái)說(shuō),西門(mén)子PLC是每個(gè)人都非常熟悉的一款PLC品牌;而對(duì)于上位機(jī)開(kāi)發(fā)工程師來(lái)說(shuō),Socket通信或TCP/IP協(xié)議也是必須要掌握的一種通信方式。今天跟大家聊聊Socket通信的那些事兒。 相比較而言,西門(mén)子PLC對(duì)Socket通信的支持性是很不錯(cuò)的。如果你在使用西門(mén)子軟件或者逛西門(mén)子論壇時(shí),發(fā)現(xiàn)一個(gè)詞叫做Open User Communication或開(kāi)放式通信,沒(méi)錯(cuò),那其實(shí)就是我們說(shuō)的Socket通信方式。關(guān)于這一點(diǎn),我們可以從以下兩張圖中看出,分別為S7-200Smart編程軟件Micro/Win Smart V2.5及博途TIA V15.1編程軟件中關(guān)于通信庫(kù)的部分截圖: 我們可以看到無(wú)論是西門(mén)子的中高端PLC還是低端PLC,都是支持開(kāi)放式TCP/UDP通信的,既然都支持,我們來(lái)看下如何實(shí)現(xiàn)。 眾所周知,對(duì)于Socket通信來(lái)說(shuō),是可以支持TCP、UDP等多種通信方式,但是今天在這里,我們主要針對(duì)TCP這種通信方式。除此以外,大家都知道,Socket會(huì)存在服務(wù)器和客戶端的說(shuō)法,也就意味著,同樣是使用Socket通信,我們?nèi)匀恍枰_定到底PLC是作為服務(wù)器還是作為客戶端,因?yàn)椴还軐?duì)于PLC編程或者上位機(jī)開(kāi)發(fā)來(lái)說(shuō),這兩種方式都是完全不同的,下面做具體介紹。 一、PLC作為T(mén)CP服務(wù)器的實(shí)戰(zhàn)應(yīng)用 (1) PLC編程 1.1創(chuàng)建一個(gè)TCPServer的子程序,拖拽一個(gè)TCP_CONNECT的庫(kù)指令,對(duì)于該指令的每個(gè)引腳對(duì)應(yīng)的含義,大家可以按下F1直接獲取在線幫助,程序段1編寫(xiě)如下圖所示: 1.2 拖拽一個(gè)TCP_SEND的庫(kù)指令,對(duì)于該指令的每個(gè)引腳填寫(xiě),ConnID為1,Req為觸發(fā)條件,必須為沿信號(hào),這里為了方便,直接使用1秒的脈沖信號(hào),DataLen及DataPtr為發(fā)送的起始字節(jié)指針及發(fā)送的字節(jié)長(zhǎng)度,程序段2如下圖所示: 1.3 拖拽一個(gè)TCP_RECV的庫(kù)指令,對(duì)于該指令的每個(gè)引腳填寫(xiě),ConnID統(tǒng)一為1,MaxLen為接受的最大程度,DataPtr表示接收字節(jié)存放的起始位置,程序段3如下圖所示: 1.4 最后需要編譯,編譯會(huì)提示需要給庫(kù)分配地址,點(diǎn)擊文件下的存儲(chǔ)器,給該庫(kù)分配地址即可,然后在MAIN主程序中調(diào)用TCPServer這個(gè)子程序,并下載到PLC中,PLC編程部分結(jié)束。 (2)TCP調(diào)試助手測(cè)試 如果PLC程序編寫(xiě)沒(méi)問(wèn)題,打開(kāi)一個(gè)網(wǎng)絡(luò)調(diào)試助手,輸入對(duì)應(yīng)的IP地址及端口號(hào),即可連接上服務(wù)器。 連接服務(wù)器后,PLC端會(huì)自動(dòng)每隔一秒發(fā)送200個(gè)字節(jié)數(shù)據(jù)過(guò)來(lái),這200個(gè)字節(jié)即對(duì)應(yīng)VB100-VB299的值。 (3)上位機(jī)客戶端軟件開(kāi)發(fā) 通過(guò)與編程軟件的狀態(tài)圖標(biāo)進(jìn)行對(duì)照,可以實(shí)時(shí)讀取PLC數(shù)據(jù),并隨時(shí)設(shè)置相應(yīng)的數(shù)值。 二、PLC作為T(mén)CP客戶端的實(shí)戰(zhàn)應(yīng)用 1.1 創(chuàng)建一個(gè)TCPClient的子程序,拖拽一個(gè)TCP_CONNECT的庫(kù)指令,與服務(wù)器程序不同的是,這里需要把Active設(shè)置為ON,同時(shí)IP地址和端口號(hào)需要根據(jù)上位機(jī)實(shí)際情況填寫(xiě),程序段1編寫(xiě)如下圖所示: 1.2 拖拽一個(gè)TCP_SEND的庫(kù)指令,對(duì)于該指令的每個(gè)引腳填寫(xiě),ConnID為2,Req為觸發(fā)條件,必須為沿信號(hào),這里為了方便,直接使用1秒的脈沖信號(hào),DataLen及DataPtr為發(fā)送的起始字節(jié)指針及發(fā)送的字節(jié)長(zhǎng)度,程序段2如下圖所示: 1.3 拖拽一個(gè)TCP_RECV的庫(kù)指令,對(duì)于該指令的每個(gè)引腳填寫(xiě),ConnID統(tǒng)一為2,MaxLen為接受的最大程度,DataPtr表示接收字節(jié)存放的起始位置,程序段3如下圖所示: 1.4 最后需要編譯,如果已經(jīng)編寫(xiě)過(guò)服務(wù)器程序,這里就不需要分配地址了,直接在MAIN主程序中調(diào)用TCPClient這個(gè)子程序,并下載到PLC中,PLC編程部分結(jié)束。 如果PLC程序編寫(xiě)沒(méi)問(wèn)題,打開(kāi)一個(gè)網(wǎng)絡(luò)調(diào)試助手,設(shè)置模式為T(mén)CP Server,輸入端口號(hào)為2000,即可開(kāi)啟服務(wù)器。 服務(wù)器開(kāi)啟后,PLC端會(huì)自動(dòng)連接服務(wù)器,并且每隔一秒發(fā)送100個(gè)字節(jié)數(shù)據(jù)過(guò)來(lái),這100個(gè)字節(jié)即對(duì)應(yīng)VB500-VB599的值。 (3)上位機(jī)服務(wù)器軟件開(kāi)發(fā) 通過(guò)與狀態(tài)圖標(biāo)進(jìn)行對(duì)比,驗(yàn)證可以正常讀取和寫(xiě)入PLC數(shù)據(jù)。 三、整體總結(jié) 后續(xù)通過(guò)進(jìn)一步測(cè)試,驗(yàn)證PLC可以同時(shí)作為服務(wù)器和客戶端與上位機(jī)進(jìn)行通信。 本次主要針對(duì)西門(mén)子PLC的開(kāi)放式TCP通信作了較為詳細(xì)地闡述,由于篇幅有限,無(wú)法將上位機(jī)部分的具體編程代碼進(jìn)行分析。 |
Copyright © 2014 Powered by Discuz! X3.2 技術(shù)支持:周末設(shè)計(jì) ( 鄂ICP備2022003378號(hào) )
中國(guó) · 武漢 · 東湖技術(shù)開(kāi)發(fā)區(qū) · 高新大道999號(hào) 服務(wù)熱線:(0)159-2764-2882