




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Modbus协议基本知识及学习示例Modbus协议包括ASCII. RTU、TCP等,并没有规定物理层。协议定义了控制器能够认识和使用的消息 结构,而不管它们是经过何种网络进行通倍的。标准的Modicou控制器使用RS232C实现串彳J:的Modbusa Modbus的ASCII. RTU协议规定了消息、 数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式,Mas血端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave ®的数据,实现双向读写。Modbus协议需耍对数据进行校验,另外,M
2、odbus采用主从方式定时收发数据,在实际使用中如果某Slaw 站点断开后(如故障或关机),Master端可以诊断出來,而当故障修复后,网络乂可口动接通。囲此,Modbus协议的可靠性较好。ASCII协议和RTU协议进彳f的比较:协议开始标记结束标记校验ASCII :(冒号)CRXFLRCRTU 无 无CRC 高传输效率程序处理低 直观,简单,易调试 不直观,稍复杂LRC校验:LRC域是一个包含一个8位二进制值的字节。LRC值由传输设备來计算并放到消息帧中,接收 设备在接收消息的过程中计算LRC,并将它和接收到消息屮LRC域中的值比较,如果两值不等,说明仃错谋。LRC校验比较简单,它在ASCI
3、I协议 中使用,检测了消息域中除开始的冒号及结束的冋车换行号外的内容。它仅仅是把每一个需耍传输的数据按字节叠加后取反加1即可。CRC校验:CRC域是两个字节,包含一 16位的二进制値它由传输设备计算后加入到消息中。接收设备 重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有谋。1、读可读写数字战寄存器(线圈状态):计算机发送命令:设备地址命令号01起始寄器地址高8位低8位读取的寄存器数高8位低8位 CRC校验的低8位CRC校验的高8位例:100100130025CRC 低CRC 高意义如下:<1>设备地址:在一个485总线上可以挂接多个设备,此处的仗备地址
4、衷示想和哪-个设备通讯。例子屮为想 和16号(十进制的16是十六进制的10)通讯。<2>命令号01:读取数字量的命令号固定为01。<3>起始地址高8位、低8位:衷示想读取的开关疏的起始地址(起始地址为0)。比如例了中的起始地址为19。 <4>寄存器数高8位、低8位:表示从起始地址开始读多少个开关鼠。例子中为37个开关杲。<5>CRC校验:是从开头一肖校验到此之前。在此协议的最后再作介绍。此处需耍注意,CRC校验在命令中的 高低字节的顺序和其他的相反。设备响应:设备地址命令号01 ig冋的字节个数数据1数据2.数据nCRC校验的低8位CRC校验的
5、高8位例:1001 05CD6BB20E 1BCRC 低CRC W意义如下:<1>设备地址和命令号和上而的相同。<2>返冋的字节个数:表示数据的字节个数,也就是数据1, 2.中的n的值。<3>数据l.n:由每一个数据是一个8位的数,所以每一个数据表示8个开关杲的值,每一位为0表示対应 的开关断开,为1表示闭合。比如例子屮,表示20号(索引号为19)开关闭介,21号断开,22闭介,23闭介,24断开,25断开,26闭合,27闭介. 如果询问的开关昴不是8的整倍数,那么最后一个字节的高位部分无意义,置为0。<4>CRC校验同上。2、读只可读数字量寄存
6、器(输入状态):和读取线圈状态类似,只是第二个字节的命令号不再是1 Iflj是2。3、写数字最(线圈状态):计算机发送命令:设备地址命令号05需下置的寄存器地址高8位低8位卜置的数据高8位低8位 CRC校验的低8位CRC校验的高8位例:10 05 00 AC FF 00 CRC 低CRC 高意义如下:<1>设备地址和上而的相同。<2>命令号:写数字最的命令号固定为05。<3>需卜置的寄存器地址高8位,低8位:表明了需耍卜置的开关的地址。<4>卜買的数据高8位,低8位:衣明需耍卜買的开关帚的状态。例子中为把该开关闭合。注意,此处只可以 是FF 00
7、表示闭合0000表示断开,其他数值非法。<5>注意此命令一条只能卜置一个开关最的状态。设备响应:如果成功把计算机发送的命令原样返回,否则不响应。4、读可读写模拟最寄存器(保持寄存器):计算机发送命令:设备地址命令号03起始寄存器地址高8位低8位读取的寄存器数高8位低8位 CRC校验的低8位CRC校验的高8位例:1003006B0003CRC 低CRC 高意义如下:<1>设备地址和上面的和同。<2>命令号:读模拟鼠的命令号固定为03。<3>起始地址高8位、低8位:表示想读取的模拟帚的起始地址(起始地址为0)。比如例子中的起始地址为107。 <
8、4>寄存器数离8位、低8位:农示从起始地址开始读女少个模拟磺。例子中为3个模拟蟻。注意,在返冋的 信息中一个模拟量需要返回两个字节设备响W:设备地址命令03返回的字卩个数数据1数据2.数据nCRC校验的低8 ft CRC校验的 高8位例:100306022B00000064CRC 低CRC 高意义如下:<1>设备地址和命令号和上面的相同。<2>返回的字节个数:表示数据的字节个数,也就是数据1, 2.中的n的值。例子中返回了 3个模拟量的数据, 因为一个模拟R需耍2个字节所以共6个字节。<3>数据其中ft据1数据2分别是第1个模拟fit的高8位和低8位,
9、数据3数据4是第2个模拟量的 高8位和低8位,以此类推。例子中返回的值分别是555, 0, 100.<4>CRC校验同卜,5、读只可读模拟最寄存器(输入寄存器):和读取保心:寄器类似,只是第二个字节的命令号不再是2U是4。6、写单个模拟量寄存器(保持寄存器):计算机发送命令:设备地址命令号06需下置的寄存器地址高8位低8位F置的数据高8位低8位 CRC校验的低8位CRC校验的高8位例:10 06 00 01 00 03 CRC 低CRC 高意义如下:<1>设备地址和上面的相同。<2>命令号:写模拟最的命令号固定为06。<3>需下置的寄存器地址高8
10、位,低8位:衷明了需耍下宣的模拟駁寄存器的地址。<4>下置的数据高8位,低8位:表明需要卜置的模拟起数据。比如例子中就把1号寄存器的值设为3。<5>注意此命令一条只能下置一个模拟最的状态。设备响应:如果成功把计算机发送的命令原样返回,否则不响应。DELPHI SPCOMM温控器Modbus协议通讯设计QQ:64782489 陈建光unit Uiutl;mteiface usesWindows, Messages, SysUtils, Variants. Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, SPCo
11、imn, ExtCtils,StrUtils;typeTFonnl =class(TForm)Memol: TMemo;Buttonl: TButton;Button2: TButton;Button3: TButton;ComboBoxl: TComboBox;Label2: TLabel;GroupBoxl: TGroupBox;Label3: TLabel;ComboBox2: TComboBox;Memo2: TMemo;GroupBox2: TGioupBox;Button4: TButton;Buttons: TButton;Label5: TLabel;Button6: TBut
12、ton;Label 1: TLabel;Label6: TLabel;Label4: TLabel;Label7: TLabel;ComboBox3: TComboBox;ComboBox4: TComboBox;ComboBox5: TComboBox;Comnil: TComm;GroupBox3: TGroupBox;Panel 1: TPanel;Paiiel2: TPanel;Labels: TLabel;Label9: TLabel;LabellO: TLabel;Labelll: TLabel;Label 12: TLabel;Label 13: TLabel;Label 15:
13、 TLabel;PaiieB: TPanel;Paiiel4: TPanel;Button7: TButton;Button9: TButton;ButtonlO: TButton;Timei l: TTimer;Label 14: TLabel;Paiiel5: TPanel;Labell6: TLabel;Editl: TEdit;Label 17: TLabel;Edit2: TEdit;Label 18: TLabel;Edit3: TEdit;Label 19: TLabel;Edit4: TEdit;Edit5: TEdit;Label20: TLabel;Label21: TLa
14、bel;Edit6: TEdit;Buttons: TButton;Label22: TLabel;Edit7: TEdit;Buttonl2: TButton;EditS: TEdit;Label23: TLabel;Edit9: TEdit;Label25: TLabel;Paiiel6: TPanel;Edit 10: TEdit;Label24: TLabel;Editll:TEdit;Label26: TLabel;Label27: TLabel;Buttonll: TButton;Button】3: TButton;Tmier2: TTuner;procedure SetConiP
15、ortQ;procedure Button 1 Click(Sender: TObject);proceduie Button2Click(Sender: TObject);piocedure ConunlReceiveData(Sender: TObject; Buffer: Pomtrr;BufferLength: Word);procedure Button3Click(Sender: TObject);procedure FoiinCieate(Sender: TObject);proceduie Button4Click(Sender: TObject);procedure Butt
16、on5Click(Sender: TObject);procedure Button6Click(Sender: TObject);procedure TmierlTuner(Sender: TObject);procedure Button7Ciick(Sender: TObject);piocedure Button8Click(Sender: TObject);procedure Button9Click(Sender: TObject);procedure ButtonlOClick(Sender: TObject);pioceduie Buttonl lClick(Sender: T
17、Object);procedure Button 13Click(Sendei: TObject);procedure Tuner2Tuner(Sender: TObject);/fiinction CalCRC 16(AData:anay of Byie;AStait,AEnd:Iiitcger):Woid;/function returnCRC 16(vSti 1: Strmg): Suing;private Private declaiations public Public declarations end;var定义全丿字符串定义全局可变7节数组Forml: TFomil; view
18、stimg:stiiug; ibufsbufaiiay of byte;当前査询字符串Cui_Qiy_Str: array1.32 of strmg;Bui_Qiy_StLTnir_Qry_Str:array 1 .32 of string; Btn_Rtn_Sti;Tmi_Rtn_Str:airay 1.32 of stimg;按钮、定时器返回字符串数组按钮、定时器返回字符串数组cur-wd,Cxir_wd_p.secwd,Cxir_Mode.Open_sta:array 1.32 ofuiteger; 设置当前温度、设克温度、开关状态数 组unplementation SR .dfin/=
19、此处用自动获取系统的串丨丨数冃以及名称,调用api 数实现相关功能pioceduie EnumConiPorts(Ports: TStiings);varKevHandle: HKEY;EnCode, Index: Integer;ValueName, Data: stimg;ValueLen, DataLen, ValueTvpe: DWORD;TmpPorts: TStimgList;beginEnCode :. RegOpenKeyEx(HKE Y_LOC AL_MACHINE HARDWARE DEVICEMAP SERIALCOMM;0,KEY_READ.KevHandle);ifE
20、irCode o ERROR_SUCCESS thenExit; / raise ECoinPoit.Cieate(CErioi RegEnoi. EnCode); TmpPorts := TStimgList.Cieate;tryIndex := 0;repeatValueLen := 256;DataLen := 256;SetLength(ValueNaiue, ValueLen);SetLengtli(Data, DataLen);EnCode := RegEnumValue(KevHandle,Index.PChai(ValueName),Carduial(ValueLen),nil
21、、ValueTvpe,PBytc(PChai(Data),DaraLen);if EnCode = ERROR SUCCESS thenbegm SetLength(Data, DataLen); TmpPorts.Add(Data); Inc(Index);endelseif EnCode o ERROR_NO_MORE_ITEMS tlienexit; /raise EComPort.Cieate(CEiror_RegEiror, EirCode); until (ErrCode o ERROR.SUCCESS);TmpPorts.Sort;Poits.Assigii(TmpPorts);
22、filiallyRegCloseKey(KevHandle);TmpPons.Fiee;end;end;替换字符串中的空格函数function Tiiniplace(sti: stimg): string;unp:string;pInteger;begmtmp := Tnm(str);while Pos(* tmp)>0 dobeginp:- Pos(* tmp);tmp :=C opy(tmp, 1 ,p-l )+Copy(tmp.p+1 ,Length(tnip)-p);end;Result:tmp;字符串转成16进制代码function strToHexStr(str:stiing
23、):strmg; vai c:chai;ss:stnng;rmteger;beginwlule suo,f do begmc:=strl;ss:=ss+fomiat(,%Oxord(c); delete(su;l ,1);end;stnohexStr:= ss;end;/16进制字符串转换成字符串 function HexStrToSti(const S:string):string;vartilnteger;ts:suing;M.Code: Integer;begint:-l;Result:-*;wlule t<=Lengtli(S) dobegin /xlh 2006.10.21wh
24、ile (t<-Length(S) and (not (St indomc(t);if (t+l>Length(S)or(not (St+1 m 0?9,A,./Fta,./f) then ts:=$'+Stelsets:=$f+St+St+l;Val(tsMCode);if Code=0 tlienResult:-Result+Clu(M);inc 魚 2);替换字符串函数fiincuon replaciiig(s.souice,target:stiing):stiing; var site,SuLen:mteger;beginsource在S中出现的位胃 site: =
25、pos(souice.s);source的长度StrLen:=length(source);删除source字符串delete(s,site,StrLen);插入target字符串到S中 insert(target9s,site);返回新串feplacuig:-s;end;/xxxxxxxxxxxxxxxxxxxxxxxxxx/ CalCRC16 用 J:计算 Modbus RTU 的 CRC16/多项式公式为X16+X15+X2+1/xxxxxxxxxxxxxxxxxxxxxxxxxxfunction CalCRC 16(AData:array of Byte;AStan,AEnd:Iiit
26、eger):Word;constGENP=SAOOi; 多项式公式 X16+X15+X2+1 (1100 0000 0000 0101 )cicAVord;1: Integer;tmpBvte;pioceduie CalOneByte(AByte:Byte); 计算 1 个字节的校验码j Integer;将数据与CRC寄存器的低8位进彳j异或 对每一位进行校验begm取出最低位寄存器向右移一位将最高位置0检测移出的位,如果为1那么与多项式异或cic:-crc xoi AByte; for j:=0 to 7 do begmtnip:=crc and 1; crc:-cic shi 1; crc
27、:=crc and S7FFF;if tmp=l then crc:=cic xoi GENP; crc:-cic and SFFFF;end;end;begincrc:-$FFFF;for i:=AStait to AEnd do将余数设定为FFFF对每一个字节进行校验CalOneByte(ADatai);Result:=cic;end;function returnCRC 16(vStr 1: Strmg): String;vaiData:array0.255 of Byte;1 J,Count Integer;Res:Word;ResStristimg.szData:strmg;begi
28、nszData:-Tiunphce(vStrl);读入欲校验的字符串Count:=round(Length(Timiplace(vSti l )/2); /读入需耍计算的字符巾长度1-1;Jffoi j:-0 to Count-1 dobegmif (i mod 2)=0 tlien 毎2个字符放入一个字节中1:=1+1;if i>-Lengtli(szData) thenexit;DatafjlStrToIiitfS'+copyCszDataa); 取出字符并转换为 16 进制数E=l+1;end;/sliovmessage(inttosti (Count-1);Res:=Ca
29、lCRC 16(Data,Low(Data),Count-l);ResStr:=bitToHex(Res,4);Result:=RightStr(ResStr,2)+, ,+LeftStr(ResStr,2);/两个字节对调*h=设置串 U =proceduie TFoiml .SetConiPortQ;begm获取计算机中的串丨I列表,并设置当前设备的串11号EnumCoinPorts(ComboBoxl .Items);if ComboBoxl .Items.Count>0 thenbegintryComboBoxl.IteinIndex:=O; /ComboBoxl.Items.C
30、ount-1;Comnil .CoinmName:-ComboBoxl .Text;Conun 1 .BaudRate:=StnoIiit(ComboBox2.Text); 设置串 11 的为前波特率Coniml .StopCoimn;打开之前先关闭串口Comml .StaitComm;/Labell.Caption:-*f|« 11 状态:'+ComboBoxl.Text+*【1 己打开: exceptLabel 1.Caption :='状态:+ComboBoxl.Text+'串 I I打开失败';end;endelsebegmLabel 1.Ca
31、ption:- I* 11 状态:'+ComboBoxl.Text+,?M I ILA 关闭:end;/showmessage(mttostr(ComboBoxConiList.Items.Count);end;打开串= = = procedure TFomil .ButtonlClick(Sender: TObject);begmtiyConiml.BaudRate:=StnoInt(ComboBox2.Text); 设賈 *K1 的前波特率Coniinl .CoiiunName :=ComboBoxl .Text;if ComboBox3 .TexKEven(偶),then设直奇偶
32、校验Comnil .Pai ity:-Even;if ComboBox3 .Text=*Mark(标记 J thenConiml .Panty:=Maik;if ComboBox3 .Text=,None(无) thenComml .Paiity:-None;if ComboBox3.Text-Odd(奇,thenConiml .Parity :=Odd;if ComboBox3.Text-Space( 格 J tlienComini .Paiiry:=Space;if ComboBox4.Text-,5, then设宣数据位Comini.BvteSize:-_5; 设置数据位if Combo
33、Box4.Text-6* thenComini.BvteSize:=_6; 设曾数据位if ComboBox4 .Text-*7* thenConiml .BvteSize:=_7; 设置数据位if ComboBox4.Text-8* thenComin 1 .BvteSize:=_8; /设賢数据位if ComboBox5.text-* 1' then设宣停止位Comml SiopBits=_l;if ComboBox5.text- 1.51 thenCoinnil .StopBits:=_l_5;if ComboBox5text2 thenConiml .StopBits:=_2;
34、comm 1 .StopConun;conunl .StanCoimn;Label 1.Caption:-'状态:,+ComboBoxl.Text+,«'|« I I l!开始捕获, exceptLabel 1.Caption :='状态:'+ComboBoxl.Text+'串 11 打开失败 end;/Label 1 Caption: -mttoS ti (C 01111111 .CoiniiiPort);/Label 1 .Caption:=InttoStr(Conun 1 .BaudRate);end;关闭串1|piocedui
35、e TFoiml .Buttoii2Click(Sender: TObject);beginconirnl .StopConun;Label 1.Caption :状态: omboBoxl.Text+H I I lL停止捕获:/= 设肾串I I号 pioceduie TFoiml .FoiinCieate(Sender: TObject); begmSetConiPonQ;end;fl定义发送数据过程procedure senddata;i:mteger;conunflg: boolean;begmviewsuuig:=M;coimnflg:-tnie;/showmessage(mttostr
36、(higli(sbuf);for i:=l to high(sbuf) dobegmif not Foiml .coniml .wnteconmidata(sbufi, 1) thenbeginconmiflg:=false;break;end;发送时字节间的延时sleep(l);vieustimg:=viewstimg+inttoliex(sbufi52)+,:if uot cominflg tlien messngedlgC 发送 失败 ?"anteiror,mbyes.O);end;viewsttuig:=,发送'+viewstnng;Foiml.memo Ll mes
37、.add(viewsuing);/Forml.memol.lines.add(M);end;A =串口发送数据= proceduie sentcustom(SqiStr:suing);var strl 1: stung;ij,k: integer;tnipstr: stung;beginif SqrStr<>H thenbeginsti 11:-Tiiniplace(SqrSu); 替换字符串中的所有空格 i:=round(length(strll)/2);获得字符串长度,除2取整后加1/showmessage(inttosti(i);setlength(sbuf,i+1);重新设
38、定发送数纽.范围/showmessage(inttostr(high(sbuf);foi j:=l to 1 dobegmtmpstr:=copv(strl 1 j*2-l,2);/showmessage(tnipstr);if tiupstr-" thentmpstrTO:sbufIj:=byte(suiOHit(,$t+tmpstr); 将变危转换为 byte 数组endelsebegin setlength(sbuf.9);sbuff 1 :-byte($O 1);sbuf2 :=byte($O3);sbufl 3:=bvte(SOO);sbuf4 :=byte($OO);sb
39、uf5 :=byte($OO);sbuf!6 :-byte($05);sbuf7 :-byte($85);sbufI8:=byte($C9); end;senddata;接收数据= procedure TFoiml.CominlReceiveData(Sender: TObject; Buffer: Pointer; BufleiLength: Word);type ss=aii ay 1. 8192of chai ;varstrl:Ass;rmteger;s:airay0.8192 of chai ;n:mteger; string 1: string;begmsul:=Buffer;for
40、 i:=0 to 9 dosi:=clu(48+i);foi i:-10 to 15 dosi:-chr(55+i);suing lh;for i:=l to bufferlength dobegmn:-ord(strlAi);suing 1 :=stimgl+sn div 16+sn mod 16+1:/除取整 除取余/listboxl.Items.add(接收* + sn div 16+sn mod 16);end;转换字符串完毕后,清空bufferZeioMemoiy(bufIei,0);根据过滤状态,调用replacing 数替换字符巾 iflabel5.Caption='状态
41、:已停止过滤'tlien begmsuing 1 :-string 1;endelsebegmfor i:=0 to memo2.Lines.CounM dobeginstring 1:-replacmg(striiig 15trim(memo2 .Lines.Stringsi)9vt);end;strmgl :=ieplacing(stnngl;82 71 14 01 08 H);sumgl:-replacmg(sumgl;81 33 00 00 09 80 33 00 00 08 ;”); end;if tnin(sumgl) oH tlienbegmmemo 1 .Lines.A
42、ddf 接收+stnngl);Tnu_Rtn_Strl:= strmglend;if timi(strmgl) oH thenbegmmemo 1 .Lines. Add('接 收+stringl);for i:-l to 16 dobeginifTmr.Qiy_Stri=01 03 00 00 00 05* thenbegmTmi_Rm_Su 1:- string 1;Tmi_Qry_Sui:endelseend;end;_=清除 memo 文本框中的数据 procedure TFomil .Button3Click(Sender: TObject);begmmemo 1.Clear
43、;end;procedure TFomil .Button4Click(Sender: TObject);begmlabel5.Caption:状态:已开始过滤,procedure TFonnl .Button5Click(Sender: TObject); begmlabel5.Caption:=状态:已停止过滤end;pioceduie TFonnl .Button6Click(Sender: TObject); beginmemo2.Clear;end;査询状态函数 function Return_Sta_Sting(SqrStr:strmg): String;i:mteger;Cur_
44、CRC 16Str.End_Sqr_Str:stiing;begmfor i:-l to 32 do循环地址码132,将査询返回值保存至数组begmif stnouit(copy(Tnmplace(SqrSti). 1,2)=1 thenbegmCiu_CRC 16SU -retuinCRC 16(SqrSu);计算 CRC16 校验码End_Sqr_Sti:=SqrStr +* ,+Cui_CRC 16Str;最终杳询字符出sentcu stom(End_Sqr_Str);发送査询指令Result: =End_Sqi_Strend;定时返回状态值 procedure TFonnl.Tunei
45、 lTmier(Sender: TObject);i.Ad_id integer;Tmr_Qry_Su 1:string;Tmi_Rtn_Str 1 :stnng;循环用整数变杲定时器状态何询字符串变fft 泄时器状态返回字符串变®beginTmr_QiY_Sti l=01 03 00 00 00 05: 杳询字符串Ad-id-StiToIiitCSEditl .Text); 査询字符串地址码tryFor i:=l to 16 dobegmif i-Ad_id then为状态代询字符串数组赋值beginTnir_Qiy_Stri:=Tnir_Qry_Su 1;Return_Sta_S
46、ting(Tmi_Qry_Str 1);/执行状态查询Tnu_Rtn_Str 1 :=Timiplace(Tmi_Rrn_Str1); 状态返冋值/label2&capUoir=Tmi_Rm_SMl;thenif (Tnu_Rtn_Sti 1 o,f) and (copy(Tmr_Rm_Strl.5,2尸QA') and (iound(length(Tmi_Rtn_Str 1 )/2)=15) beginEd”7(exrTmi_RUi_Stil;Label8.Caption:=IntToSu(tniiic(StrToIntC$t+copy(Tmr_Rtn_Sul,7.4)/10
47、); 当前温度Edit8.Text:=Label8.Caption;Label9.CaptioiL-,.,+IntToStr(StiToIiit(,S,+copy(TnH_Rtn_StilJ.4)-(ti'unc(StiToIiit(,S,+copy(Tnu_Rtn_Stil,7,4)/10) *10);Label 13.Caption:=IntToStr(trunc(StrToInt(,S-copy(Tnu_Rtn_Strl, 11.4)/10); 设置温度Edit9.Text:-Label 13 .Caption;模式if StrToInt($+copy(Tmr_Rtn_Str 1
48、,15,4)尸 1 thenbegmLabel 14 .Visible:-false;Label27.Visible:=ti-ue;Editll.Text:=Or;endelsebeginLabel 14. Visible:=tme;Label27.Visible:=false;Editll.Texti-W;end;当前end;exceptif SuToIiit(,S,+copy(Tiuuplace(Tnu_Rtn_Sul),23,4)-8l then beginPanel6.Visible:=folse;EditlO.Text:=Or;endelsebeginPaiiel6. Visible
49、 :=tme;EditlO.Text:-,OO,;end;当前状态endend;开关按钮=procedure TFomil .Button7Click(Sender: TObject);ijd_id:integei;Btn_Qry_Strl:suing;begmBtn.Qiy.Strl =01 06 00 04 00 00; 关闭 Ad.id-SuToIntCS'+Editl .Text); /Ji ifij 字符串地址码 for i:=l to 16 dobegmif i-Ad_id thenbegmif Editl0.Text=,01r thenbeginEtn_Qry_Sti 11 06 00 04 00 00: 关闭Btn_Qry_Su i :=Btn_Qry_Su4;Edit6.Text:=Renini_Sta-Sting(Btn_Qiy_Strl);打 开EditlO.Text:=OO,;Editl.Text:-f0r;地址码EdH2.Text06:功能码EdM3.Text=0004: 寄存器地址Edit4.Text:-,0000,; 数据(关闭) Edit5.Text:=Btn_Qrv_Str 1;endelsebegmBtn_Qry_StTlH01 06 00 04 00 Of; 关闭Btii_Qry_Stii :=Bt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- YY 0459-2025外科植入物丙烯酸类树脂骨水泥
- 新疆北庭希望环保科技有限公司吉木萨尔县25万吨-年危废处理利用项目(2)环评报告
- 某著名企业DeepSeek系列09DeepSeek政务应用场景与解决方案
- 工业废水处理与绿色工艺技术
- 工业废气治理技术与方法探讨
- 工业大数据的分析与应用
- 工业建筑设计及自动化机电系统
- 工业污染防治与绿色制造技术分析
- 工业网络通信协议与技术标准
- 工业生产中的设备优化管理
- 2025年合肥城建发展股份有限公司及所属子公司招聘17人(二批次)笔试参考题库附带答案详解
- 【上料机械手结构中的真空系统的设计计算案例1100字】
- 西方美术史试题及答案
- 七年级数学下学期期末测试卷(1)(学生版+解析)-2025年七年级数学下学期期末总复习(北师大版)
- 医院员工手册管理制度
- 校园短剧创作与演出指导行业跨境出海项目商业计划书
- 东航客运岗位面试题目及答案
- 【7历期末】安徽省合肥市包河区2023-2024学年部编版七年级下学期期末历史试卷
- 国家开放大学本科《理工英语4》一平台机考第五大题写作题总题库
- 路基交验具体要求(共5页)
- 粉煤灰对土壤和作物生长的影响
评论
0/150
提交评论