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

📄 alarm.c

📁 该程序完成了c8051外围电路的驱动和串口协议的编写。希望能给大家学习51单片机带来帮助
💻 C
📖 第 1 页 / 共 3 页
字号:
//*******************************************************************************
//Copyright (c) 2007,派利斯电子(北京)有限公司 硬件部
//文件名称: comm.c
//摘    要: 本文件主要包含报警部分的程序
//当前版本: D-1 
//作    者:  佟文杰
//完成日期: 4/16/2007
//修 改 人:
//修改原因:
//修改日期:
//*******************************************************************************
#define ALARM_H
			
#include "alarm.h"

/*
通道类型为轴振动时只有两级报警,即AlertHigh和DangerHigh

报警倍增:软件可以选择2倍增、3倍增或不倍增,只有当91板上倍增端子短接后,各个模块按照软件设置的倍增方式进行倍增。
报警自锁
报警旁路:模块被Bypass后,该模块面板上的Bypass LED 点亮,同时通过CAN总线上传旁路状态。
报警延时
OK状态: 当通道NOT OK,该通道不报警。通道由NOT OK状态进入OK状态时,振动通道报警Bypass 10秒,位移通道报警Bypass 1秒。
*/
xdata struct Alarm AlarmModule;



//报警模块

/*****************************************************
* 函数介绍: 设置报警回差值
* 输入参数: 回差值 通道号
* 输出参数: 无
* 返回值 :	 无
*****************************************************/
void SetFallingAlertL (unsigned char uchChannel, int iFallingAlertLow)
{							   
	AlarmModule.iFallingAlertL[uchChannel - 1] = iFallingAlertLow;	   
}

/*****************************************************
* 函数介绍: 设置报警回差值
* 输入参数: 回差值 通道号
* 输出参数: 无
* 返回值 :	 无
*****************************************************/
void SetFallingAlertH(unsigned char uchChannel, int iFallingAlertHigh)
{						   
	AlarmModule.iFallingAlertH[uchChannel - 1] = iFallingAlertHigh;		
}

/*****************************************************
* 函数介绍: 设置报警回差值
* 输入参数: 回差值 通道号
* 输出参数: 无
* 返回值 :	 无
*****************************************************/
void SetFallingDangerL (unsigned char uchChannel, int iFallingDangerLow)
{								
	AlarmModule.iFallingDangerL[uchChannel - 1] = iFallingDangerLow;	 
}

/*****************************************************
* 函数介绍: 设置报警回差值
* 输入参数: 回差值 通道号
* 输出参数: 无
* 返回值 :	 无
*****************************************************/
void SetFallingDangerH(unsigned char uchChannel, int iFallingDangerHigh)
{										 
	AlarmModule.iFallingDangerH[uchChannel - 1] = iFallingDangerHigh;	   
}

/*****************************************************
* 函数介绍: 设置报警下限
* 输入参数: 门限值 通道号
* 输出参数: 无
* 返回值 :	 无
*****************************************************/
void SetAlertLow(unsigned char uchChannel, int iAlertLow)
{									 
	AlarmModule.iAlertLow[uchChannel - 1] = iAlertLow;				
}

/*****************************************************
* 函数介绍: 设置报警上限
* 输入参数: 门限值 通道号
* 输出参数: 无
* 返回值 :	 无
*****************************************************/

void SetAlertHigh(unsigned char uchChannel, int iAlertHigh) 
{								 
	AlarmModule.iAlertHigh[uchChannel - 1] = iAlertHigh;	  
}

/*****************************************************
* 函数介绍: 设置危险下限
* 输入参数: 门限值 通道号
* 输出参数: 无
* 返回值 :	 无
*****************************************************/
void SetDangerLow(unsigned char uchChannel, int iDangerLow) 
{							  
	AlarmModule.iDangerLow[uchChannel - 1] = iDangerLow;		
}

/*****************************************************
* 函数介绍: 设置危险上限
* 输入参数: 门限值 通道号
* 输出参数: 无
* 返回值 :	 无
*****************************************************/
void SetDangerHigh(unsigned char uchChannel,unsigned int iDangerHigh ) 
{										
	AlarmModule.iDangerHigh[uchChannel - 1] = iDangerHigh;		
}

/*****************************************************
* 函数介绍: 设置软件倍增状态
* 输入参数: 倍增状态值 通道号
* 输出参数: 无
* 返回值 :	 无
*****************************************************/
void SetTripleStatusALM(unsigned char uchChannel, unsigned char status)//软件倍增状态
{					   
	if (status != 0) status++;
 
	AlarmModule.uchTriple[uchChannel - 1] = status;				 
}

/*****************************************************
* 函数介绍: 设置硬件旁路状态
* 输入参数: 旁路状态值
* 输出参数: 无
* 返回值 :	 无
*****************************************************/
void SetBypassStatusALM(unsigned char uchChannel, unsigned char uchBypassStatus)
{
	AlarmModule.uchSystemBypassStatus[uchChannel - 1] = uchBypassStatus;
}

/*****************************************************
* 函数介绍: 设置自锁状态
* 输入参数: 自锁状态值 通道号
* 输出参数: 无
* 返回值 :	 无
*****************************************************/
void SetLatchStatus(unsigned char uchChannel, unsigned char uchLatchStatus)
{							   
	AlarmModule.uchLatch[uchChannel - 1]= uchLatchStatus;		 
}

//--------------------------------------------------------------------------------------------------
//函数名称:void SetEnableStatusALM( unsigned char uchChannel, unsigned char uchEnableStatus)	  
//功    能:设置通道使能
//输入参数:通道号,使能状态
//返    回:无
//完成日期:4/16/2007
//--------------------------------------------------------------------------------------------------
void SetEnableStatusALM( unsigned char uchChannel, unsigned char uchEnableStatus)//主框架程序调用
{
	AlarmModule.uchEnable[uchChannel - 1] = uchEnableStatus;
	if (AlarmModule.uchEnable[uchChannel - 1] != 0) 
	{
		InitChannel(uchChannel);
	}

	if (uchChannel == 2)	  //初始化参数时,初始化到第二个通道时对报警模块的参数进行调整
	{
		if (AlarmModule.uchChannelType[0] == 22)
		{
			if ((AlarmModule.uchEnable[0] == 0)	|| (AlarmModule.uchEnable[1] == 0))
			{
				AlarmModule.uchEnable[1] = 0;
				AlarmModule.uchEnable[0] = 0;
			}
			else if ((AlarmModule.uchEnable[0] == 1) && (AlarmModule.uchEnable[1] == 1))
			{
				AlarmModule.uchEnable[0] = 1;
				AlarmModule.uchEnable[1] = 1;	//此else可以不要	
			}
		}
	}
}

/*****************************************************
* 函数介绍: 设置系统时钟
* 输入参数: 系统时钟
* 输出参数: 无
* 返回值 :	 无
*****************************************************/
void SetHeartbeatALM(unsigned int uiHeartbeatValue) // 100ms tick rate
{																	 //变量的初始化问题,看程序的执行顺序
	AlarmModule.uiCurrentHeartbeat =  uiHeartbeatValue;
}

//--------------------------------------------------------------------------------------------------
//函数名称:void SetOKStatusALM(unsigned char uchChannel, unsigned char uchOKStatus)	  
//功    能:设置通道OK状态
//输入参数:通道号,OK状态
//返    回:无
//完成日期:4/16/2007
//--------------------------------------------------------------------------------------------------
void SetOKStatusALM(unsigned char uchChannel, unsigned char uchOKStatus)
{							   
	AlarmModule.uchOKStatus[uchChannel - 1] = uchOKStatus;
}

//--------------------------------------------------------------------------------------------------
//函数名称:void SetChannelTypeALM(unsigned char uchChannel, unsigned char uchChannelType)	  
//功    能:设置通道类型
//输入参数:通道号,通道类型
//返    回:无
//完成日期:4/16/2007
//--------------------------------------------------------------------------------------------------
void SetChannelTypeALM(unsigned char uchChannel, unsigned char uchChannelType)
{		//HHH				   
	if (((uchChannelType > 12) && (uchChannelType < 19)) || (uchChannelType == 21) || (uchChannelType == 22)|| (uchChannelType == 28))
	{
		AlarmModule.uchChannelType[uchChannel - 1] = uchChannelType;	  
	}
	else
	{
		AlarmModule.uchChannelType[uchChannel - 1] = 13;	  	
	}
}

/*****************************************************
* 函数介绍: 设置通道当前测量值
* 输入参数: 当前测量值 通道号
* 输出参数: 无
* 返回值 :	 无
*****************************************************/
void SetCurrentValueALM( unsigned char uchChannel, float iCurrentValue)//当前测量值
{										 	
	AlarmModule.iCurrentValue[uchChannel - 1] = iCurrentValue;		   	
}

/*****************************************************
* 函数介绍: 设置通道报警延迟时间
* 输入参数: 延迟时间 通道号
* 输出参数: 无
* 返回值 :	 无
*****************************************************/
void SetAlertDelay(unsigned char uchChannel, unsigned int iDelay)
{						   
	AlarmModule.uiAlertDelay[uchChannel - 1] = iDelay;				
}  

/*****************************************************
* 函数介绍: 设置通道报警延迟时间
* 输入参数: 延迟时间 通道号
* 输出参数: 无
* 返回值 :	 无
*****************************************************/
void SetDangerDelay(unsigned char uchChannel, unsigned int iDelay)
{								 
	AlarmModule.uiDangerDelay[uchChannel - 1] = iDelay;			
}

/*****************************************************
* 函数介绍: 设置系统复位状态
* 输入参数: 复位状态
* 输出参数: 无
* 返回值 :	 无
*****************************************************/
void SetResetStatusALM(unsigned char uchStatus)
{
	AlarmModule.uchResetStatus[0] = uchStatus;
	AlarmModule.uchResetStatus[1] = uchStatus;
}

//--------------------------------------------------------------------------------------------------
//函数名称:void InitChannel(unsigned char uchChannel)	  
//功    能:初始化通道数据
//输入参数:通道号
//返    回:无
//完成日期:4/16/2007
//--------------------------------------------------------------------------------------------------
void InitChannel(unsigned char uchChannel)
{
	AlarmModule.uiAlertHeartbeatBakH[uchChannel - 1] = 0;
	AlarmModule.uiDangerHeartbeatBakH[uchChannel - 1] = 0;
	AlarmModule.uiAlertHeartbeatBakL[uchChannel - 1] = 0;
	AlarmModule.uiDangerHeartbeatBakL[uchChannel - 1] = 0;
}

//--------------------------------------------------------------------------------------------------
//函数名称:void SetFlagBit(unsigned char uchChannel, unsigned char b)	  
//功    能:置位通道报警位
//输入参数:通道号 ,报警位
//返    回:无
//完成日期:4/16/2007
//--------------------------------------------------------------------------------------------------
void SetFlagBit(unsigned char uchChannel, unsigned char b)
{
	unsigned int idata elapsed;

	if (AlarmModule.uchChannelNotoktoOkFlag[uchChannel - 1] == 1)
	{
		switch (AlarmModule.uchChannelType[uchChannel - 1])
		{
			case 13:		 //加速度输入    加速度输出
			case 14:         //加速度输入    速度输出  
			case 15:		 //加速度输入    位移输出
			case 16:		 //速度输出      速度输出
			case 17:		 //速度输入      位移输出
			case 18:		 //位移输入      位移输出
			case 28:		 //HHH
				if (b == 0x1 || b == 0x2)
				{ 
					return;
				}
				break;
			case 22:				 //LVDT输入    机壳膨胀输出 
				if (((uchChannel-1) == 0)&&(b == 0x1 || b == 0x2))
				{
					return;
				}
				
				break;
			
			default:
				break;
		}
	

⌨️ 快捷键说明

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