鎽� 瑕侊細浠嬬垂浜嗗€熷姪浜嶥elphi7.0 鐨凷erver/Client Socket閫氳▕鎺т欢锛屼互鍙奊SM/GPRS Modem鐭俊妯″锛岄噰鐢╩odbus閫氳▕鍗�(xi茅)璀板皪(du矛)涓夌浉涓夌窔闆诲紡瀛愬鍔熻兘闆昏〃銆佹暩(sh霉)瀛楀紡寤狅紙鎵€锛夌敤璁婁繚璀�(h霉)娓�(c猫)鎺ц缃互鍙婄洿娴佸睆瀵�(sh铆)鐝�(xi脿n)閬欐脯(c猫)銆侀仚淇�銆侀仚鎺�銆侀仚瑾�(di脿o)銆傚埄鐢–8051F020鍠墖姗�(j墨)瀹屾垚涓嶅悓閫氳▕鍗�(xi茅)璀版暩(sh霉)鎿�(j霉)鐨凪ODBUS鍗�(xi茅)璀板皝瑁濊垏瑙e寘銆傛湰鏂囩ゥ杩伴€氳▕閬庣▼鐨勫(sh铆)鐝�(xi脿n)锛岀郸鍑轰簡瑷�(sh猫)瑷�(j矛)绋嬪簭銆�
闂�(gu膩n)閸佃锛�modbus鍗�(xi茅)璀�,GSM/GPRS Modem, C8051F020锛孲erver/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猫)鍌宠几閬庣▼涓暩(sh霉)鎿�(j霉)鐨勫彲闈犳€�锛屽皣涓夌ó鍗�(xi茅)璀扮当(t菕ng)涓€鎴愬悓涓€绋€氳▕鍗�(xi茅)璀�锛屾湰鏂囦互灏�(du矛)澶氬姛鑳介浕琛ㄧ殑鎺у埗鐐轰緥瑾槑鏁村€�(g猫)闋�(xi脿ng)鐩殑瀵�(sh铆)鐝�(xi脿n)鏂规硶銆傚皣涓夌ó瑁濈疆鑷韩鐨勬暩(sh霉)鎿�(j霉)骞€锛堝闆昏〃鍗�(xi茅)璀帮細骞€璧峰绗�锛屽湴鍧€鍩燂紝骞€璧峰绗�锛屾帶鍒剁⒓锛屾暩(sh霉)鎿�(j霉)闀�(zh菐ng)搴﹀煙锛屾暩(sh霉)鎿�(j霉)鍩�锛屾牎椹�(y脿n)纰�锛岀祼(ji茅)鏉熺锛変綔鐐篗odbus鍗�(xi茅)璀扮殑鏁�(sh霉)鎿�(j霉)鍠厓锛岀偤姣忕ó閫氳▕瑁濈疆澧炲姞Modbus鍗�(xi茅)璀扮殑鍦板潃銆佸姛鑳藉柈鍏�锛屼互鍙奙odbus鏁�(sh霉)鎿�(j霉)骞€鐨凜RC鏍¢(y脿n)鍜岀祼(ji茅)鏉熺銆傚琛紙涓€锛�銆佽〃锛堜簩锛夋墍绀猴紝鍒╃敤C8051F020鍠墖姗�(j墨)瀹屾垚鐩�(ji膩n)鎺т腑蹇冭垏涓夊€�(g猫)琚帶瑁濈疆涔嬮枔鏁�(sh霉)鎿�(j霉)骞€鐨凪ODBUS灏佽鍜岃В娈硷紙閭勫師鐐哄悇琚帶瑁濈疆鐨勬暩(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鐨凷erver/Client Socket鎺т欢渚嗗(sh铆)鐝�(xi脿n)涓婁綅姗�(j墨)鏁�(sh霉)鎿�(j霉)鐨勭櫦(f膩)閫佽垏鎺ユ敹锛岀敱浜庝笂浣嶆(j墨)鏃㈣鎺ユ敹鏁�(sh霉)鎿�(j霉)涔熻鐧�(f膩)閫佹暩(sh霉)鎿�(j霉)锛屽洜姝ゆ棦瑕佷綔鐐烘湇鍕�(w霉)鍣ㄤ篃瑕佸仛鐐哄鎴剁銆係erver Socket鐨勫爆鎬с€佹柟娉曞強浜嬩欢瑷�(sh猫)缃涓嬶細
銆€銆€ServerSocket1.Port:=5000;
銆€銆€//鍋佃伣绔彛铏�(h脿o)5000
銆€銆€ServerSocket1.Active:=true;
銆€銆€//鎵撻枊鏈嶅嫏(w霉)鍣�
銆€銆€ServerSocket1ClientRead锛圫ender: TObject;
銆€銆€Socket: TCustomWinSocket锛�;
銆€銆€Begin
銆€銆€//鍋佃伣5000铏�(h脿o)绔彛锛屾帴鏀禛SM/GPRS Modem鍌充締鐨勬暩(sh霉)鎿�(j霉)銆傚苟瑾�(di脿o)鐢ㄧ浉鎳�(y墨ng)鐨刾rocedure鍜宖unction瀹屾垚灏�(du矛)鎺ユ敹鏁�(sh霉)鎿�(j霉)鐨勮檿鐞嗗強椤ず銆�
銆€銆€end;
銆€銆€ClientSocket鐨勫爆鎬�銆佹柟娉曞強浜嬩欢瑷�(sh猫)缃涓嬶細
銆€銆€Procedure TForm5.initButClick锛圫ender: TObject锛�;
銆€銆€begin
銆€銆€ClientSocket1.Host:=218.195.248.91;
銆€銆€//鏈嶅嫏(w霉)鍣ㄧ殑IP鍦板潃
銆€銆€form1.ClientSocket1.Port:=5000;
銆€銆€form1.ClientSocket1.Open;
銆€銆€//鎵撻枊瀹㈡埗绔�
銆€銆€end;
銆€銆€鍒╃敤ClientSocket1.Socket.SendText锛堬級;鐧�(f膩)閫佸懡浠ゆ暩(sh霉)鎿�(j霉)骞€銆�
銆€銆€//CRC鏍¢(y脿n)纰兼眰瑙�
銆€銆€procedure TForm1.GetCRC锛圖ata: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锛圖ata[i]锛�;
銆€銆€for j:=0 to 7 do
銆€銆€begin
銆€銆€if 锛圕RC 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猫)缃瓽PRS 鐭俊妯″鐐洪€�?j矛ng)楂傦吉?锛屾湰鐮旂┒涓敤鐨勬槸鍖椾含鍢�?f霉)娆g鎶€鐨凞TU妯″锛屽埄鐢ㄥ畠鎻愪緵鐨勯厤缃伐鍏凤紙鎴栬€呬覆鍙h(di脿o)瑭﹀姪鎵嬶級瀹屾垚锛孌TU妯″鐨勮ō(sh猫)缃涓插彛瑷�(sh猫)缃�锛屾湇鍕�(w霉)鍣↖P鍙婄鍙o紝濡傚湒锛堜簩锛夋墍绀�銆�
[align=center]

鍦栵紙浜岋級GPRS妯″瑷�(sh猫)缃甗/align]
4.涓嬩綅姗�(j墨)绋嬪簭
銆€銆€涓嬩綅姗�(j墨)閲囩敤C8051F020鍠墖姗�(j墨)瀹屾垚鑸嘙ODBUS鐩搁棞(gu膩n)鐨勫崝(xi茅)璀拌綁(zhu菐n)鎻�锛� C8051F020鎻愪緵浜嗗叐鍊�(g猫)涓插彛UART0鍜� UART1锛屾湰鐮旂┒涓噰鐢ㄤ簡4鐗嘋8051F020鍒舵垚4鍊�(g猫)鍗�(xi茅)璀拌綁(zhu菐n)鎻涙ā濉�锛屽叾涓笁鍊�(g猫)鑸囪鎺у皪(du矛)璞¢€f帴锛孶ART1鑸囪鎺у皪(du矛)璞$殑RS485绺界窔鐩搁€f帴锛孶ART0閫氶亷RS485鑸囩4鍊�(g猫)鍗�(xi茅)璀拌綁(zhu菐n)鎻涙ā濉奤ART1閫f帴銆傜鍥涘€�(g猫)鍗�(xi茅)璀拌綁(zhu菐n)鎻涙ā濉婄殑UART0鑸嘒SM/GPRS Modem鐩搁€c€�
銆€銆€涓嬩綅姗�(j墨)閮ㄥ垎绋嬪簭浠g⒓锛�
銆€銆€void UART0_Init 锛坴oid锛�
銆€?銆�?//UART0_Init鍒濆鍖�
銆€銆€PCON |= 0x90;
銆€銆€SCON0 = 0xd0;
銆€銆€// SCON0:鏂瑰紡1 enable RX
銆€銆€CKCON |= 0x20;
銆€銆€T2CON = 0x30;
銆€銆€//瀹氭檪(sh铆)鍣�2浣滅偤UART0娉㈢壒鐜囩櫦(f膩)鐢熷櫒
銆€銆€RCAP2=65536-锛圫YSCLK/BAUDRATE0/32锛�;
銆€銆€T2=RCAP2; // 瀹氭檪(sh铆)鍣�24鐨勮▓(j矛)鏁�(sh霉)鍒濆€�
銆€銆€TR2 = 1;锝�
銆€銆€void UART1_Init 锛坴oid锛�
銆€銆€锝�// UART10_Init鍒濆鍖�
銆€銆€SCON1 = 0x50;
銆€銆€CKCON |= 0x40;
銆€銆€T4CON = 0x30; //瀹氭檪(sh铆)鍣�4浣滅偤UART0娉㈢壒鐜囩櫦(f膩)鐢熷櫒
銆€銆€RCAP4 =65536-锛圫YSCLK/BAUDRATE/32锛�;
銆€銆€T4 = RCAP4; // 瀹氭檪(sh铆)鍣�4鐨勮▓(j矛)鏁�(sh霉)鍒濆€�
銆€銆€T4CON |= 0x04;锝�
銆€銆€涓嬩綅姗�(j墨)閲囩敤鏌ヨ〃鐨勬柟寮忔眰瑙RC鏍¢(y脿n)纰�銆�
[align=center]

鍦栵紙涓夛級涓婁綅姗�(j墨)鎺у埗瀛愮晫闈/align]
5.绲�(ji茅)璜�
銆€銆€鏈爺绌朵互MODBUS鍗�(xi茅)璀板皪(du矛)涓嶅悓閫氳▕鏍煎紡鏁�(sh霉)鎿�(j霉)骞€鐨勫皝瑁濓紝瀵�(sh铆)鐝�(xi脿n)灏�(du矛)涓嶅悓琚帶瑁濈疆鐨勫垎鏁f帶鍒�銆侀泦涓鐞�銆�
鍙冭€冩枃鐛�(xi脿n)
銆€銆€[1]楫戝彲閫�(j矛n).C8051F鍠墖姗�(j墨)鍘熺悊鍙婃噳(y墨ng)鐢╗M].鍖椾含:涓湅(gu贸)闆诲姏鍑虹増绀�,2006.
銆€銆€[2] 瓒欒槶婵�, 铇囧渐鑿�.Delphi 涓插彛閫氫俊鎶€琛�(sh霉)鑸囧伐绋嬪(sh铆)韪怺M]. 鍖椾含:浜烘皯閮甸浕鍑虹増绀�,2004.