⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modbus_tcp_slave_data.c

📁 ZLG MINIARM-N20源代码
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			modbus_data.h
** Last modified Date:  2006-06-06
** Last Version:		2.0
** Descriptions:		
**
**------------------------------------------------------------------------------------------------------
** Created by:			ZhouLishan
** Created date:		2006-06-06
** Version:				2.0
** Descriptions:		
**
**------------------------------------------------------------------------------------------------------
** Modified by:			Liudikai
** Modified date:		2006-11-13
** Version:				2.1
** Descriptions:		modified for Modbus_TCP
**
********************************************************************************************************/
#include "config.h"
#if 0

#if MODBUS_SERVER_INSIDE_EN
/*******************************************************************************************************
//
// 用户编写操作寄存器接口函数
//
********************************************************************************************************/

#if TCP_READ_DIS_INPUT_EN

static uint8 AppDiscTbl[30] = {0x8a,0x93,0x35};
static uint8 AppKey1;
static uint8 AppKey2;
static uint8 AppKey3;
/*********************************************************************************************************
** Function name:			MB_TCP_GetDiscrete
**
** Descriptions:			获取离散值函数,该函数由用户编写
**
** input parameters:		ch,设备ID
**							DisInputsV,保存离散输入量值指针
**							Address,线圈地址
** Returned value:			正常返回MB_NO_ERR,出错返回ILLEGAL_DATA_ADDR,或SLAVE_DEVICE_FAILURE。
**         
** Created by:				ZhouLishan
** Created Date:			2006/06/06
**-------------------------------------------------------------------------------------------------------
** Modified by:				Liudikai
** Modified date:			2006/11/14
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 MB_TCP_GetDiscrete (uint8 ch, uint8 *DisInputsV,uint16 Address)
{
	uint8 err;
	uint8 ix;
	uint8 bit_nbr;
	err = MB_NO_ERR;
	if (Address < 100 * sizeof(uint8))
	{
		ix = Address / 8;
		bit_nbr = Address % 8;
		*DisInputsV =(AppDiscTbl[ix] & (1 << bit_nbr))?1:0; 
	}
	else
	{
		switch (Address)
		{
			case 200:
				*DisInputsV = AppKey1?1:0;
				break;
			case 201:
				*DisInputsV = AppKey2?1:0;
				break;
			case 202:
				*DisInputsV = AppKey3?1:0;
				break;
			default:
				err = ILLEGAL_DATA_ADDR;
				break;
		}
	}
	return (err);
}
#endif

#if TCP_READ_COILS_EN

static uint8 AppCoilTbl[100]={0x15,0x52};
static uint8 AppStatus;

/*********************************************************************************************************
** Function name:			MB_TCP_GetCoils
**
** Descriptions:			获取线圈值函数,该函数由用户编写
**
** input parameters:		ch,设备ID
**							CoilVPtr,保存线圈值指针
**							Address,线圈地址
** Returned value:			正常返回MB_NO_ERR,出错返回ILLEGAL_DATA_ADDR,或SLAVE_DEVICE_FAILURE。
**         
** Created by:				ZhouLishan
** Created Date:			2006/06/06
**-------------------------------------------------------------------------------------------------------
** Modified by:				Liudikai
** Modified date:			2006/11/14
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 MB_TCP_GetCoils (uint8 ch, uint8 *CoilVPtr,uint16 Address)
{
	uint8 err;
	uint8 ix;
	uint8 bit_nbr;
	err = MB_NO_ERR;
	
	if (Address < 100 * 8 * sizeof(uint8))
	{
		ix = Address / 8;
		bit_nbr = Address % 8;
		*CoilVPtr =(AppCoilTbl[ix] & (1 << bit_nbr))?1:0;
	}
	
	else
	{
		switch (Address) 
		{
			case 99:
				*CoilVPtr = 1;//AppStatus?1:0;
				break;
			case 100:
				*CoilVPtr = 1;//AppRunning?1:0;
				break;
			case 101:
				*CoilVPtr = 1;//AppLED?1:0;
				break;
		    case 102:
		    	*CoilVPtr = 1;//AppLED?1:0;
				break;
			case 103:
				*CoilVPtr = 1;//AppLED?1:0;
				break;
			case 104:
				*CoilVPtr = 1;//AppLED?1:0;
				break;
			case 105:
				*CoilVPtr = 1;//AppLED?1:0;
				break;
			case 106:
				*CoilVPtr = 1;//AppLED?1:0;
				break;		    
			default:
				err = ILLEGAL_DATA_ADDR;
				break;
		}
	}
	return (err);
}
#endif
#if TCP_WRITE_SING_COIL_EN||TCP_WRITE_MULT_COIL_EN
/*********************************************************************************************************
** Function name:			MB_TCP_SetCoil
**
** Descriptions:			设置线圈值函数,该函数由用户编写
**
** input parameters:		ch,设备ID
**							Address,线圈地址
**							CoilValue,线圈值(0\1)
** Returned value:			正常返回MB_NO_ERR,出错返回ILLEGAL_DATA_ADDR,或SLAVE_DEVICE_FAILURE。
**         
** Created by:				ZhouLishan
** Created Date:			2006/06/06
**-------------------------------------------------------------------------------------------------------
** Modified by:				Liudikai
** Modified date:			2006/11/14
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 MB_TCP_SetCoil(uint8 ch, uint16 Address,uint8 CoilValue)
{
	uint8 err;
	err = MB_NO_ERR;
	switch (Address) 
	{
		case 199:
			AppStatus = CoilValue?1:0;
			if ( AppStatus ) {
                GpioSet(P0_21);
                //GpioSet(P0_21); 						// 蜂鸣器响
            } else {
                GpioClr(P0_21); 						// 蜂鸣器熄灭
            }
			break;
		case 200:
			AppStatus = CoilValue?1:0;
			if ( AppStatus ) {
                GpioSet(P0_21); 						// 蜂鸣器响
            } else {
                GpioClr(P0_21); 						// 蜂鸣器熄灭
            }
			break;
		case 201:
			AppStatus = CoilValue?1:0;
			if ( AppStatus ) {
                GpioSet(P0_21); 						// 蜂鸣器响
            } else {
                GpioClr(P0_21); 						// 蜂鸣器熄灭
            }
			break;
		case 202:
			AppStatus = CoilValue?1:0;
			if ( AppStatus ) {
                GpioSet(P0_21); 						// 蜂鸣器响
            } else {
                GpioClr(P0_21); 						// 蜂鸣器熄灭
            }
			break;
		case 203:
			AppStatus = CoilValue?1:0;
			if ( AppStatus ) {
                GpioSet(P0_21); 						// 蜂鸣器响
            } else {
                GpioClr(P0_21); 						// 蜂鸣器熄灭
            }
			break;
		case 204:
			AppStatus = CoilValue?1:0;
			if ( AppStatus ) {
                GpioSet(P0_21); 						// 蜂鸣器响
            } else {
                GpioClr(P0_21); 						// 蜂鸣器熄灭
            }
			break;
		case 205:
			AppStatus = CoilValue?1:0;
			if ( AppStatus ) {
                GpioSet(P0_21); 						// 蜂鸣器响
            } else {
                GpioClr(P0_21); 						// 蜂鸣器熄灭
            }
			break;
		case 206:
			AppStatus = CoilValue?1:0;
			if ( AppStatus ) {
                GpioSet(P0_21); 						// 蜂鸣器响
            } else {
                GpioClr(P0_21); 						// 蜂鸣器熄灭
            }
			break;
		default:
			err = ILLEGAL_DATA_ADDR;
			break;
	}
	return (err);
}
#endif
#if TCP_READ_INPUT_REG_EN
#define END_INPUT_REG_ADDR 	150
static uint16 InputBuffer[END_INPUT_REG_ADDR] = {0x1234,0x5678,0x9abc};
static uint16 AppAD0;
static uint16 AppAD1;
static uint16 AppAD2;
/*********************************************************************************************************
** Function name:			MB_TCP_GetInputRegValue
**
** Descriptions:			读输入寄存器值函数,该函数由用户编写
**
** input parameters:		ch,设备ID
**							*ValuePtr,保存输入寄存器值的指针
**							Address,寄存器地址
** Returned value:			正常返回MB_NO_ERR,出错返回ILLEGAL_DATA_ADDR,或SLAVE_DEVICE_FAILURE。
**         
** Created by:				ZhouLishan
** Created Date:			2006/06/06
**-------------------------------------------------------------------------------------------------------
** Modified by:				Liudikai
** Modified date:			2006/11/14
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint8 MB_TCP_GetInputRegValue(uint8 ch, uint16 *ValuePtr,uint16 Address)
{
	uint8 err;
	err = MB_NO_ERR;
	if (Address < END_INPUT_REG_ADDR)
	{
		*ValuePtr = InputBuffer[Address];
	}
	else
	{
		switch (Address) 
		{
			case 300:
				*ValuePtr = AppAD0;
				break;
			case 301:
				*ValuePtr = AppAD1;
				break;
			case 302:
				*ValuePtr = AppAD2;
				break;
			case 303:
				*ValuePtr = AppAD2;
				break;
			case 304:
				*ValuePtr = AppAD2;
				break;
			case 305:
				*ValuePtr = AppAD2;
				break;
			case 306:
				*ValuePtr = AppAD2;
				break;
			case 307:
				*ValuePtr = AppAD2;
				break;
			case 308:
				*ValuePtr = AppAD2;
				break;
			case 309:
				*ValuePtr = AppAD2;
				break;
			case 310:
				*ValuePtr = AppAD2;
				break;
			case 311:
				*ValuePtr = AppAD2;
				break;
			case 312:
				*ValuePtr = AppAD2;
				break;
			case 313:
				*ValuePtr = AppAD2;
				break;
			case 314:
				*ValuePtr = AppAD2;
				break;
			case 315:
				*ValuePtr = AppAD2;
				break;
			default:
				err = ILLEGAL_DATA_ADDR;
				break;
		}
	}
	return (err);
}
#endif

#if  TCP_READ_HOLD_REG_EN||TCP_WRITE_SING_REG_EN||TCP_WRITE_MULT_REG_EN||TCP_MASK_WRITE_REG_EN||TCP_READ_WRITE_REG_EN
#define END_HOLDING_REG_ADDR 150
uint16 TCP_RegValueBuffer[END_HOLDING_REG_ADDR]={0x1101,0x2202,0x3303,0x4404,0x5505,0x6606,0x7707,0x8808,0x9909,0xaa0a};
#endif
/*********************************************************************************************************
** Function name:			MB_TCP_GetRegValue
**
** Descriptions:			读保持寄存器值函数,该函数由用户编写
**
** input parameters:		ch,设备ID
**							*ValuePtr,保存获取寄存器的值的指针
**							Address,寄存器地址
** Returned value:			正常返回MB_NO_ERR,出错返回ILLEGAL_DATA_ADDR,或SLAVE_DEVICE_FAILURE。
**         
** Created by:				ZhouLishan
** Created Date:			2006/06/06
**-------------------------------------------------------------------------------------------------------
** Modified by:				Liudikai
** Modified date:			2006/11/14
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if  TCP_READ_HOLD_REG_EN||TCP_READ_WRITE_REG_EN
uint8 MB_TCP_GetRegValue(uint8 ch, uint16 *ValuePtr,uint16 Address)
{
	if(Address<END_HOLDING_REG_ADDR)
	{
		*ValuePtr = TCP_RegValueBuffer[Address];
		return MB_NO_ERR;
	}
	else
		return ILLEGAL_DATA_ADDR;

}
#endif
/*********************************************************************************************************
** Function name:			MB_TCP_SetRegValue
**
** Descriptions:			写保持寄存器值函数,该函数由用户编写
**
** input parameters:		ch,设备ID
**							Address,寄存器地址
**							Value,写入的值
** Returned value:			正常返回MB_NO_ERR,出错返回ILLEGAL_DATA_ADDR,或SLAVE_DEVICE_FAILURE。
**         
** Created by:				ZhouLishan
** Created Date:			2006/06/06
**-------------------------------------------------------------------------------------------------------
** Modified by:				Liudikai
** Modified date:			2006/11/14
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#if  TCP_WRITE_SING_REG_EN||TCP_WRITE_MULT_REG_EN||TCP_MASK_WRITE_REG_EN||TCP_READ_WRITE_REG_EN
uint8 MB_TCP_SetRegValue(uint8 ch, uint16 Address,uint16 Value)
{
	if(Address<END_HOLDING_REG_ADDR)
	{
		TCP_RegValueBuffer[Address] = Value;
		return MB_NO_ERR;
	}
	else
		return ILLEGAL_DATA_ADDR;
}
#endif

/****************************************************************************************************************/
// File end
/****************************************************************************************************************/
#endif
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -