?? osfunfile.c
字號:
/****************************************Copyright (c)**************************************************
** 廣州周立功單片機發展有限公司
** 研 究 所
** 產品一部
**
** http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: OSFUNfile.c
**創 建 人: 周立山
**最后修改日期: 2005年7月29日
**描 述: MODBUS RTU 協議棧
**
**--------------歷史版本信息----------------------------------------------------------------------------
** 創建人: 周立山
** 版 本: 1.0a
** 日 期: 2005年7月29日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
** 修改人:
** 版 本:
** 日 期:
** 描 述:
**
**--------------當前版本修訂------------------------------------------------------------------------------
** 修改人:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "config.h"
//*********************************************************************************
// 函數名稱:OSReadCoils
// 輸入參數:ID,從機地址
// StartAddress,線圈起始地址(0x0000~0xffff)
// Quantity,線圈數量(0x001~0x07d0)
// ReaValuePtr,保存線圈值的指針
// 輸出參數:完成代碼:(見異常代碼表)
// 功能描述:讀取線圈值。0x01
//*********************************************************************************
uint8 OSReadCoils(uint8 ID,
uint16 StartAddress,
uint16 Quantity,
uint8 *ReaValuePtr)
{
READ_PARAMET Parameter;
Parameter.RStartAddr = StartAddress;
Parameter.RQuantity = Quantity;
Parameter.DataPtr = (uint16 *)ReaValuePtr;
return ModbusPoll(ID,0x01,&Parameter);
}
//*********************************************************************************
// 函數名稱:OSReadDisInputs
// 輸入參數:ID,從機地址
// StartAddress,離散量輸入起始地址(0x0000~0xffff)
// Quantity,離散量輸入數量(0x001~0x07d0)
// ReaValuePtr,保存離散量輸入值的指針
// 輸出參數:完成代碼:(見異常代碼表)
// 功能描述:讀取離散量輸入值。0x02
//*********************************************************************************
uint8 OSReadDisInputs(uint8 ID,
uint16 StartAddress,
uint16 Quantity,
uint8 *ReaValuePtr)
{
READ_PARAMET Parameter;
Parameter.RStartAddr = StartAddress;
Parameter.RQuantity = Quantity;
Parameter.DataPtr = (uint16 *)ReaValuePtr;
return ModbusPoll(ID,0x02,&Parameter);
}
//*********************************************************************************
// 函數名稱:OSReadHoldReg
// 輸入參數:ID,從機地址
// StartAddress,寄存器起始地址(0x0000~0xffff)
// Quantity,寄存器數量(0x0001~0x007d)
// ReaValuePtr,保存讀出寄存器值的指針
// 輸出參數:完成代碼:(見異常代碼表)
// 功能描述:讀取保持寄存器值。0x03
//*********************************************************************************
uint8 OSReadHoldReg(uint8 ID,
uint16 StartAddress,
uint16 Quantity,
uint16 *ReaValuePtr) // 讀保持寄存器
{
READ_PARAMET Parameter;
Parameter.RStartAddr = StartAddress;
Parameter.RQuantity = Quantity;
Parameter.DataPtr = ReaValuePtr;
return ModbusPoll(ID,0x03,&Parameter);
}
//*********************************************************************************
// 函數名稱:OSReadInputReg
// 輸入參數:ID,從機地址
// StartAddress,輸入寄存器起始地址(0x0000~0xffff)
// Quantity,輸入寄存器數量(0x0001~0x007d)
// ReaValuePtr,保存讀出輸入寄存器值的指針
// 輸出參數:完成代碼:(見異常代碼表)
// 功能描述:讀取輸入寄存器值。0x04
//*********************************************************************************
uint8 OSReadInputReg(uint8 ID,
uint16 StartAddress,
uint16 Quantity,
uint16 *ReaValuePtr)
{
READ_PARAMET Parameter;
Parameter.RStartAddr = StartAddress;
Parameter.RQuantity = Quantity;
Parameter.DataPtr = ReaValuePtr;
return ModbusPoll(ID,0x04,&Parameter);
}
//*********************************************************************************
// 函數名稱:OSWriteSingleCoil
// 輸入參數:ID,從機地址
// OutAddress,寫入的地址(0x0000~0xffff)
// OutValue,寫入的值COIL_OFF(0x0000)、COIL_ON(0xff00)
// 輸出參數:完成代碼:(見異常代碼表)
// 功能描述:寫單線圈操作。0x05
//*********************************************************************************
uint8 OSWriteSingleCoil(uint8 ID,
uint16 OutAddress,
uint16 OutValue)
{
WRITE_PARAMET Parameter;
Parameter.WStartAddr = OutAddress;
Parameter.DataPtr = &OutValue;
return ModbusPoll(ID,0x05,&Parameter);
}
//*********************************************************************************
// 函數名稱:OSWriteSingleReg
// 輸入參數:ID,從機地址
// OutAddress,寫入的地址(0x0000~0xffff)
// OutValue,寫入的值(0x0000~0xffff)
// 輸出參數:完成代碼:(見異常代碼表)
// 功能描述:寫單寄存器操作。0x06
//*********************************************************************************
uint8 OSWriteSingleReg(uint8 ID,
uint16 OutAddress,
uint16 OutValue)
{
WRITE_PARAMET Parameter;
Parameter.WStartAddr = OutAddress;
Parameter.DataPtr = &OutValue;
return ModbusPoll(ID,0x06,&Parameter);
}
//*********************************************************************************
// 函數名稱:OSWriteMultipleCoils
// 輸入參數:ID,從機地址
// StartAddress,寫入的地址(0x0001~0xffff)
// Quantity,寫入的數量(0x0001~0x07b0)
// ValuePtr,寫入數據的指針
// 輸出參數:完成代碼:(見異常代碼表)
// 功能描述:寫多線圈操作。0x0f
//*********************************************************************************
uint8 OSWriteMultipleCoils(uint8 ID,
uint16 StartAddress,
uint16 Quantity,
uint8 *ValuePtr)
{
WRITE_PARAMET Parameter;
Parameter.WStartAddr = StartAddress;
Parameter.WQuantity = Quantity;
Parameter.DataPtr = (uint16*)ValuePtr;
return ModbusPoll(ID,0x0f,&Parameter);
}
//*********************************************************************************
// 函數名稱:WriteMultipleReg
// 輸入參數:ID,從機地址
// StartAddress,寫入的地址(0x0001~0xffff)
// Quantity,寫入的數量(0x0001~0x0078)
// ValuePtr,寫入數據的指針
// 輸出參數:完成代碼:(見異常代碼表)
// 功能描述:寫多寄存器操作。0x10
//*********************************************************************************
uint8 OSWriteMultipleReg(uint8 ID,
uint16 StartAddress,
uint16 Quantity,
uint16 *ValuePtr)
{
WRITE_PARAMET Parameter;
Parameter.WStartAddr = StartAddress;
Parameter.WQuantity = Quantity;
Parameter.DataPtr = ValuePtr;
return ModbusPoll(ID,0x10,&Parameter);
}
//*********************************************************************************
// 函數名稱:MaskWriteReg
// 輸入參數:ID,從機地址
// Addr,寫入的地址(0x0001~0xffff)
// And_Mask,屏蔽寫與數據
// Or_Mask,屏蔽寫或數據
// 輸出參數:完成代碼:(見異常代碼表)
// 功能描述:屏蔽寫寄存器操作。如果Or_Mask值為零,那么結果是當前內容和And_Mask的簡單邏輯AND(與);
// 如果And_Mask值為零,結果等于Or_Mask值。0x16
//*********************************************************************************
uint8 OSMaskWriteReg(uint8 ID,
uint16 Addr,
uint16 And_Mask,
uint16 Or_Mask)
{
MASK_WRITE_REG Parameter;
Parameter.RefAddress = Addr;
Parameter.And_Mask = And_Mask;
Parameter.OR_Mask = Or_Mask;
return ModbusPoll(ID,0x16,&Parameter);
}
//*********************************************************************************
// 函數名稱:ReadWriteMultipleReg2PDU
// 輸入參數:ID,從機地址
// WStartAddr,寫入寄存器的地址(0x0001~0xffff)
// WQuantity,寫入寄存器的數量(1~121)
// RStartAddr,讀出寄存器的地址(0x0001~0xffff)
// RQuantity,讀出寄存器的數量(1~125)
// DataPtr,寫入寄存器的指針和讀出數據存放指針
// 輸出參數:完成代碼:(見異常代碼表)
// 功能描述:寫多寄存器操作。0x17
//*********************************************************************************
uint8 OSReadWriteMultipleReg(uint8 ID,
uint16 WStartAddr,
uint16 WQuantity,
uint16 RStartAddr,
uint16 RQuantity,
uint16 *DataPtr)
{
WRITE_PARAMET Parameter;
if(RQuantity>125)
return MB_PARAMETER_ERR;
if(WQuantity>121)
return MB_PARAMETER_ERR;
Parameter.RStartAddr = RStartAddr;
Parameter.RQuantity = RQuantity;
Parameter.WStartAddr = WStartAddr;
Parameter.WQuantity = WQuantity;
Parameter.DataPtr = DataPtr;
return ModbusPoll(ID,0x17,&Parameter);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -