| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- /*************************************************************************
- * 版权所有:
- * 文件版本: 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
|