Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Current »

µC/Modbus-S might use an RTOS interface, µC/Modbus-M assumes the presence of an RTOS but, it doesn’t assume any specific RTOS. In fact, µC/Modbus was designed to work with just about commercial RTOS by providing a simple RTOS interface layer.

µC/Modbus is provided with a µC/ModbusRTOS interface layer so you can start using µC/Modbus if you are also using µC/OS-II or µC/OS-III in your product or, use this interface layer as an example for your own RTOS.

Figure 7-1 shows a flow diagram of receive model.

MB_OS_Init()

This function is called by µC/Modbusto initialize the RTOS interface for the RTOS you are using. You would typically create the ‘Modbus Rx Task’ and setup the mechanism needed to signal this task when a packet is received or an RTU timeout occurred for the channel.

Prototype

void MB_OS_Init(void);

Arguments

None.

Returned Value

None.

Notes / Warnings

None.

Called By

MB_Init() in mb.c

MB_OS_Exit()

This function is called by MB_Exit() (see mb.c) to gracefully terminate the Modbus task. In the case of µC/OS-II, we would simply delete the ‘Modbus Rx Task’ and the message queue. In the case of µC/OS-III, we would simply delete the ‘Modbus Rx Task’ since the message queue is built into the task.

Prototype

void MB_OS_Exit(void);  

Arguments

None.

Returned Value

None.

Notes / Warnings

None.

Called By

MB_Exit() in mb.c

MB_OS_RxSignal()

This function signals the reception of a complete packet. It is called by either the RTU timer interrupt for each channel that has not received characters within the timeout period or, by Modbus ASCII channels when a line feed character (i.e. 0x0A) is received.

Prototype

void MB_OS_RxSignal(MODBUS_CH *pch);

Arguments

pch

specifies a pointer to the Modbus channel data structure associated with the received packet.

Returned Value

None.

Notes / Warnings

None.

Called By

MB_RTU_TmrUpdate() or MB_ASCII_RxByte() in mb.c

MB_OS_RxWait()

This function waits for a response from a slave. MB_OS_RxWait() is called from a Modbus master task after it sent a command to a slave and is waiting for a response. If the response is not received within the timeout specified when the channel was configured (see MB_CfgCh()) then this function returns to the caller and notifies it of the timeout.

Prototype

void MB_OS_RxWait(MODBUS_CH *pch, CPU_INT16U *perr);

Arguments

pch

specifies a pointer to the Modbus channel data structure associated with the received packet.

perr

is a pointer to an error code indicating the outcome of the call and can be one of the following errors:

MODBUS_ERR_NONE

the call was successful

MODBUS_ERR_TIMED_OUT

A response was not received within the specified timeout.

MODBUS_ERR_NOT_MASTER

You called this function from a non-master channel

MODBUS_ERR_INVALID

An invalid error occurred. Refer to MB_OS.C for details.

Notes / Warnings

None.

Called By:

MBM_FC??_???() in MBM_CORE.C

Configuration

If you use µC/OS-II, you need to configure the following #define constants:

OS_Q_EN

The size needs to be as large as the number of Modbus channels.

OS_SEM_EN

If you use Modbus Master, you need to enable semaphore services.

MB_OS_CFG_RX_TASK_ID

MB_OS_CFG_RX_TASK_PRIO

MB_OS_CFG_RX_TASK_STK_SIZE

 

If you use µC/OS-III, you need to configure the following #define constants:

OS_CFG_Q_EN

The size of the message queue will be set to the number of channels (i.e. MODBUS_CFG_MAX_CH) in mb_os.c.

OS_CFG_SEM_EN

If you use Modbus Master, you need to enable semaphore services.

MB_OS_CFG_RX_TASK_PRIO

MB_OS_CFG_RX_TASK_STK_SIZE

 

These constants need to be defines in you application.

  • No labels