📄 alarm.c
字号:
/******************************************************************************
*
* Copyright (c) 2008 Shanghai IS Software
*
* All rights reserved
*
* $Revision$
*
* $LastChangedBy$
* 1.lcj
*
* $LastChangedData$
* 2008/09/26
*
* Description: read modbus data and alarm
*
* Revision History:
* 2008/09/19 14:33 by lcj
* #1.created
*
*****************************************************************************/
#include "md/md_manager.h"
#include "md/md_info.h"
#include "md/md_reg.h"
#include "alarm/alarm.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define DEVICE "/dev/idr_gpio"
#define ACTIVE_ALARM 1
#define CANCEL_ALARM 0
#define SHOW_ITEM_NUM 8 // 2 pages
#ifdef DEBUG
#define pr_debug(fmt,arg...) \
printf(fmt,##arg)
#else
#define pr_debug(fmt,arg...) \
NULL
#endif
/**
* read modbus data, and caution if the value is abnormality
*
**/
void do_alarm(void)
{
int fd;
int ret;
char buf = ACTIVE_ALARM;
char rx_buf;
fd = open(DEVICE,O_WRONLY | O_NONBLOCK );
if ( fd < 0 )
{
pr_debug("can't open device %s!\n",DEVICE);
return ;
}
ret = write(fd,&buf,1);
if ( ret != 1 )
{
pr_debug(stderr,"fail to write %s\n", DEVICE);
close(fd);
return ;
}
close(fd);
return ;
}
int main(int argc,char **argv)
{
int ret = 0;
int j,i ;
int status;
MD_info * info;
MD_reg_info * reg_info;
int alarm_flag[SHOW_ITEM_NUM],new_flag[SHOW_ITEM_NUM];
for ( i = 0; i < SHOW_ITEM_NUM; i++ )
{
alarm_flag[i] = MD_STATUS_NORMAL;
new_flag[i] = MD_STATUS_VALUE_HI;
}
ret = init_MD_manager(2,5,500);
if ( ret )
{
info = get_MD_info(V_PORT,V_ADDR);
if ( info )
{
i = 0;
while ( i < SHOW_ITEM_NUM )
{
reg_info = (MD_reg_info *)get_reg_info(info,i*2 + 0x101);
if ( reg_info )
{
switch(reg_info->status)
{
case MD_STATUS_VALUE_HH:
if ( alarm_flag[i] != MD_STATUS_VALUE_HH )
{
alarm_flag[i] = MD_STATUS_VALUE_HH;
if ( new_flag[i] < alarm_flag[i] )
do_alarm();
}
break;
case MD_STATUS_VALUE_HI:
if ( alarm_flag[i] != MD_STATUS_VALUE_HI )
{
alarm_flag[i] = MD_STATUS_VALUE_HI;
if ( new_flag[i] < alarm_flag[i] )
do_alarm();
}
break;
case MD_STATUS_VALUE_LO:
if (alarm_flag[i] != MD_STATUS_VALUE_LO)
{
do_alarm();
alarm_flag[i] = MD_STATUS_VALUE_LO;
}
break;
case MD_STATUS_VALUE_LL:
if ( alarm_flag[i] != MD_STATUS_VALUE_LL )
{
do_alarm();
alarm_flag[i] = MD_STATUS_VALUE_LL;
}
break;
default:
alarm_flag[i] = MD_STATUS_NORMAL;
}
}
new_flag[i] = reg_info->status;
i++;
if ( i == SHOW_ITEM_NUM )
i = 0;
}
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -