转自 http://blog.sina.com.cn/s/blog_4935209001012eb5.html
// Initialize protocol stack in RTU mode for a slave with address 10 = 0x0A
eMBInit( MB_RTU, 0x0A, 38400, MB_PAR_EVEN );
// Enable the Modbus Protocol Stack.
eMBEnable( );
for( ;; )
{
// Call the main polling loop of the Modbus protocol stack.
eMBPoll( );
...
}
|
| |
定义 | |
#define | |
枚举类型 | |
enum | eMBMode Modbus协议的模式:RTU |
enum | eMBRegisterMode Modbus寄存器的模式:READ和WRITE |
enum | eMBErrorCode 错误码:没有错误,没有寄存器,无效, |
enum | eMBParity Modbus数据帧的校验类型:无校验,偶校验,奇校验 |
函数 | |
eMBInit 协议初始化函数 输入参数: eMBMode UCHAR ucSlaveAddress, UCHAR ucPort, ULONG ulBaudRate, eMBParity | |
eMBTCPInit 如果使用了TCP协议,则用该函数进行初始化 | |
eMBClose 关闭Modbus协议栈 | |
eMBEnable 使能Modbus协议栈 | |
eMBDisable 禁止Modbus协议栈 | |
eMBPoll 周期性调用的协议处理函数 | |
eMBSetSlaveID 设置子模块ID 输入参数: UCHAR ucSlaveID, BOOL xIsRunning, UCHAR const *pucAdditional, USHORT usAdditionalLen | |
eMBRegisterCB Modbus协议的寄存器回调函数 输入参数: UCHAR ucFunctionCode, pxMBFunctionHandler pxHandler功能码对应的处理函数 |
DefineDocumentation文档
| Use the defaultModbus TCP port (502). 使用缺省的ModbusTCP移植 Examples: |
枚举类型定义
|
| 在协议栈中所有函数使用的错误码 枚举值:
例子: AT91SAM7X_ROWLEY/demo.c, |
-
enum eMBMode
| Modbus serialtransmission modes (RTU/ASCII). Modubs串行传输模式 Modbus串行传输支持两种模式,ASCII或者是RTU。RTU模式较快但是具有较高的硬件要求并且要求网络延迟要低。ASCII模式较慢,但是在低速连接中更加可靠(如moderms)。 枚举值:
|
|
| 串行模式中字符的极性 串行字符传输时应用的校验格式。需要注意,这个值其实是传给移植层,并且不是所有的奇偶模式都能有效。 Enumeration values:
|
- enum
eMBRegisterMode
| 寄存器是读还是写 值将传给支持读或者写寄存器的回调函数。写意味着应用寄存器更新,读表示Modbus协议栈需要知道当前寄存器的数值。 See also: eMBRegHoldingCB(), 枚举值:
例子: AT91SAM7X_ROWLEY/demo.c, |
函数文档
|
|
|
| |
| 释放协议栈使用的资源。 该函数禁止Modbus协议栈并且释放所有的硬件资源。只有当协议栈被禁止了,才能调用这个函数。 注意: Note all ports implement this function. A port which wantsto get an callback must define the macro MB_PORT_HAS_CLOSE to1. 注意所有的移植都要实现这个函数。需要获取回调 返回: 如果资源释放了,该函数返回eMBErrorCode::MB_ENOERR。如果协议栈不是处于禁止状态,它返回eMBErrorCode::MB_EILLSTATE。 例子: LINUX/demo.c,
|
| | | |
|
| 禁止Modbus协议栈。 这个函数禁止处理Modbus帧。 返回: If the protocol stack has been disabled itreturns 例子: LINUX/demo.c,
|
| 使能Modbus协议栈 本函数使能Modbus帧的处理。 返回: If the protocol stack is now in the state enabled itreturns 例子: AT91SAM7X_ROWLEY/demo.c, |
| ( | eMBMode |
| | UCHAR ucSlaveAddress |
| | UCHAR |
| | ULONG |
| | eMBParity |
| ) | |
| 初始化Modbus协议栈 该函数初始化为ASCII或者RTU模式,并且调用移植层的初始化函数来准备硬件。需要注意的是,接受依然是禁止的,并且Modbus数据帧都不会得到处理,除非eMBEnable()被调用。 参数:
返回: 如果没有错误,这个函数返回eMBErrorCode::MB_ENOERR。协议栈将处于禁止状态,可以通过调用eMBEnable( )来激活。否则,将返回下列的一个错误: · · 例子: AT91SAM7X_ROWLEY/demo.c, |
-
eMBErrorCode
eMBPoll( void )
| Modbus协议栈的主轮询函数。 该函数必须被周期性调用。两次调用的时间间隔决定于Modbus的超时时间设置。在函数内部调用了xMBPortEventGet()函数来等待接受或者发送状态机发出的事件。 返回: 如果协议栈没有被使能,这个函数返回eMBErrorCode::MB_EILLSTATE.,否则返回eMBErrorCode::MB_ENOERR. 例子: AT91SAM7X_ROWLEY/demo.c, |
-
eMBErrorCode
eMBRegisterCB (
UCHAR
ucFunctionCode,
pxMBFunctionHandler
pxHandler
)
| 为给定的功能码注册一个回调处理函数。 这个函数为一个给定的功能代码注册一个新的回调函数。提供的回调函数负责解释ModbusPDU并且创建一个合适的应答。当错误发生时,这个函数会返回一个Modbus异常,该异常是由协议栈发送的Modbus异常。 参数:
返回: eMBErrorCode::MB_ENOERR |
设置设备的ID 当使用Modbus的Report Slave ID 参数:
返回: If the static buffer defined byMB_FUNC_OTHER_REP_SLAVEID_BUF in 例子: AVR/demo.c, |
| ( | USHORT | usTCPPort | |
| ModbusTCP的协议初始化 该函数初始化ModbusTCP 参数:
返回: 如果协议栈初始化正确,函数返回MB_ENOERR。否则,函数会返回如下的错误码: · · Examples: |