daizhicun
級(jí)別: 探索解密
![]() |
做了多年上位機(jī)系統(tǒng),主要是和三菱Q系統(tǒng)做通訊 如今正在做一個(gè)上位工控控制的產(chǎn)品; 用的MC協(xié)議; 這個(gè)相對(duì)用的已經(jīng)比較熟練了; 比如讀取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; 現(xiàn)在和西門(mén)子plc通訊主要還是用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)有志同道合者一起研究; |
---|---|
|
manjialin
專(zhuān)業(yè)工業(yè)控制軟件開(kāi)發(fā)!
級(jí)別: 略有小成
![]() |
以前有搞過(guò),但是不是很穩(wěn)定,放棄了,使用OPC,有空再溫習(xí)下看看 |
---|---|
|