摘 è¦ï¼šä»‹ç´¹äº†å€ŸåŠ©äºŽDelphi7.0 çš„Server/Client Socket通訊控件,以åŠGSM/GPRS ModemçŸä¿¡æ¨¡å¡Šï¼Œé‡‡ç”¨modbus通訊å”(xié)è°å°(duì)三相三線電å¼åå¤šåŠŸèƒ½é›»è¡¨ã€æ•¸(shù)å—å¼å» (所)用變ä¿è·(hù)測(cè)控è£ç½®ä»¥åŠç›´æµå±å¯¦(shÃ)ç¾(xià n)陿¸¬(cè)ã€é™ä¿¡ã€é™æŽ§ã€é™èª¿(dià o)。利用C8051F020單片機(jÄ«)完æˆä¸åŒé€šè¨Šå”(xié)è°æ•¸(shù)據(jù)çš„MODBUSå”(xié)è°å°è£èˆ‡è§£åŒ…。本文祥述通訊éŽ(guò)程的實(shÃ)ç¾(xià n),給出了è¨(shè)計(jì)程åºã€‚
é—œ(guÄn)éµè©žï¼šmodbuså”(xié)è°,GSM/GPRS Modem, C8051F020,Server/Client Socket, RS-485
Abstract: By using Server/Client Socket component of Delphi7.0, as well as GSM / GPRS Modem, this research realizes remote control of the Multi-function ammeter , the digital circuit protector and DC-screen with modbus protocol and using C8051F020 MCU to complete the data of different communication protocols of package and unpackage in MODBUS protocol. This paper describes the realization of communication process, giving the design procedure.
Keywords:Modbus protocol, GSM/GPRS Modem,C8051F020,Server/Client Socket, RS-485
1.概述:
ã€€ã€€æœ¬é …(xià ng)目主è¦å®Œæˆå°(duì)35KV/A變電站的é (yuÇŽn)程實(shÃ)時(shÃ)控制與數(shù)據(jù)采集。是基于以太網(wÇŽng)傳輸?shù)闹鲿°–綉?yÄ«ng)ç”æ–¹å¼çš„通訊。在整個(gè)é …(xià ng)ç›®ä¸ä¸‰å€‹(gè)被控å°(duì)象有å„自的內(nèi)部通訊å”(xié)è°ï¼Œå¤šåŠŸèƒ½é›»è¡¨éµå¾ª645通訊è¦(guÄ«)約,直æµå±éµå¾ª451通訊è¦(guÄ«)約,線路ä¿è·(hù)器éµå¾ª103通訊è¦(guÄ«)約,三個(gè)ä¸åŒé€šè¨Šå”(xié)è°çš„æ•¸(shù)據(jù)最終è¦èˆ‡ç›£(jiÄn)控ä¸å¿ƒçš„ä¸Šä½æ©Ÿ(jÄ«)實(shÃ)ç¾(xià n)全雙工通訊。實(shÃ)ç¾(xià n)陿¸¬(cè)ã€é™ä¿¡ã€é™æŽ§ã€é™èª¿(dià o)如:å°(duì)è®Šé›»ç«™åŠŸçŽ‡å› æ•¸(shù)ã€é›»èƒ½é‡ç‰é‹(yùn)行實(shÃ)時(shÃ)åƒæ•¸(shù)陿¸¬(cè),å°(duì)å„ç´š(jÃ)電壓回路的斷路器和主變壓器分é é™æŽ§ï¼Œå°(duì)ç›´æµå±æ¯ç·šé›»å£“,電表的時(shÃ)段費(fèi)率ç‰é€²(jìn)行é™èª¿(dià o)。為了ä¿è‰æ•´å€‹(gè)傳輸éŽ(guò)ç¨‹ä¸æ•¸(shù)據(jù)çš„å¯é 性,將三種å”(xié)è°çµ±(tÇ’ng)一æˆåŒä¸€ç¨®é€šè¨Šå”(xié)è°ï¼Œæœ¬æ–‡ä»¥å°(duì)多功能電表的控制為例說(shuÅ)明整個(gè)é …(xià ng)目的實(shÃ)ç¾(xià n)方法。將三種è£ç½®è‡ªèº«çš„æ•¸(shù)據(jù)幀(如電表å”(xié)è°ï¼šå¹€èµ·å§‹ç¬¦ï¼Œåœ°å€åŸŸï¼Œå¹€èµ·å§‹ç¬¦ï¼ŒæŽ§åˆ¶ç¢¼ï¼Œæ•¸(shù)據(jù)é•·(zhÇŽng)度域,數(shù)據(jù)åŸŸï¼Œæ ¡é©—(yà n)碼,çµ(jié)æŸç¬¦ï¼‰ä½œç‚ºModbuså”(xié)è°çš„æ•¸(shù)據(jù)單元,為æ¯ç¨®é€šè¨Šè£ç½®å¢žåŠ Modbuså”(xié)è°çš„地å€ã€åŠŸèƒ½å–®å…ƒï¼Œä»¥åŠModbus數(shù)據(jù)幀的CRCæ ¡é©—(yà n)å’Œçµ(jié)æŸç¬¦ã€‚如表(一)ã€è¡¨ï¼ˆäºŒï¼‰æ‰€ç¤ºï¼Œåˆ©ç”¨C8051F020單片機(jÄ«)完æˆç›£(jiÄn)控ä¸å¿ƒèˆ‡ä¸‰å€‹(gè)被控è£ç½®ä¹‹é–“數(shù)據(jù)幀的MODBUSå°è£å’Œè§£æ®¼ï¼ˆé‚„原為å„被控è£ç½®çš„æ•¸(shù)據(jù)幀)。利用çŸä¿¡æ¨¡å¡Šå®Œæˆæ•¸(shù)據(jù)çš„é (yuÇŽn)傳。數(shù)據(jù)æµå¦‚圖(一)所示:
  表(一) 多能電表645è¦(guÄ«)約數(shù)據(jù)å¹€æ ¼å¼

  表(二) å°è£MODBUSå”(xié)è°çš„電表數(shù)據(jù)å¹€
[align=center]

圖(一)數(shù)據(jù)æµç¤ºæ„圖[/align]
2.ä¸Šä½æ©Ÿ(jÄ«)通訊程åº
  利用DELPHI7.0çš„Server/Client Socket控件來(lái)實(shÃ)ç¾(xià n)ä¸Šä½æ©Ÿ(jÄ«)數(shù)據(jù)的發(fÄ)é€èˆ‡æŽ¥æ”¶ï¼Œç”±äºŽä¸Šä½æ©Ÿ(jÄ«)æ—¢è¦æŽ¥æ”¶æ•¸(shù)據(jù)也è¦ç™¼(fÄ)逿•¸(shù)據(jù)ï¼Œå› æ¤æ—¢è¦ä½œç‚ºæœå‹™(wù)器也è¦åšç‚ºå®¢æˆ¶ç«¯ã€‚Server Socketçš„å±¬æ€§ã€æ–¹æ³•åŠäº‹ä»¶è¨(shè)置如下:
  ServerSocket1.Port:=5000;
  //åµè½(tÄ«ng)端å£è™Ÿ(hà o)5000
  ServerSocket1.Active:=true;
  //打開(kÄi)æœå‹™(wù)器
  ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
  Begin
  //åµè½(tÄ«ng)5000號(hà o)端å£ï¼ŒæŽ¥æ”¶GSM/GPRS Modem傳來(lái)的數(shù)據(jù)。并調(dià o)用相應(yÄ«ng)çš„procedureå’Œfunction完æˆå°(duì)接收數(shù)據(jù)的處ç†åŠé¡¯ç¤ºã€‚
  end;
  ClientSocketçš„å±¬æ€§ã€æ–¹æ³•åŠäº‹ä»¶è¨(shè)置如下:
  Procedure TForm5.initButClick(Sender: TObject);
  begin
  ClientSocket1.Host:=218.195.248.91;
  //æœå‹™(wù)器的IP地å€
  form1.ClientSocket1.Port:=5000;
  form1.ClientSocket1.Open;
  //打開(kÄi)客戶端
  end;
  利用ClientSocket1.Socket.SendText();發(fÄ)é€å‘½ä»¤æ•¸(shù)據(jù)幀。
  //CRCæ ¡é©—(yà n)碼求解
  procedure TForm1.GetCRC(Data:array of byte;Nums:integer;var CRCH, CRCL: byte);
  var
  i,j:integer;
  CRC:integer;
  begin
  CRC:=$FFFF;
  for i:=0 to Nums-1 do
  begin
  CRC:=CRC xor ord(Data[i]);
  for j:=0 to 7 do
  begin
  if (CRC mod 2=1) then
  begin
  CRC:= CRC div 2;
  CRC:=$A001 xor CRC
  end
  else begin
  CRC:= CRC div 2;
  end;
  end;
  end;
  CRCH := crc mod 256;
  CRCL := crc div 256;
  end;
3.GSM/GPRS Modem è¨(shè)ç½®
  è¨(shè)ç½®GPRS çŸä¿¡æ¨¡å¡Šç‚ºé€?jìng)髂J剑狙芯ææçŽ«æ°–æ½œæœ¬â”˜èž?fù)欣科技的DTU模塊,利用它æä¾›çš„é…置工具(或者串å£èª¿(dià o)試助手)完æˆï¼ŒDTU模塊的è¨(shè)置如串å£è¨(shè)置,æœå‹™(wù)器IPåŠç«¯å£ï¼Œå¦‚圖(二)所示。
[align=center]

圖(二)GPRS模塊è¨(shè)ç½®[/align]
4.䏋使©Ÿ(jÄ«)程åº
ã€€ã€€ä¸‹ä½æ©Ÿ(jÄ«)采用C8051F020單片機(jÄ«)完æˆèˆ‡MODBUS相關(guÄn)çš„å”(xié)è°è½‰(zhuÇŽn)æ›ï¼Œ C8051F020æä¾›äº†å…©å€‹(gè)串å£UART0å’Œ UART1ï¼Œæœ¬ç ”ç©¶ä¸é‡‡ç”¨äº†4片C8051F020制æˆ4個(gè)å”(xié)è°è½‰(zhuÇŽn)æ›æ¨¡å¡Šï¼Œå…¶ä¸ä¸‰å€‹(gè)與被控å°(duì)象連接,UART1與被控å°(duì)象的RS485總線相連接,UART0通éŽ(guò)RS485與第4個(gè)å”(xié)è°è½‰(zhuÇŽn)æ›æ¨¡å¡ŠUART1連接。第四個(gè)å”(xié)è°è½‰(zhuÇŽn)æ›æ¨¡å¡Šçš„UART0與GSM/GPRS Modem相連。
ã€€ã€€ä¸‹ä½æ©Ÿ(jÄ«)部分程åºä»£ç¢¼ï¼š
  void UART0_Init (void)
  { //UART0_Initåˆå§‹åŒ–
  PCON |= 0x90;
  SCON0 = 0xd0;
  // SCON0:æ–¹å¼1 enable RX
  CKCON |= 0x20;
  T2CON = 0x30;
  //定時(shÃ)器2作為UART0波特率發(fÄ)生器
  RCAP2=65536-(SYSCLK/BAUDRATE0/32);
  T2=RCAP2; // 定時(shÃ)器24的計(jì)數(shù)åˆå€¼
  TR2 = 1;ï½
  void UART1_Init (void)
  {// UART10_Initåˆå§‹åŒ–
  SCON1 = 0x50;
  CKCON |= 0x40;
  T4CON = 0x30; //定時(shÃ)器4作為UART0波特率發(fÄ)生器
  RCAP4 =65536-(SYSCLK/BAUDRATE/32);
  T4 = RCAP4; // 定時(shÃ)器4的計(jì)數(shù)åˆå€¼
  T4CON |= 0x04;ï½
ã€€ã€€ä¸‹ä½æ©Ÿ(jÄ«)é‡‡ç”¨æŸ¥è¡¨çš„æ–¹å¼æ±‚è§£CRCæ ¡é©—(yà n)碼。
[align=center]

åœ–ï¼ˆä¸‰ï¼‰ä¸Šä½æ©Ÿ(jÄ«)控制å界é¢[/align]
5.çµ(jié)è«–
ã€€ã€€æœ¬ç ”ç©¶ä»¥MODBUSå”(xié)è°å°(duì)ä¸åŒé€šè¨Šæ ¼å¼æ•¸(shù)據(jù)幀的å°è£ï¼Œå¯¦(shÃ)ç¾(xià n)å°(duì)ä¸åŒè¢«æŽ§è£ç½®çš„分散控制ã€é›†ä¸ç®¡ç†ã€‚
åƒè€ƒæ–‡ç»(xià n)
  [1]鮑å¯é€²(jìn).C8051F單片機(jÄ«)原ç†åŠæ‡‰(yÄ«ng)用[M].北京:ä¸åœ‹(guó)電力出版社,2006.
  [2] è¶™è˜æ¿¤, 蘇彥è¯.Delphi 串å£é€šä¿¡æŠ€è¡“(shù)與工程實(shÃ)è¸[M]. 北京:人民郵電出版社,2004.