MODBUS SDK用户手册.docx

上传人:b****2 文档编号:1819692 上传时间:2023-05-01 格式:DOCX 页数:15 大小:30.47KB
下载 相关 举报
MODBUS SDK用户手册.docx_第1页
第1页 / 共15页
MODBUS SDK用户手册.docx_第2页
第2页 / 共15页
MODBUS SDK用户手册.docx_第3页
第3页 / 共15页
MODBUS SDK用户手册.docx_第4页
第4页 / 共15页
MODBUS SDK用户手册.docx_第5页
第5页 / 共15页
MODBUS SDK用户手册.docx_第6页
第6页 / 共15页
MODBUS SDK用户手册.docx_第7页
第7页 / 共15页
MODBUS SDK用户手册.docx_第8页
第8页 / 共15页
MODBUS SDK用户手册.docx_第9页
第9页 / 共15页
MODBUS SDK用户手册.docx_第10页
第10页 / 共15页
MODBUS SDK用户手册.docx_第11页
第11页 / 共15页
MODBUS SDK用户手册.docx_第12页
第12页 / 共15页
MODBUS SDK用户手册.docx_第13页
第13页 / 共15页
MODBUS SDK用户手册.docx_第14页
第14页 / 共15页
MODBUS SDK用户手册.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

MODBUS SDK用户手册.docx

《MODBUS SDK用户手册.docx》由会员分享,可在线阅读,更多相关《MODBUS SDK用户手册.docx(15页珍藏版)》请在冰点文库上搜索。

MODBUS SDK用户手册.docx

MODBUSSDK用户手册

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”表示成功,否则为错误。

1.2.2串口链路连接

ZMB_SerConnectMDBServer(串口主机使用)

描述

调用此函数连接到从机模块(或服务器)。

使用者应该注意对于串口的操作每个串口在同一时间只能打开一次,因此在操作串口时应该控制号程序使它每次只打开一次。

HANDLEZMB_SerConnectMDBServer(intiRtuAscii,

char*szCom,

intiBautRate,

intiByteSize,

intiParity,

intiStopBits,

intiDtrCtl,

intiRtsCtl,

intiCtsCtl,

intiDsrCtl,

intiResponse);

参数

iRtuAscii

模块工作方式:

RTU:

0,ASCII:

1

szCom

需要打开的计算机串口。

”COM1”,”COM2”,……

iBautRate

模块工作的波特率。

9600,19200,……

iByteSize

模块工作的数据位。

数据位数(字节表示4-8位)

iParity

模块工作的校验位,奇偶校验0-4:

表示:

不校验,奇校验,偶校验,标号,空格

iStopBits

模块工作的停止位,0(ONESTOPBIT)表示1个停止位,1(ONE5STOPBITS)表示个停止位,2(TWOSTOPBITS)表示2个停止位

iDtrCtl

模块是否需要DTR控制,0不需要,1需要

iRtsCtl

模块是否需要RTS控制,0不需要,1需要

iCtsCtl

模块是否需要CTS控制,0不需要,1需要

iDsrCtl

模块是否需要Dsr控制,0不需要,1需要

iResponse

模块的超时响应,默认1000ms

返回值

返回“非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表示成功,否则为错误码。

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

寄存器的个数。

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);

参数

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号和地址修改单个保持寄存器数据。

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此参数无效。

返回值

返回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

在TCP的MODBUS协议里需要用到任务ID号,如果为0使用系统自生成的,串口MODBUS此参数无效。

返回值

返回写成功的长度。

ZMB_ReadRecBuf

描述

调用此函数读取设备的响应数据。

longZMB_ReadRecBuf(HANDLEhand,

BYTE*pBuf,

intiBufLen,

int*iRecedLen);

参数

hand

此handle是ConnectMDBServer操作的返回值。

pBuf

读数据的缓冲区。

iBufLens

缓冲区的大小。

iRecedLen

接收到的数据的长度,(输出参数)。

TranID

在TCP的MODBUS协议里需要用到任务ID号,如果为0使用系统自生成的,串口MODBUS此参数无效。

返回值

返回读取到的长度。

2错误代码

ZModbusSdk使用了标准的MODBUS错误代码和自定义错误代码来描述SDK在操作过程中会出现的错误。

在使用的过程中应该注意错误的定义,有些使用0作为成功的标志,而有些使用0作为错误的标志。

标准MODBUS的读写操作都以ERROR_SUCCESS(0)表示正确,Connect却以NULL(0)表示错误,特殊命令的读写返回的读写的数据长度。

错误码

错误含义

自定义错误码

0

成功

100

普通错误,未定义

101

不是MODBUS协议

102

TCP连接出错(可能主机不存在或本地网络有问题)

103

TCP发送命令出错(发送不成功,可能为网络问题)

104

TCP接收响应出错(可能指示不正确或网络有问题)

105

TCP发送命令超时未完成

106

TCP接收响应超时未完成

107

串口写出错

108

串口读出错

109

返回的功能码不是发出请求的功能码

200

发送不成功,如果出现这个错误,需要重新连接

201

读超时,可能是下位机响应不过,也可能是其他原因,需要具体分析

202

接收到非标准的MODBUS协议数据

标准MODBUS错误

1

未定义的功能码

2

地址出错

3

数据出错

0x81

读线圈出错

0x82

读离散输入量出错

0x83

读保持寄存器出错

0x84

读输入寄存器出错

0x85

写单个线圈出错

0x86

写单个寄存器出错

0x8F

写多个线圈出错

0x90

写多个寄存器出错

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2