daizhicun
級別: 探索解密
|
現(xiàn)在和西門子plc通訊感覺主要還是用OPC, 但是我不太喜歡OPC, 雖然它封裝了上位和plc的溝通方式,做項目開發(fā)比較方便;但畢竟隔了一層;OPC內(nèi)部同步數(shù)據(jù)點一次一般也需要500毫秒; 對于高速分揀等需要快速響應(yīng)的,我想還是直接上下位溝通,繞過OPC; 我看了 西門子有 BCNetS7 協(xié)議規(guī)范 ,還沒細研究;不知道有沒有志同道合者一起研究; 而且網(wǎng)上介紹的資料也不多 不過用三菱的PLC卻詳細的介紹了和上位通訊的內(nèi)部協(xié)議:MC協(xié)議; 比如讀取D點,M點,X點,Y點的指令是: //MC協(xié)議讀取通訊點的指令:ENQ_ADDR--讀取首地址 ENQ_LEN--讀取長度 POINT_TYPE--通訊點類型(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ò)編號 ArrSend[3] := $FF; //plc編號 ArrSend[4] := $FF; //請求目標模塊低位 ArrSend[5] := $3; //請求目標模塊高位 ArrSend[6] := $0; //請求目標模塊站編號 ArrSend[7] := $C; //請求數(shù)據(jù)長度低位 ArrSend[8] := $0; //請求數(shù)據(jù)長度高位 ArrSend[9] := $10; //cpu監(jiān)視定時器低位 ArrSend[10] := $0; //cpu監(jiān)視定時器高位 //文字部 //命令 ArrSend[11] := $1; ArrSend[12] := $4; //子命令(0000-字讀取 0001-位讀取) ArrSend[13] := $0; ArrSend[14] := $0; //開始地址 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; //信號數(shù)量 ArrSend[19] := ENQ_LEN; ArrSend[20] := ENQ_LEN shr 8; end; 感覺和上位通訊這塊,雖然西門子方式很多,但都偏向于用封裝好的東西,比如prodave.dll ,還有及時最廣泛的OPC; 不過,我感覺還是綠色的,最直接不借助任何第三方的東西最好; 直接上下位按照標準協(xié)議通過socket溝通; 一般在三菱Q系列的plc里,通訊端口設(shè)置8000,而且可以開多個通訊端口; 做多個sokcet服務(wù)端的監(jiān)聽; 西門子這方便我想應(yīng)該更強吧。 |
---|---|
|
zylew
級別: 探索解密
|
PPI啊,TCP/IP不是很清楚 http://blog.liuzhenyun.info/2013/07/11/siemens-ppi/ |
---|---|
|