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

📄 alarm.c

📁 接受modbus rtu协议的数据,报警应用程序.
💻 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 + -