/************************************************************************* * 版权所有: * 文件版本: V1.00 * 文件名称: timer.c时间继电器 实现 * 生成日期: 2008年7月20日 * 作 者: * 功 能: * 更新信息: * 更新日志1: * 日期: * 修改者: * 修改内容: * 修改原因: * 更新日志2: **************************************************************************/ #include "head.h" /************************************************************************** 函数名称:InitTR 函数版本:1.00 作者: 创建日期:2005.4.21 函数功能说明:初始化时间继电器:设置动作和返回定值,清延时计数器,置为未启动状态 输入参数:TIMERELAY *pTimeRelay时间继电器对象 DWORD dTripThreshold 时间继电器延时动作时间定值 DWORD dRetThreshold 时间继电器延时返回时间定值 其他输入: 输出参数: 返回值: 函数扇入清单: ***************************************************************************/ void InitTR(TIMERELAY *pTimeRelay, DWORD dTripThreshold, DWORD dRetThreshold) { pTimeRelay->dTripThreshold = dTripThreshold; pTimeRelay->dRetThreshold = dRetThreshold; pTimeRelay->boolTrip = false; pTimeRelay->boolStart = false; pTimeRelay->dTimer = 0; pTimeRelay->dTimerRetTimer = 0; pTimeRelay->dTRTThreshold = 0; } /************************************************************************** 函数名称:InitTR_Time 函数版本:1.00 作者: 创建日期:2005.4.21 函数功能说明:初始化时间继电器:设置动作和返回定值 输入参数:TIMERELAY *pTimeRelay时间继电器对象 DWORD dTripThreshold 时间继电器延时动作时间定值 DWORD dRetThreshold 时间继电器延时返回时间定值 其他输入: 输出参数: 返回值: 函数扇入清单: ***************************************************************************/ void InitTR_Time(TIMERELAY *pTimeRelay, DWORD dTripThreshold, DWORD dRetThreshold) { pTimeRelay->dTripThreshold = dTripThreshold; pTimeRelay->dRetThreshold = dRetThreshold; } /************************************************************************** 函数名称:InitTR_Time_Flag 函数版本:1.00 作者: 创建日期:2005.4.21 函数功能说明:初始化时间继电器:设置动作和返回定值 输入参数:TIMERELAY *pTimeRelay时间继电器对象 DWORD dTripThreshold 时间继电器延时动作时间定值 DWORD dRetThreshold 时间继电器延时返回时间定值 其他输入: 输出参数: 返回值: 函数扇入清单: ***************************************************************************/ void InitTR_Time_Flag(TIMERELAY *pTimeRelay) { pTimeRelay->boolTrip = true; pTimeRelay->boolStart = true; } /************************************************************************** 函数名称:SetTR_TRTT 函数版本:1.00 作者: 创建日期:2005.4.21 函数功能说明:设置时间继电器延时中返回时间 输入参数:TIMERELAY *pTimeRelay时间继电器对象 DWORD dTRTT 返回时间 其他输入: 输出参数: 返回值: 函数扇入清单: ***************************************************************************/ void SetTR_TRTT(TIMERELAY *pTimeRelay, DWORD dTRTT) { pTimeRelay->dTRTThreshold = dTRTT; } /************************************************************************** 函数名称:PreSetTime 函数版本:1.00 作者: 创建日期:2005.4.21 函数功能说明:预置时间继电器计数时间并启动本对象 输入参数:TIMERELAY *pTimeRelay时间继电器对象 DWORD dPreTime 计数时间 其他输入: 输出参数: 返回值: 函数扇入清单: ***************************************************************************/ void PreSetTime(TIMERELAY *pTimeRelay, DWORD dPreTime) { pTimeRelay->dTimer = dPreTime; pTimeRelay->boolStart = true; } /************************************************************************** 函数名称:ResetTR 函数版本:1.00 作者: 创建日期:2005.4.21 函数功能说明:复位时间继电器:清延时计数器,置为未启动状态 输入参数:TIMERELAY *pTimeRelay时间继电器对象 其他输入: 输出参数: 返回值: 函数扇入清单: ***************************************************************************/ void ResetTR(TIMERELAY *pTimeRelay) { pTimeRelay->boolTrip = false; pTimeRelay->boolStart = false; pTimeRelay->dTimer = 0; pTimeRelay->dTimerRetTimer = 0; } /************************************************************************** 函数名称:RunTR 函数版本:1.00 作者: 创建日期:2005.4.21 函数功能说明:运行时间继电器:清延时计数器,置为未启动状态 输入参数:TIMERELAY *pTimeRelay时间继电器对象 bool boolInput时间继电器对象输入状态 非0 启动 0返回 DWORD dTime 两次运行该时间对象的时间间隔时间(采样点数) 其他输入: 输出参数: 返回值: 函数扇入清单: ***************************************************************************/ void RunTR(TIMERELAY *pTimeRelay, bool boolInput, DWORD dTime) { if (!pTimeRelay->boolTrip) // 时间继电器延时后输出没动作 { if (boolInput) // 输入启动状态 { if (pTimeRelay->boolStart) // 时间继电器启动 { pTimeRelay->dTimer += dTime; } else { pTimeRelay->boolStart = true; pTimeRelay->dTimer = dTime; } if (pTimeRelay->dTimer >= pTimeRelay->dTripThreshold) // 启动延时到 { pTimeRelay->boolTrip = true; // 动作输出 pTimeRelay->dTimer = 0; } pTimeRelay->dTimerRetTimer = 0; // 返回延时计数 } else // 输入返回状态 { pTimeRelay->dTimerRetTimer += dTime; if (pTimeRelay->dTimerRetTimer >= pTimeRelay->dTRTThreshold) // 启动返回延时到 { pTimeRelay->dTimer = 0; // 启动延时计数 pTimeRelay->boolStart = false; // 清启动 } } } else // 时间继电器延时后输出动作 { if (!boolInput) { if (pTimeRelay->boolStart) { pTimeRelay->dTimer += dTime; } else { pTimeRelay->boolStart = true; } if (pTimeRelay->dTimer >= pTimeRelay->dRetThreshold) // 动作返回延时到 { pTimeRelay->boolTrip = false; pTimeRelay->dTimer = 0; } pTimeRelay->dTimerRetTimer = 0; } else { pTimeRelay->dTimerRetTimer += dTime; if (pTimeRelay->dTimerRetTimer >= pTimeRelay->dTRTThreshold) { pTimeRelay->dTimer = 0; pTimeRelay->boolStart = false; } } } } void RunTR2(TIMERELAY *pTimeRelay, bool boolInput, DWORD dTime) { if (!pTimeRelay->boolTrip) // 时间继电器延时后输出没动作 { if (boolInput) // 输入启动状态 { if (pTimeRelay->boolStart) // 时间继电器启动 { pTimeRelay->dTimer += dTime; } else { pTimeRelay->boolStart = true; pTimeRelay->dTimer = dTime; } if (pTimeRelay->dTimer >= pTimeRelay->dTripThreshold) // 启动延时到 { pTimeRelay->boolTrip = true; // 动作输出 pTimeRelay->dTimer = 0; } pTimeRelay->dTimerRetTimer = 0; // 返回延时计数 } else // 输入返回状态 { pTimeRelay->dTimerRetTimer += dTime; pTimeRelay->dTimer += dTime; // if (pTimeRelay->dTimerRetTimer >= pTimeRelay->dTRTThreshold) // 启动返回延时到 { pTimeRelay->dTimer = 0; // 启动延时计数 pTimeRelay->boolStart = false; // 清启动 } } } else // 时间继电器延时后输出动作 { if (!boolInput) { if (pTimeRelay->boolStart) { pTimeRelay->dTimer += dTime; } else { pTimeRelay->boolStart = true; } if (pTimeRelay->dTimer >= pTimeRelay->dRetThreshold) // 动作返回延时到 { pTimeRelay->boolTrip = false; pTimeRelay->dTimer = 0; } pTimeRelay->dTimerRetTimer = 0; } else { pTimeRelay->dTimerRetTimer += dTime; pTimeRelay->dTimer += dTime; // if (pTimeRelay->dTimerRetTimer >= pTimeRelay->dTRTThreshold) { pTimeRelay->dTimer = 0; pTimeRelay->boolStart = false; } } } } // 时间修正,大于50ms&&小于2s -> 为了满足保护动作时间需要减去10ms void CorrectTR(TIMERELAY *pTimeRelay) { if (pTimeRelay->dTripThreshold > T_10ms * 4 && pTimeRelay->dTripThreshold < T_1s * 2) pTimeRelay->dTripThreshold -= T_10ms; } ///////////////////////file end////////////////////////////////////////////////////////////////////////////// // #endif // __TIMER_C