📄 comm.c
字号:
{
*(unsigned int xdata *)&pOutput->uiTripValue[pInput[4] - 1] = *(unsigned int *)&pInput[5];
WriteSystemPara(0,(unsigned char xdata *)pOutput, PARALENGTH*2);
}
else if ((pInput[4] == 3) || (pInput[4] == 4))
{
*(unsigned int xdata *)&pOutput->uiTripValue[pInput[4] - 3] = *(unsigned int *)&pInput[5];
WriteSystemPara(0,(unsigned char xdata *)pOutput, PARALENGTH*2);
}
else if (pInput[4] == 0xff)
{
*(unsigned int xdata *)&pOutput->uiTripValue[0] = *(unsigned int *)&pInput[5];
*(unsigned int xdata *)&pOutput->uiTripValue[1] = *(unsigned int *)&pInput[5];
WriteSystemPara(0,(unsigned char xdata *)pOutput, PARALENGTH*2);
}
}
break;
case READ_MODULE_STYLE : //0x10 读模块类型
ReportModuleType(MODULE20, ReadCANAddress());
break;
case SYSTEMSELFTEST: //0x30 系统自检测试
SetSelfTestControlStatusMain(*(unsigned int *)&pInput[4]);
break;
default :
break;
}
}
}
//--------------------------------------------------------------------------------------------------
//函数名称:void JudgeChannelTypePara(void)
//功 能:判断通道类型的参数,如果通道类型不正确,则默认通道类型
//输入参数:无
//返 回:无
//--------------------------------------------------------------------------------------------------
void JudgeChannelTypePara(void)
{
if (((uiForeChannelType > 12) && (uiForeChannelType < 19)) || (uiForeChannelType == 21) || (uiForeChannelType == 22)
|| (uiForeChannelType == 28))
{
;
}
else
{
uiForeChannelType = 13;
}
}
//----------------------------------------------------------------------------------------------
//函数名称:void SetModuleStatusCOMM(unsigned char uchModuleFlag)
//功 能:从框架模块中将模块状态设置到通信模块中
//输入参数:模块状态
//返 回:无
//完成日期:4/16/2007
//---------------------------------------------------------------------------------------------
void SetModuleStatusCOMM(unsigned char uchModuleFlag)
{
uchModuleConfigStatus = uchModuleFlag;
}
//--------------------------------------------------------------------------------------------------
//函数名称:void ReportAlertEvent(unsigned char uchCh,unsigned int uiAlert)
//功 能:上报报警事件
//输入参数:通道,报警状态
//返 回:无
//完成日期:4/16/2007
//--------------------------------------------------------------------------------------------------
void ReportAlertEvent(unsigned char uchCh,unsigned int uiAlert)
{
uchSendBuf[0] = 0;
uchSendBuf[1] = 0;
uchSendBuf[2] = 4;
uchSendBuf[3] = 0x22;
if (uchCPUAddressStatus == 0) //上CPU上报数据
{
uchSendBuf[4] = uchCh;
}
else if (uchCPUAddressStatus == 1) //下CPU上报数据通道加2 因为之前的计算减了2,减少程序代码
{
uchSendBuf[4] = uchCh + 2;
}
*((unsigned int*)&uchSendBuf[5]) = uiAlert;
SendPackage(0,1,uchSendBuf);
return;
}
/*****************************************************
* 函数介绍: 处理地址偏移量
* 输入参数: 偏移量
* 输出参数: 数据地址
* 返回值 : 无
*****************************************************/
unsigned int AddrMap(unsigned int uiOffset)
{
if(uiOffset < 40237)
{
return (uiOffset - 40200);
}
if(uiOffset < 40253)
{
return (uiOffset - 40251);
}
if(uiOffset >= 40296)
{
return (uiOffset - 40291);
}
return 0; //error, should not come here
}
//--------------------------------------------------------------------------------------------------
//函数名称:void ReportChannelCurrentStatus(unsigned char uchCh,unsigned char uchStatus,unsigned int uiValue,int uiGap)
//功 能:上报通道的状态,实时测量值和间隙电压
//输入参数:通道,状态,实时测量值和间隙电压
//返 回:无
//完成日期:4/16/2007
//--------------------------------------------------------------------------------------------------
void ReportChannelCurrentStatus(unsigned char uchCh,unsigned char uchStatus,unsigned int uiValue,int uiGap)
{
static unsigned char uchCountData = 0;
uchCountData++;
if (uchCountData == 3)
{
RunLEDStartControl(); //灯控制
}
else if (uchCountData >= 6)
{
RunLEDStopControl();
uchCountData = 0;
} //CAN运行灯控制临时添加,判断分析通信上报的状态
uchSendBuf[0] = 0;
uchSendBuf[1] = 0;
uchSendBuf[2] = 7;
uchSendBuf[3] = 0x21;
uchSendBuf[4] = uchCh;
uchSendBuf[5] = uchStatus;
*((unsigned int*)&uchSendBuf[6]) = uiValue;
*((unsigned int*)&uchSendBuf[8]) = uiGap;
if (uchCPUAddressStatus == 0)
{
uchCh = uchCh;
}
else if (uchCPUAddressStatus == 1)
{
uchCh = uchCh - 2;
}
if (uchAlarmStatusJudge[uchCh - 1] == uchAlarmStatusJudgeBAK[uchCh - 1])
{
SendPackage(3,0x01,uchSendBuf);
}
else if (uchAlarmStatusJudge[uchCh - 1] != uchAlarmStatusJudgeBAK[uchCh - 1])
{
SendPackage(1,0x01,uchSendBuf);
uchAlarmStatusJudgeBAK[uchCh - 1] = uchAlarmStatusJudge[uchCh - 1];
} //状态不相等,则优先级提高
}
//--------------------------------------------------------------------------------------------------
//函数名称:void ReportModuleType(unsigned char uchModuleType, unsigned int uchAddress)
//功 能:每个槽地址为偶数的CPU上报模块类型
//输入参数:模块类型,Can通讯地址
//返 回:无
//完成日期:6/22/2007
//--------------------------------------------------------------------------------------------------
void ReportModuleType(unsigned char uchModuleType, unsigned int uchAddress)
{
unsigned int xdata i;
if(uchAddress % 2 == 0)
{
uchSendBuf[0] = 0;
uchSendBuf[1] = 0;
uchSendBuf[2] = 3;
uchSendBuf[3] = 0x11;
*(unsigned int *)&uchSendBuf[4] = uchModuleType;
SendPackage(1,1,uchSendBuf);
}
if (uchAddress % 2 == 1)
{
for (i=0; i<250; i++)
{
;
}
}
}
//--------------------------------------------------------------------------------------------------
//函数名称:void SetAlarmStatusCOMM(unsigned char uchChannel, unsigned char uchAlarmStatus)
//功 能:将报警模块的报警状态设置到通信处理模块中来
//输入参数:通道号,报警状态
//返 回:无
//完成日期:6/22/2007
//--------------------------------------------------------------------------------------------------
void SetAlarmStatusCOMM(unsigned char uchChannel, unsigned char uchAlarmStatus)
{
uchAlarmStatusJudge[uchChannel - 1] = uchAlarmStatus;
}
//--------------------------------------------------------------------------------------------------
//函数名称:void InitCOMMModulePara(void)
//功 能:初始化通信模块中的变量参数
//输入参数:无
//返 回:无
//完成日期:6/22/2007
//--------------------------------------------------------------------------------------------------
void InitCOMMModulePara(void)
{
uchModuleConfigStatus = 0x00;
}
//--------------------------------------------------------------------------------------------------
//函数名称:void SetCPUAddressFlagCOMM(unsigned char uchCPUAddressFlag)
//功 能:将CPU地址的状态设置到通信模块中
//输入参数:CPU地址状态
//返 回:无
//完成日期:6/22/2007
//--------------------------------------------------------------------------------------------------
void SetCPUAddressFlagCOMM(unsigned char uchCPUAddressFlag)
{
uchCPUAddressStatus = uchCPUAddressFlag;
}
//--------------------------------------------------------------------------------------------------
//函数名称:void ReportSystemEvent(unsigned char uchChannel,unsigned int uiSystemEvent)
//功 能:上报系统事件
//输入参数:系统事件
//返 回:无
//完成日期:6/22/2007
//--------------------------------------------------------------------------------------------------
void ReportSystemEvent(unsigned char uchChannel,unsigned int uiSystemEvent)
{
uchSendBuf[0] = 0;
uchSendBuf[1] = 0;
uchSendBuf[2] = 4; //数据长度
uchSendBuf[3] = 0x0E;
if (uchChannel == 0) //通道号为零,则是普通系统事件,不区分上下CPU
{
uchSendBuf[4] = uchChannel;
}
else //通道号不为零,则是特殊系统事件,要区分上下CPU
{
if (uchCPUAddressStatus == 0) //放在这判断是为了压缩程序代码
{
uchSendBuf[4] = uchChannel;
}
else if (uchCPUAddressStatus == 1)
{
uchSendBuf[4] = uchChannel + 2;
}
}
// uchSendBuf[4] = uchChannel; //后删除20080514
*((unsigned int*)&uchSendBuf[5]) = uiSystemEvent;
SendPackage(0,1,uchSendBuf);
return;
}
//--------------------------------------------------------------------------------------------------
//函数名称:void SetConfigChannelStatus(unsigned char uchChannel,unsigned char uchChannelStatusFlag)
//功 能:判断通道参数配置是否正确
//输入参数:通道号,通道配置标志 0:没配置过 1:配置不正确 2:配置正确 3:通道不存在
//返 回:无
//完成日期:6/22/2007
//--------------------------------------------------------------------------------------------------
/*void SetConfigChannelStatus(unsigned char uchChannel,unsigned char uchChannelStatusFlag)
{
uchConfigChannelStatus[uchChannel - 1] = uchChannelStatusFlag;
} */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -