前言
眾所周知,西門子在工控領(lǐng)域的市場(chǎng)占有率很大,那么對(duì)于上位機(jī)開發(fā)人員來說,使用西門子PLC作為下位機(jī),我們應(yīng)該如何與之進(jìn)行通信呢?
西門子PLC支持很多種通信協(xié)議,主要分為三種通信方式,一種是串口通信,一種是以太網(wǎng)通信,同時(shí)也可以通過OPC實(shí)現(xiàn)數(shù)據(jù)通信。
串口通信
西門子PLC支持串口通信,在S7-200和S7-200Smart中,都直接集成了串口,但是從S7-1200到S7-1500,慢慢都取消掉了,如果需要,可以通過擴(kuò)展模塊的方式來增加,出現(xiàn)這種現(xiàn)象的原因,其實(shí)也是工業(yè)發(fā)展的必然結(jié)果。串口通信的優(yōu)勢(shì)在于簡(jiǎn)單、成本低,但是劣勢(shì)也非常明顯,就是傳輸效率低。西門子早期的串口通信主要是Profibus DP通信,但是上位機(jī)是無法直接與西門子PLC走Profibus DP通信的,因此,西門子PLC常用的串口通信方案如下所示:
PPI通信:PPI通信只針對(duì)S7-200和S7-200 Smart系列PLC,其他型號(hào)不支持。
ModbusRTU主站:西門子PLC對(duì)Modbus協(xié)議支持還是比較不錯(cuò)的,這里是指PLC做Slave(即從站),上位機(jī)做Master(即主站)。
ModbusRTU從站:這里是指PLC做Master(即主站),上位機(jī)做Slave(即從站)
以太網(wǎng)通信
西門子PLC通信還是以太網(wǎng)通信為主,我們常說的西門子通信協(xié)議分別是S7協(xié)議和Profinet協(xié)議,但是Profinet是一種總線協(xié)議,目前,C#是無法直接與西門子PLC走Profinet通信的。因此,西門子PLC常用的以太網(wǎng)通信方案如下所示:
S7通信:基本上從S7-200到S7-1500均可以實(shí)現(xiàn),這里有很多可以選擇的開源或商業(yè)庫,包括s7.net、pronodave、libnodave、sharp7,也可以自己封裝通信庫。
ModbusTCP Server:這里是指PLC做Server(即服務(wù)器),上位機(jī)做Client(即客戶端)。
ModbusTCP Client:這里是指PLC做Client(即客戶端),上位機(jī)做Server(即服務(wù)器)。
OpenProtocol Server:這里是指開放式TCP通信,PLC做TCPServer(即服務(wù)器),上位機(jī)做TCPClient(即客戶端)。
OpenProtocol Client:這里是指PLC做TCPClient(即客戶端),上位機(jī)做TCPServer(即服務(wù)器)。
OPC通信
OPC通信是工業(yè)控制中常用的一種通信方式,主要在于OPC軟件的選擇以及OPCDA、OPCUA的選擇,因此,西門子PLC常用的OPC通信方案如下所示:
PC Access系列:西門子針對(duì)S7-200開發(fā)PC-Access軟件,針對(duì)S7-200 Smart又提供了PC-Access Smart軟件,可以直接通過這些軟件實(shí)現(xiàn)OPCDA通信。
Simatic Net 系列OPCDA:Simatic Net是西門子主推的OPC軟件,支持西門子全系列,這里主要是OPCDA通信方式。
Simatic Net 系列OPCUA:新版的Simatic Net也開始支持OPCUA,這里主要是OPCUA通信方式。
KepServer 系列OPCDA:KepServer同樣作為一款商業(yè)OPC軟件,在國(guó)內(nèi)使用率非常高,同樣也支持西門子全系列,這里主要是OPCDA通信方式。
Simatic Net 系列OPCUA:新版的KepServer也開始支持OPCUA,這里主要是OPCUA通信方式。
S7通信協(xié)議
在以上眾多的通信方式和通信協(xié)議中,就目前而言,使用S7通信是最方便,也是應(yīng)該最廣泛的,那么S7協(xié)議相對(duì)于其他協(xié)議來說,有哪些優(yōu)勢(shì)呢?
使用S7通信協(xié)議最大的優(yōu)勢(shì)在于不需要編寫PLC程序,而其他協(xié)議多少要寫一些PLC程序,而且S7協(xié)議在底層做了很強(qiáng)的封裝,在上位機(jī)通信應(yīng)用中相比其他通信協(xié)議來說,也有很大的優(yōu)勢(shì)。
雖然不需要編寫PLC程序,但仍然需要做一些簡(jiǎn)單的配置:
勾選允許Put/Get
PLC側(cè)需要設(shè)置勾選允許來自遠(yuǎn)程對(duì)象的Put/Get通信訪問 對(duì)于西門子1200/1500系列,必須要勾選允許Put/Get訪問,對(duì)于200Smart/300/400,則不需要。
DB塊去除優(yōu)化訪問
對(duì)于基于博圖開發(fā)S7-1200/1500的項(xiàng)目,如果要與DB塊數(shù)據(jù)通信,需要要去除DB的優(yōu)化的塊訪問,對(duì)于200Smart/300/400,則不需要。如果希望通過標(biāo)簽通信,可以采用OPCUA。
務(wù)必保證通信地址是有效地址
因?yàn)镻LC大多數(shù)是基于存儲(chǔ)區(qū)的,每個(gè)地址肯定是隸屬于某個(gè)存儲(chǔ)區(qū),大家都知道西門子PLC自帶的存儲(chǔ)區(qū)有I區(qū)、Q區(qū)、M區(qū)、T區(qū)、C區(qū),但是對(duì)于常用的DB存儲(chǔ)區(qū)是沒有的,需要自己去創(chuàng)建,也就意味著,如果你要讀取DB地址,必須要提前創(chuàng)建好DB存儲(chǔ)區(qū),除此以外,DB存儲(chǔ)區(qū)創(chuàng)建之后,默認(rèn)是沒有字節(jié)的,需要自己一個(gè)個(gè)添加變量,才能形成有效存儲(chǔ)區(qū),因此一個(gè)DB存儲(chǔ)區(qū)的范圍是有限并且可見的(可以通過偏移量看出來)。
調(diào)整通信負(fù)載
如果以上操作均沒問題,仍然沒法連接,可以適當(dāng)調(diào)整一下通信負(fù)載參數(shù)。
C#上位機(jī)通信
每種通信方式都有自己的優(yōu)缺點(diǎn),但是通信的本質(zhì)都是相通的。