daizhicun
級別: 探索解密
精華主題: 0
發(fā)帖數量: 6 個
工控威望: 137 點
下載積分: 586 分
在線時間: 3(小時)
注冊時間: 2013-07-03
最后登錄: 2013-08-13
查看daizhicun的 主題 / 回貼
樓主  發(fā)表于: 2013-07-03 21:48
  
現在和西門子plc通訊感覺主要還是用OPC,
但是我不太喜歡OPC,
雖然它封裝了上位和plc的溝通方式,做項目開發(fā)比較方便;但畢竟隔了一層;OPC內部同步數據點一次一般也需要500毫秒;
對于高速分揀等需要快速響應的,我想還是直接上下位溝通,繞過OPC;

我看了 西門子有 BCNetS7 協議規(guī)范 ,還沒細研究;不知道有沒有志同道合者一起研究;
而且網上介紹的資料也不多




不過用三菱的PLC卻詳細的介紹了和上位通訊的內部協議:MC協議;


比如讀取D點,M點,X點,Y點的指令是:

//MC協議讀取通訊點的指令:ENQ_ADDR--讀取首地址  ENQ_LEN--讀取長度  POINT_TYPE--通訊點類型(D,M,X,Y) ; ArrSend--返回指令數組
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; //網絡編號
  ArrSend[3] := $FF; //plc編號
  ArrSend[4] := $FF; //請求目標模塊低位
  ArrSend[5] := $3; //請求目標模塊高位
  ArrSend[6] := $0; //請求目標模塊站編號
  ArrSend[7] := $C; //請求數據長度低位
  ArrSend[8] := $0; //請求數據長度高位
  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; ;
  //設備編碼:
  case POINT_TYPE[1] of
    'D':
      ArrSend[18] := $A8;
    'M':
      ArrSend[18] := $90;
    'X':
      ArrSend[18] := $9C;
    'Y':
      ArrSend[18] := $9D;
  end;
  //信號數量
  ArrSend[19] := ENQ_LEN;
  ArrSend[20] := ENQ_LEN shr 8;
end;


感覺和上位通訊這塊,雖然西門子方式很多,但都偏向于用封裝好的東西,比如prodave.dll ,還有及時最廣泛的OPC;

不過,我感覺還是綠色的,最直接不借助任何第三方的東西最好; 直接上下位按照標準協議通過socket溝通;

一般在三菱Q系列的plc里,通訊端口設置8000,而且可以開多個通訊端口; 做多個sokcet服務端的監(jiān)聽;

西門子這方便我想應該更強吧。




riiynicel
sanziyoudu
級別: 略有小成
精華主題: 0
發(fā)帖數量: 270 個
工控威望: 380 點
下載積分: 3947 分
在線時間: 350(小時)
注冊時間: 2010-09-15
最后登錄: 2022-03-04
查看riiynicel的 主題 / 回貼
1樓  發(fā)表于: 2013-07-07 19:47
可以利用PPI協議和上位機通訊,硬件只需要USB-485 或編程線就可以。
http://item.taobao.com/item.htm?spm=686.1000925.1000774.26.vVuv7X&id=20807039215