daizhicun
級(jí)別: 探索解密
|
現(xiàn)在和西門(mén)子plc通訊感覺(jué)主要還是用OPC, 但是我不太喜歡OPC, 雖然它封裝了上位和plc的溝通方式,做項(xiàng)目開(kāi)發(fā)比較方便;但畢竟隔了一層;OPC內(nèi)部同步數(shù)據(jù)點(diǎn)一次一般也需要500毫秒; 對(duì)于高速分揀等需要快速響應(yīng)的,我想還是直接上下位溝通,繞過(guò)OPC; 我看了 西門(mén)子有 BCNetS7 協(xié)議規(guī)范 ,還沒(méi)細(xì)研究;不知道有沒(méi)有志同道合者一起研究; 而且網(wǎng)上介紹的資料也不多 不過(guò)用三菱的PLC卻詳細(xì)的介紹了和上位通訊的內(nèi)部協(xié)議:MC協(xié)議; 比如讀取D點(diǎn),M點(diǎn),X點(diǎn),Y點(diǎn)的指令是: //MC協(xié)議讀取通訊點(diǎn)的指令:ENQ_ADDR--讀取首地址 ENQ_LEN--讀取長(zhǎng)度 POINT_TYPE--通訊點(diǎn)類(lèi)型(D,M,X,Y) ; ArrSend--返回指令數(shù)組 procedure GET_READ_ENQ_BYTES(ENQ_ADDR, ENQ_LEN: Integer; POINT_TYPE: string; var ArrSend: TArray < Byte > ); begin SetLength(ArrSend, 21); //輔助HEAD ArrSend[0] := $50; ArrSend[1] := $0; //QHEAD ArrSend[2] := $0; //網(wǎng)絡(luò)編號(hào) ArrSend[3] := $FF; //plc編號(hào) ArrSend[4] := $FF; //請(qǐng)求目標(biāo)模塊低位 ArrSend[5] := $3; //請(qǐng)求目標(biāo)模塊高位 ArrSend[6] := $0; //請(qǐng)求目標(biāo)模塊站編號(hào) ArrSend[7] := $C; //請(qǐng)求數(shù)據(jù)長(zhǎng)度低位 ArrSend[8] := $0; //請(qǐng)求數(shù)據(jù)長(zhǎng)度高位 ArrSend[9] := $10; //cpu監(jiān)視定時(shí)器低位 ArrSend[10] := $0; //cpu監(jiān)視定時(shí)器高位 //文字部 //命令 ArrSend[11] := $1; ArrSend[12] := $4; //子命令(0000-字讀取 0001-位讀取) ArrSend[13] := $0; ArrSend[14] := $0; //開(kāi)始地址 ArrSend[15] := ENQ_ADDR; ArrSend[16] := ENQ_ADDR shr 8; ArrSend[17] := ENQ_ADDR shr 16; ; //設(shè)備編碼: case POINT_TYPE[1] of 'D': ArrSend[18] := $A8; 'M': ArrSend[18] := $90; 'X': ArrSend[18] := $9C; 'Y': ArrSend[18] := $9D; end; //信號(hào)數(shù)量 ArrSend[19] := ENQ_LEN; ArrSend[20] := ENQ_LEN shr 8; end; 感覺(jué)和上位通訊這塊,雖然西門(mén)子方式很多,但都偏向于用封裝好的東西,比如prodave.dll ,還有及時(shí)最廣泛的OPC; 不過(guò),我感覺(jué)還是綠色的,最直接不借助任何第三方的東西最好; 直接上下位按照標(biāo)準(zhǔn)協(xié)議通過(guò)socket溝通; 一般在三菱Q系列的plc里,通訊端口設(shè)置8000,而且可以開(kāi)多個(gè)通訊端口; 做多個(gè)sokcet服務(wù)端的監(jiān)聽(tīng); 西門(mén)子這方便我想應(yīng)該更強(qiáng)吧。 |
---|---|
|
daizhicun
級(jí)別: 探索解密
|
如果用無(wú)錫的那個(gè)東西,畢竟還是需要他的模塊; 費(fèi)用先不管,多一個(gè)模塊麻煩; 直接和plc 用socket通訊應(yīng)該是可以的; 而且我人為用非阻塞的方式直接通訊,效率肯定是最高的了; |
---|---|
|
daizhicun
級(jí)別: 探索解密
|
做為做上位系統(tǒng)的開(kāi)發(fā)人員, 對(duì)上位的通訊的模式一直整不明白; 根據(jù)資料,西門(mén)子的通訊方式太多; 眼花繚亂的, 然而,我其實(shí)只需要最原始的那種:TCP/IP ; (串口就不考慮了); 需要plc提供的僅僅是:ip地址和通訊端口號(hào); 不要整那些prodave,mpi,opc ,probus等 亂七八糟的,通訊效率低下不說(shuō),還要在電腦上安裝這樣那樣的西門(mén)子的組件,受限于人,煩也煩死了; 可能三菱做多了,還是習(xí)慣三菱的MC那樣, 比如三菱PLC的ip地址是:192.168.1.5;監(jiān)聽(tīng)的通訊端口號(hào)是:8000; 那么讀取D4000這個(gè)點(diǎn)的方法就是: 上位電腦通過(guò)ip:192.168.1.5 端口 8000和PLC建立socket(套接字)連接: 然后上位電腦給plc發(fā)送16進(jìn)制數(shù)據(jù): 50 00 00 FF FF 03 00 0C 00 10 00 01 04 00 00 A0 0F 00 A8 01 00 大概過(guò)了10毫秒,PLC給上位電腦反饋 RX:D0 00 00 FF FF 03 00 04 00 00 00 00 00 這樣上位就知道了D4000點(diǎn)的值; 方法很簡(jiǎn)單,如果要監(jiān)控D4000點(diǎn)的值的變化;那么就1秒或者更快的周期通訊一次; 摸索了很久,就沒(méi)發(fā)現(xiàn)西門(mén)子有三菱這邊方便直接的方式; [ 此帖被daizhicun在2013-07-12 09:59重新編輯 ] |
---|---|
|