版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、最新欧姆龙PLC全系列HostLink通信协议串口动态链接库DLL(以下简称DLL),是为满足工业通信需要,针对工业领域要求上位机对PLC实时采集与控制的组态编程而设计。本DLL是采用Delphi语言开发的标准串口通讯库,具有以下特点:、实时性、可靠性好,可根据通信数据量自行调整通信时间;、适用于多PLC联网和上位机通信,满足多方面的需要;、函数接口功能全,操作简单;、附加实用转换与读取函数,易于快速开发(VC等非RAD开发环境的开发);、支持USB、PC扩展卡等扩展串口号;、支持多种操作系统win9x/win2000/winXP;、可在多种编程环境下使用,例如VB、VC、Delphi等开发环境。二、DLL函数说明1、打开串口FunctionComOpen(nport,BaudRate,DataBits,Parity,StopBits:longint;User:Pchar):longint;stdcall;参数:nport:打开串口号,取值为1〜8,代表COM1〜COM8;BaudRate:波特率,取值为1200、2400、4800、9600、19200、38400(推荐使用9600或19200);DataBits:数据位,取值为5、6、7、8(推荐使用7或8);Parity:校验位,取值为1(E)、2(O)、3(M)、4(S)、5(N),注括号里是校验位的英文缩写;StopBits:停止位,取值为1(1)、2(2)、3(1.5),注括号里是实际的停止位位数User:DLL授权用户名;返回值:长整型,操作成功返回1,否则返回0;打开串口不成功即返回0时的原因:1)、串口不存在或被占用;2)、DLL试用过期;3)、DLL授权注册不正确。使用举例:ComOpen(1,9600,7,1,1,'wjun'),打开COM1口,并设定波特率=9600、数据位=7、校验位=E(偶校验)、停止位=1,授权用户='wjun'。2、关闭串口FunctionComClose(nport:longint):longint;stdcall;参数:nport:串口号,取值为1〜8,代表COM1〜COM8;返回值:长整型,操作成功返回1,否则返回0;使用举例:ComClose(l),关闭打开的COM1口。3、读取PLC的操作状态{这很重要因为HostLink只有在监视或编程状态才可以进行写操作与强制操作,工控应用中应使用监视状态}FunctionComMS(nport,node:Longint):Longint;stdcall;参数:nport:串口号,取值为1〜8,代表COM1〜COM8;node:PLC站号或节点号(单元号),取值为0〜31;返回值:长整型,返回值:0:编程、1:运行、2:监视、3:读取错误;使用举例:ComMS(1,0),由串口1读取0号PLC的操作状态;4、改变PLC的操作状态FunctionComSC(nport,node,State:longint):Longint;stdcall;参数:nport:串口号,取值为1〜8,代表COM1〜COM8;node:PLC站号或节点号(单元号),取值为0〜31;State:PLC状态参数,取值为0:编程、1:运行、2:监视;返回值:长整型,操作成功返回1,否则返回0;5、读取PLC的型号代码FunctionComMM(nport,node:Longint):Pchar;stdcall;参数:nport:串口号,取值为1〜8,代表COM1〜COM8;node:PLC站号或节点号(单元号),取值为0〜31;返回值:Pchar(字符串),返回值:"Error":表示读取错误其他见下表:型号代码PLC型号"01"C250"02"C500"03"C120"0E"C2000"10"C1000H"11"C2000H/CQM1/CPM2A/CPM2C/CPM1/CPM1A/SRM1(-V2)"12"C20H/C28H/C40H/C200H/C200HS"20"CV500"21"CV1000"22"CV2000"30"CP1H"40"CVM1-CPU01-E"41"CVM1-CPU11-E"42"CVM1-CPU21-E所有字符串返回值都以"@"为字符串数据终止符,有效字符串为"@"之前的所有字符串组;6、测试PC与PLC的通信是否可以有效执行FunctionComTS(nport,node:longint):Longint;stdcall参数:nport:串口号,取值为1〜8,代表COM1〜COM8;node:PLC站号或节点号(单元号),取值为0〜31;返回值:长整型,测试成功返回1,否则返回0;7、PLC存储器数据的读取(IR/SR、LR、HR、AR、DM、T-PV值、T-状态值)FunctionComWR(nport,node,address,Count:longint;Order:pchar):Pchar;stdcall;参数:nport:串口号,取值为1〜8,代表COM1〜COM8;node:PLC站号或节点号(单元号),取值为0〜31;address:寄存器地址,取值请参欧姆龙PLC手册;Count:读取寄存器个数,T-状态值的读取最大可读一次都120个,其它一次可读30个字的数据;Order:读取各区命令字符见下表:命令代码读取区域"RR"IR/SR"RL"LR"RH"HR"RJ"AR"RD"DM"RC"T-PV值"RG"T状态值返回值:字符串数据,字符串数据的终止符为”@”;使用举例:ComWR(1,0,0,4,'RR'),由COM1读取0000〜0003四个寄存器的值,如返回值为“0001006403E809F0@”,则表示0000=0001,0001=0064,0002=03E8,0003=09F0;1)、非T区的读取返回值为16进制字符串组,可以将返回值如上四位一组再转换成“0000〜FFFF”的整数值;读字符串序列如:I0001I0064I03E8I009FII@IIR区0000000100020003终止符对T/C区:2)、如读T-PV值,例ComWR(1,0,0,4,'RC')则返回BCD码组合数据,表示T的PV值(当前值)读字符串序列如:I0001I01000I1000I0159II@IT区0000000100020003终止符3)、如读取T/C-状态值,例ComWR(1,0,0,4,'RG')则返回0、1字符串组,表示T/C的完成状态读字符串序列如:I1I0I0I1II@IT区0000000100020003终止符8、PLC存储器数据的写入(1R/SR、LR、HR、AR、DM)FunctionComWW(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;参数:nport:串口号,取值为1〜8,代表COM1〜COM8;node:PLC站号或节点号(单元号),取值为0〜31;address:寄存器地址,取值请参欧姆龙PLC手册;Sendstr:给PLC写入的字符串数据组;IR/SR区一次最多写30个字、LR区、HR区、AR区注意不要超出地址范围、DM值区一次最多写29个字。Order:写入各区命令字符见下表:命令代码写入区域"WR"IR/SR"WL"LR"WH"HR"WJ"AR"WD"DM返回值:长整型,操作成功返回1,否则返回0;使用举例:ComWW(1,0,0,'0001006403E8009F','WR'),由串口1预置值0号PLC的IR区的0000=1,0001=100,0002=1000,0003=159。写入值为16进制字符串组写字符串序列如:|0001|0064|03E8|009F|IR区00000001000200039、PLC的线圈强制置位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)FunctionComFBitset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;参数:nport:串口号,取值为1〜8,代表COM1〜COM8;node:PLC站号或节点号(单元号),取值为0〜31;address:寄存器地址,取值请参欧姆龙PLC手册,Bit:强制置位字地址的位地址,取值0〜15,TIM、TIMH、TIML、TMHH、CNT、CNTR强制置位时的取值总是0。Order:强制置位各区命令字符见下表:命令代码强制置位区域"CIO"IR/SR"LR"LR"HR"HR"AR"AR"TIM"定时器完成标志"TIMH"高速定时器完成标志"TIML"长定时器完成标志"TMHH"特高速定时器完成标志"CNT"计数器完成标志"CNTR"可逆定时器完成标志返回值:长整型,操作成功返回1,否则返回0;使用举例:ComFBitset(1,0,0,0,'CIO'),强制置位(IR)0.00;ComFBitset(1,0,0,0,'TIM'),强制置位(T)0000。10、PLC的线圈强制复位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)FunctionComFBitreset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;参数:nport:串口号,取值为1〜8,代表COM1〜COM8;node:PLC站号或节点号(单元号),取值为0〜31;address:寄存器地址,取值请参欧姆龙PLC手册;Bit:强制复位字地址的位地址,取值0〜15;TIM、TIMH、TIML、TMHH、CNT、CNTR强制复位时的取值总是0。Order:强制复位各区命令字符见下表:命令代码强制复位区域"CIO"IR/SR"LR"LR"HR"HR"AR"AR"TIM"定时器完成标志"TIMH"高速定时器完成标志"TIML"长定时器完成标志"TMHH"特高速定时器完成标志"CNT"计数器完成标志"CNTR"可逆定时器完成标志返回值:长整型,操作成功返回1,否则返回0;使用举例:ComFBitreset(1,0,0,0,'CIO'),强制复位(IR)0.00;ComFBitreset(1,0,0,0,'TIM'),强制复位(T)0000。11、PLC的多线圈强制置位复位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)FunctionComFRSset(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;参数:nport:串口号,取值为1〜8,代表COM1〜COM8;node:PLC站号或节点号(单元号),取值为0〜31;address:寄存器地址,取值请参欧姆龙PLC手册;sendstr:给多线圈写入的值,该值为16进制字符串组成的16个字符串依下表次排列,TIM、TIMH、TIML、TMHH、CNT、CNTR强制置位复位时仅第15位是有效的其它将被忽略。字符串序列:|0|2I3I5I4I812I5I3I0I2I8I0I2I3I5Ibit151413121110987654321016进制字符串所表示的处理意义参下表:0:不改变位状态2:复位3:置位4:强制复位5:强制置位8:取消强制置位/复位Order:强制置位复位各区命令字符见下表:命令代码复位区域"CIO"IR/SR"LR"LR"HR"HR"AR"AR返回值:长整型,操作成功返回1,否则返回0;使用举例:ComFRSset(1,0,0,'0235482530280235','CIO'),DLL将给(IR)0000按下表动作:0.150不改变位状态0.142复位0.133置位0.125强制置位0.114强制复位0.108取消强制置位/复位0.092复位0.085强制置位0.073置位0.060不改变位状态0.052复位0.048取消强制置位/复位0.030不改变位状态0.022复位0.013置位0.005强制置位12、取消所有被强制置位、复位、及多位强制置复位的强制状态FunctionComFCancel(nport,node:longint):Longint;stdcall;参数:nport:串口号,取值为1〜8,代表COM1〜COM8;node:PLC站号或节点号(单元号),取值为0〜31;返回值:长整型,操作成功返回1,否则返回0;使用举例:ComFCancel(1,0),取消PLC中所有被强制置位、复位的单元注:使用强制命令后PLC程序、写入命令都无法改变被强制的位的状态值,因此在实际工控应用中建议用写入命令或多线圈强制置位复位命令ComFRSset中的字符串处理码的2:复位、3:置位来操作置位复位。如果一定要用强制命令,那么在记得使用后用取消强制命令来恢复管理。由此可以推出下面的置位与复位函数,注意采用置位与复位函数,置位或复位的结果将受PLC程序输出的影响,推崇置/复位用在输入条件中。13、PLC的线圈置位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)FunctionComSet(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;参数:nport:串口号,取值为1〜8,代表COM1〜COM8;node:PLC站号或节点号(单元号),取值为0〜31;address:寄存器地址,取值请参欧姆龙PLC手册,Bit:置位字地址的位地址,取值0〜15,TIM、TIMH、TIML、TMHH、CNT、CNTR置位时的取值总是0Order:置位各区命令字符见下表:命令代码置位区域"CIO"IR/SR"LR"LR"HR"HR"AR"AR"TIM"定时器完成标志"TIMH"高速定时器完成标志"TIML"长定时器完成标志"TMHH"特高速定时器完成标志"CNT"计数器完成标志"CNTR"可逆定时器完成标志返回值:长整型,操作成功返回1,否则返回0;使用举例:ComSet(1,0,0,0,'CIO'),置位(IR)0.00;ComSet(1,0,0,0,'TIM'),置位(T)0000。14、PLC的线圈复位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)FunctionComReset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;参数:nport:串口号,取值为1〜8,代表COM1〜COM8;node:PLC站号或节点号(单元号),取值为0〜31;address:寄存器地址,取值请参欧姆龙PLC手册;Bit:复位字地址的位地址,取值0〜15;TIM、TIMH、TIML、TMHH、CNT、CNTR复位时的取值总是0Order:复位各区命令字符见下表:命令代码复位区域"CIO"IR/SR"LR"LR"HR"HR"AR"AR"TIM"定时器完成标志"TIMH"高速定时器完成标志"TIML"长定时器完成标志"TMHH"特高速定时器完成标志"CNT"计数器完成标志"CNTR"可逆定时器完成标志返回值:长整型,操作成功返回1,否则返回0;使用举例:ComReset(1,0,0,0,'CIO'),复位(IR)0.00;ComReset(1,0,0,0,'TIM'),复位(T)0000。在本DLL中去除了一些特权操作指令接一些不太容易在现场应用中使用的指令(如果有朋友认为指令怎么不全而你正好需要的话请注册时与我提出我会将你需要的指令加入。)三、DLL附加函数说明1、串口打开状态的读取FunctionComTrue(nport:longint):longint;stdcall;参数:noprt:串口号,取值为1〜8,代表COM1〜COM8;返回值:长整型,串口打开返回1,否则返回0;2、整数转换成16进制字符串(为VC等非RAD开发环境所增设)FunctionCIntToHex(Cint,Digits:Longint):Pchar;stdcall;参数:Cint:待转换整数,取值为(0〜65535);Digits:转换的字符串位数,指定位数小于实际位数时按实际输出;使用举例:CIntToHex(200,2),则返回字符串“C8@”CIntToHex(200,4),则返回字符串“00C8@”CIntToHex(4500,4),则返回字符串“1194@”CIntToHex(4500,3),则返回字符串“1194@”,因为“194”不足以表示4500这个数所以按实际输出字符串“1194@”"@”为字符串数据的终止符。3、16进制字符串转换成整数(为VC等非RAD开发环境所增设)FunctionCHexToInt(CHex:Pchar):Longint;stdcall;参数:CHex:待转换字符串,取值为(0000〜FFFF);使用举例:CHexToInt(„03E8'),则返回整数1000;4、抽取16进制字符串中某个位的值FunctionCinBin(CHex:Pchar;Start:longint):longint;stdcall;参数:CHex:待转换字符串,取值为(0000〜FFFF);Start:抽取的位,取值为(0〜15);使用举例:CinBin(„0F',3),则返回值1;CinBin(„0F',4),则返回值0;CinBin('03E8',6),则返回值1;读取M8〜M15组合成的字节值为“FC”时,要读取M10的值时,则调用CinBin(„FC',3)返回值1表示M10的值为1。5、返回字符串Text左边的Count个字符(为VC等非RAD开发环境所增设)FunctionCLeftStr(Text:Pchar;Count:longint):Pchar;stdcall;参数:Text:字符串原型;Count:指定返回左侧字符串个数;使用举例:CleftStr('123456',3)='123@';"@”为字符串数据的终止符。6、返回字符串Text右边的Count个字符(为VC等非RAD开发环境所增设)FunctionCRightStr(Text:Pchar;Count:longint):Pchar;stdcall;参数:Text:字符串原型;Count:指定返回右侧字符串个数使用举例:CRightStr('123456',3)='456@';"@”为字符串数据的终止符。7、返回字符串Text从Start开始的Count个字符(为VC等非RAD开发环境所增设)FunctionCMidStr(Text:Pchar;Start,Count:longint):Pchar;stdcall;参数:Text:字符串原型;Start:指定返回字符串的起始位置;Count:指定返回字符串个数;使用举例:CMidStr('123456',2,3)='234@';"@”为字符串数据的终止符。8、字符串Substr开始于字符串S的位置(为VC等非RAD开发环境所增设)FunctionCinStr(S,Substr:Pchar):Longint;stdcall;参数:S:字符串原型;Substr:查询的字符串;返回值:长整型;使用举例:CinStr('1Tfdg23456','2')=6DLL中关于传出字符串值的函数都以"@”为字符串函数值终止符。四、Delphi、VB、VC语言环境的开发使用说明1、Delphi语言环境开发说明在Delphi环境下将omron.dll、omron.slip(许可文件)复制到应用程序目录下(即将上述文件与编译后的可执行文件方入同一文件夹内);在工程文件的主程序窗体(pas)文件中声明:FunctionComOpen(nport,BaudRate,DataBits,Parity,StopBits:longint;User:Pchar):longint;stdcall;External'omron.dll';FunctionComClose(nport:longint):longint;stdcall;External'omron.dll';FunctionComWR(nport,node,address,Count:longint;Order:pchar):Pchar;stdcall;External'omron.dll';FunctionComWW(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;External'omron.dll';FunctionComMM(nport,node:Longint):Pchar;stdcall;External'omron.dll';FunctionComMS(nport,node:Longint):Longint;stdcall;External'omron.dll';FunctionComSC(nport,node,State:longint):Longint;stdcall;External'omron.dll';FunctionComTS(nport,node:longint):Longint;stdcall;External'omron.dll';FunctionComFBitset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;External'omron.dll';FunctionComFBitreset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;External'omron.dll';FunctionComFRSset(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;External'omron.dll';FunctionComFCancel(nport,node:longint):Longint;stdcall;External'omron.dll';FunctionComSet(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;External'omron.dll';FunctionComReset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;External'omron.dll';FunctionComTrue(nport:longint):longint;stdcall;External'omron.dll';FunctionCinBin(CHex:Pchar;Start:longint):longint;stdcall;External'omron.dll';其它附加函数Delphi有实用函数,建议用Delphi自带函数,如需使用声明参上例;声明后可以在程序中使用这些函数,附加函数置中除ComTrue、CinBin外Delphi系统自带有类似功能函数。通信时必须先使用ComOpen函数打开串口,在串口打开后可以有效操作相关函数,为确保通信可在程序运行开始时打开串口,程序关闭前关闭串口。应用程序关闭之前请务必将关闭所有串口,如串口未关闭前关闭系统将抛出异常。确保应用程序在关闭释放前关闭打开的串口。解决方法,在form的OnDestroy事件中加入如下语句:ifComTrue(1)=1thenComClose(1);在Delphi中给中给DLL中的函数传pchar值问题,参考下例:procedureTForm_omron.ButtonDsendClick(Sender:TObject);Vari,k,l:longint;sendText,Order:pchar;sendstr,Orderstr:string;begini:=strtoint(Rightstr(Comboxcom.Text,1));if(SendEdit.Enabled)and(comTrue(i)=1)thenbegink:=strtoint(DaddressW.Text);caseComDwrite.Itemlndexof0:Orderstr:='WR';1:Orderstr:='WL';2:Orderstr:='WH';3:Orderstr:='WJ';4:Orderstr:='WD';end;l:=length(SendEdit.Text)div4;l:=l*4;sendstr:=leftstr(SendEdit.Text,l);//以字为单位多余省略,4个字符串为一个字trysendText:=strAlloc(200);sendText:=strPCopy(sendText,sendstr);Order:=strAlloc(4);Order:=strPCopy(Order,Orderstr);ifComWW(i,0,k,SendText,Order)=1thenSendEdit.Enabled:=False;/写各区值finallyStrDispose(sendText);StrDispose(Order);end;end;end;建议采用strPCopy():string型转换到Pchar型,straps():Pchar型转换到string型,不推荐使用直接转换法。上述可以详细参照DEMO程序。2、VB语言环境开发说明在VB环境下将omron.dll、omron.slip(许可文件)复制到应用程序目录下(即将上述文件与编译后的可执行文件方入同一文件夹内);在工程文件中声明:PrivateDeclareFunctionComOpenLib"omron.dll"(ByValnportAsLong,ByValBaudRateAsLong,ByValDataBitsAsLong,ByValParityAsLong,ByValStopBitsAsLong,ByValUserAsString)AsLongPrivateDeclareFunctionComCloseLib"omron.dll"(ByValnportAsLong)AsLongPrivateDeclareFunctionComWRLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong,ByValaddressAsLong,ByValCountAsLong,ByValOrderAsString)AsStringPrivateDeclareFunctionComWWLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong,ByValaddressAsLong,ByValSendstrAsString,ByValOrderAsString)AsLongPrivateDeclareFunctionComMMLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong)AsStringPrivateDeclareFunctionComMSLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong)AsLongPrivateDeclareFunctionComSCLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong,ByValStateAsLong)AsLongPrivateDeclareFunctionComTSLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong)AsLongPrivateDeclareFunctionComFBitsetLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong,ByValaddressAsLong,ByValBitasLong,ByValOrderAsString)AsLongPrivateDeclareFunctionComFBitresetLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong,ByValaddressAsLong,ByValBitasLong,ByValOrderAsString)AsLongPrivateDeclareFunctionComFRSsetLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong,ByValaddressAsLong,ByValSendstrAsString,ByValOrderAsString)AsLongPrivateDeclareFunctionComFCancelLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong)AsLongPrivateDeclareFunctionComSetLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong,ByValaddressAsLong,ByValBitasLong,ByValOrderAsString)AsLongPrivateDeclareFunctionComResetLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong,ByValaddressAsLong,ByValBitasLong,ByValOrderAsString)AsLongPrivateDeclareFunctionComTrueLib"omron.dll"(ByValnportAsLong)AsLongPrivateDeclareFunctionCinBinLib"omron.dll"(ByValChexAsString,ByValStartAsLong)AsLong其它附加函数VB有实用函数,建议用VB自带函数,如需使用声明参上例;做完上述声明后,便可以在程序中使用相关函数了。本DLL是串口通信库,通信时必须先使用ComOpen函数打开串口,在串口打开后可以有效操作相关函数,为保证通信可以在程序运行开始时打开串口,程序关闭前关闭串口。在应用程序关闭之前请务必将关闭所有串口,如您的程序串口未关闭前被关闭系统将抛出异常。当出现这样的异常请更改您的程序,确保应用程序在关闭释放前关闭打开的串口。解决方法,在form的Unload事件中加入如下例:IfComTrue(1)=1thenComClose(1)Endif为确保Unload事件有效执行程序中应使用“End”语句,而尽量使用“Unload”语句释放所有窗体,因使用“End”语句系统不会执行正常的窗体释放等事件而直接退出程序,如程序中有form1,form2两个窗体,则使用下面语句:Unloadform1Unloadform2VB会在所有窗体关闭后释放所有占用资源。上述可以详细参照DEMO程序。3、VC语言环境开发说明在VC环境下将omron.dll、omron.slip(许可文件)复制到应用程序目录下(即将上述文件与编译后的可执行文件方入同一文件夹内);在工程主文件cpp中声明一个句柄:HINSTANCEm_handle;用来标识导入的动态链接库。、导入动态链接库,如例所示:m_handle=::LoadLibrary("omron.dll");、按下例说明声明相关各个函数:typedeflong(CALLBACK*pOpen)(longnport,longBaudRate,longDataBits,longParity,longStopBits,char*User);typedeflong(CALLBACK*pClose)(longnport);typedefchar*(CALLBACK*pWR)(longnport,longnode,longaddress,longCount,char*Order);typedeflong(CALLBACK*pWW)(longnport,longnode,longaddress,char*Sendstr,char*Order);typedefchar*(CALLBACK*pMM)(longnport,longnode);typedeflong(CALLBACK*pMS)(longnport,longnode);typedeflong(CALLBACK*pSC)(longnport,longnode,longState);typedeflong(CALLBACK*pTS)(longnport,longnode);typedeflong(CALLBACK*pFset)(longnport,longnode,longaddress,longBit,char*Order);typedeflong(CALLBACK*pFReset)(longnport,longnode,longaddress,longBit,char*Order);typedeflong(CALLBACK*pFRSset)(longnport,longnode,longaddress,char*Sendstr,char*Order);typedeflong(CALLBACK*pFCancel)(longnport,longnode);typedeflong(CALLBACK*pset)(longnport,longnode,longaddress,longBit,char*Order);typedeflong(CALLBACK*pReset)(longnport,longnode,longaddress,longBit,char*Order);typedeflong(CALLBACK*pTrue)(longnport);typedeflong(CALLBACK*pBin)(char*Chex,longStart);typedefchar*(CALLBACK*pIntHex)(longCint,longDigits);typedeflong(CALLBACK*pHexInt)(char*CHex);typedefchar*(CALLBACK*pLeft)(char*Text,longCount);typedefchar*(CALLBACK*pRight)(char*Text,longCount);typedefchar*(CALLBACK*pMid)(char*Text,longStart,longCount);typedeflong(CALLBACK*pinstr)(char*S,char*Substr);、声明并建立动态链接库中的函数与新函数名的对应关系,如下:pOpenCMOpen=(pOpen)GetProcAddress(m_handle,"ComOpen");pCloseCMClose=(pClose)GetProcAddress(m_handle,"ComClose");pWRCMWR=(pWR)GetProcAddress(m_handle,"ComWR");pWWCMWW=(pWW)GetProcAddress(m_handle,"ComWW");pMMCMMM=(pMM)GetProcAddress(m_handle,"ComMM");pMSCMMS=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 屋顶除雪安全工作方案
- 教师党组织会议制度
- 保密制度是指
- 基于多模态大模型视频质量评估课程设计
- 日志处理平台Spark教程课程设计
- 《俄罗斯》教学课件
- 初中道德与法治“植树添绿护家园”主题班会教案(2026版)
- 在约束中扎根于自律中腾飞-七年级第二学期期中家长会(班级德育与家校协同工作专题报告)
- 高中思政主题班会教案:“纪兰精神”的时代回响与青春担当
- 高二“珍爱生命预防溺水”主题班会示范教案
- 灵魂出生前的人生计划
- 太阳能热水器自动控制系统毕业设计
- 电力电子技术第二版张兴课后习题答案
- GB/T 35089-2018机器人用精密齿轮传动装置试验方法
- 国际商务谈判课件(同名951)
- 《煤矿安全规程》专家解读(详细版)
- 2023年新教科版科学六年级下册学生活动手册答案
- 安全目标责任书(仓库管理员)
- 中枢神经系统淋巴瘤的诊断和治疗 课件
- 幼儿园大班安全:《危险的洞洞》 课件
- 抗生素PPT课件(共45张PPT)
评论
0/150
提交评论