📄 modbus_tcp_slave_data.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 + -