.Word资料ZModbusSdk配置函数库使用手册V1.00.Word资料1函数库说明...............................................................31.1简介:.............................................................31.2提供的函数接口.....................................................31.2.1以太网链路连接...............................................31.2.2串口链路连接.................................................41.2.3以太网与串口链路断开连接.....................................51.2.4以太网与串口链路的数据采集(读写)...........................52错误代码................................................................11.Word资料1函数库说明1.1简介:ZModbusSdk函数库为标准的MODBUS(主机)协议提供函数接口。开发人员可以使用此函数库方便开发出遵循MODBUS协议的程序。如果需要开发MODBUS从机程序,开发人员需要使用其他的函数库或方法。函数库在连接时使用对不同的链路层提供不同的函数接口如:以太网的为:ZMB_TCPConnectMDBServer,串口的为:ZMB_SerConnectMDBServer。其他的函数接口都相同,不区分连接链路。(本文档中使用的术语服务器对应MODBUS协议里的从机模块,客户机对应MODBUS协议里的主机模块)1.2提供的函数接口ZModbusSdk提供了连接到从机(服务器)和读写线圈与寄存器的函数接口。1.2.1以太网链路连接ZMB_TCPConnectMDBServer描述调用此函数连接到从机模块(或服务器)。HANDLEZMB_TCPConnectMDBServer(char*szIp,intnDstPort,intnConnTimeout);参数szIp指定要进行连接的从机(服务器)的IP地址。nDstPort指定从机的端口号。nConnTimeout指定连接超时。返回值返回“非NULL”表示成功,否则为错误。.Word资料1.2.2串口链路连接ZMB_SerConnectMDBServer(串口主机使用)描述调用此函数连接到从机模块(或服务器)。使用者应该注意对于串口的操作每个串口在同一时间只能打开一次,因此在操作串口时应该控制号程序使它每次只打开一次。HANDLEZMB_SerConnectMDBServer(intiRtuAscii,char*szCom,intiBautRate,intiByteSize,intiParity,intiStopBits,intiDtrCtl,intiRtsCtl,intiCtsCtl,intiDsrCtl,intiResponse);参数iRtuAscii模块工作方式:RTU:0,ASCII:1szCom需要打开的计算机串口。”COM1”,”COM2”,……iBautRate模块工作的波特率。9600,19200,……iByteSize模块工作的数据位。数据位数(字节表示4-8位)iParity模块工作的校验位,奇偶校验0-4:表示:不校验,奇校验,偶校验,标号,空格iStopBits模块工作的停止位,0(ONESTOPBIT)表示1个停止位,1(ONE5STOPBITS)表示1.5个停止位,2(TWOSTOPBITS)表示2个停止位iDtrCtl模块是否需要DTR控制,0不需要,1需要iRtsCtl模块是否需要RTS控制,0不需要,1需要iCtsCtl模块是否需要CTS控制,0不需要,1需要iDsrCtl模块是否需要Dsr控制,0不需要,1需要iResponse模块的超时响应,默认1000ms返回值.Word资料返回“非NULL”表示成功,否则为失败。1.2.3以太网与串口链路断开连接ZMB_DisConnectMDBServer描述调用此函数断开和从机的连接。voidZMB_DisConnectMDBServer(HANDLEhHand);参数hHand此handle是ConnectMDBServer操作的返回值。返回值无。1.2.4以太网与串口链路的数据采集(读写)ZMB_ReadCoil描述调用此函数按参数中的ID号和地址读取线圈状态。longZMB_ReadCoil(HANDLEhand,BYTEserID,intnStart,intnCount,BYTE*bRet/*arrofcoils*/,WORDTranID);参数hand此handle是ConnectMDBServer操作的返回值。serID设备ID号。nStart线圈的起始地址。nCount线圈的个数。bRet返回的线圈状态,已分配号的数组地址。TranID在TCP的MODBUS协议里需要用到任务ID号,如果为0使用系统自生成的,串口MODBUS此参数无效。返回值返回0表示成功,否则为错误码。.Word资料ZMB_ReadInput描述调用此函数按参数中的ID号和地址读取线圈状态(离散输入量数据)。longZMB_ReadInput(HANDLEhand,BYTEserID,intnStart,intnCount,BYTE*bRet/*arrofcoils*/,WORDTranID);参数hand此handle是ConnectMDBServer操作的返回值。serID设备ID号。nStart线圈的起始地址。nCount线圈的个数。bRet返回的线圈状态,已分配号的数组地址,此数组的大小应该和nCount指定的大小相同。TranID在TCP的MODBUS协议里需要用到任务ID号,如果为0使用系统自生成的,串口MODBUS此参数无效。返回值返回0表示成功,否则为错误码。ZMB_ReadHoldReg描述调用此函数按参数中的ID号和地址读取保持寄存器的数据。longZMB_ReadHoldReg(HANDLEhand,BYTEserID,intnStart,intnCount,WORD*bRet/*arrofreg*/,WORDTranID);参数hand此handle是ConnectMDBServer操作的返回值。serID设备ID号。nStart寄存器的起始地址。nCount.Word资料寄存器的个数。bRet返回的寄存器数据,已分配号的数组地址,此数组的大小应该和nCount一样。TranID在TCP的MODBUS协议里需要用到任务ID号,如果为0使用系统自生成的,串口MODBUS此参数无效。返回值返回0表示成功,否则为错误码。ZMB_ReadInputReg描述调用此函数按参数中的ID号和地址读取输入寄存器的数据。longZMB_ReadInputReg(HANDLEhand,BYTEserID,intnStart,intnCount,WORD*Ret/*arrofreg*/,WORDTranID);参数hand此handle是ConnectMDBServer操作的返回值。serID设备ID号。nStart寄存器的起始地址。nCount寄存器的个数。bRet返回的输入寄存器数据,已分配号的数组地址,此数组的大小应该和nCount一样大。TranID在TCP的MODBUS协议里需要用到任务ID号,如果为0使用系统自生成的,串口MODBUS此参数无效。返回值返回0表示成功,否则为错误码。ZMB_WriteCoilSingle描述调用此函数按参数中的ID号和地址修改单个线圈状态。longZMB_WriteCoilSingle(HANDLEhand,BYTEserID,intnAddress,WORDwWriteData,WORDTranID);参数.Word资料hand此handle是ConnectMDBServer操作的返回值。serID设备ID号。nAddress线圈的起始地址。wWriteData写入的线圈数据:“0”,“1”。TranID在TCP的MODBUS协议里需要用到任务ID号,如果为0使用系统自生成的,串口MODBUS此参数无效。返回值返回0表示成功,否则为错误码。ZMB_WriteCoilMulitiple描述调用此函数按参数中的ID号和地址修改nCount指定的多个线圈状态。longZMB_WriteCoilMulitiple(HANDLEhand,BYTEserID,intnAddress,intnCount,BYTE*bWriteDataArr,WORDTranID);参数hand此handle是ConnectMDBServer操作的返回值。serID设备ID号。nAddress线圈的起始地址。nCount写入的线圈的个数。bWriteDataArr写入的线圈数据的数组,数组的每个结构保存一个线圈状态,此数组大小应该和nCount指定的大小相同。TranID在TCP的MODBUS协议里需要用到任务ID号,如果为0使用系统自生成的,串口MODBUS此参数无效。返回值返回0表示成功,否则为错误码。ZMB_WriteRegSingle描述调用此函数按参数中的ID号和地址修改单个保持寄存器数据。.Word资料longZMB_WriteRegSingle(HANDLEhand,BYTEserID,intnAddress,WORDwWriteData,WORDTranID);参数hand此handle是ConnectMDBServer操作的返回值。serID设备ID号。nAddress保持寄存器的地址。wWriteData写入的寄存器数据。TranID在TCP的MODBUS协议里需要用到任务ID号,如果为0使用系统自生成的,串口MODBUS此参数无效。返回值返回0表示成功,否则为错误码。ZMB_WriteRegMulitiple描述调用此函数按参数中的ID号和地址修改nCount指定多个保持寄存器。longZMB_WriteRegMulitiple(HANDLEhand,BYTEserID,intnAddress,intnCount,WORD*writeDataArr,WORDTranID);参数hand此handle是ConnectMDBServer操作的返回值。serID设备ID号。nAddress保持寄存器的起始地址。nCount写入的寄存器的个数。bWriteDataArr写入的寄存器数据的数组,数组的每个结构保存一个寄存器的值,此数组个数应该和nCount指定的个数相同,大小应该等于nCount*2个字节。TranID在TCP的MODBUS协议里需要用到任务ID号,如果为0使用系统自生成的,串口MODBUS此参数无效。.Word资料返回值返回0表示成功,否则为错误码。ZMB_WriteCmdBuf描述调用此函数写命令串,根据nAddCheck参数决定是否添加校验。其中TCPModbus协议不会添加必要的头部,而串口Modbus则可以根据nAddCheck指定是否添加校验,校验的格式(CRC或LRC)由打开参数iRtuAscii指定,这里不需要再指定。longZMB_WriteCmdBuf(HANDLEhand,BYTE*pBuf,intiLen,intnAddCheck);参数hand此handle是ConnectMDBServer操作的返回值。pBuf写数据的缓冲区。iLen缓冲区长度。nAddCheck是否添加校验,只在串口中有效,如果打开时为RUT,且使用了添加校验,则添加CRC校验。如果打开时为ASCII,且使用了添加校验,则添加LRC校验。TranID