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

📄 prediag.cpp

📁 Vxworks 下重矿设备应用开发
💻 CPP
字号:
/*
 * 时域诊断
 * 
 */

#include <time.h>
#include "system.h"
#include "graph.h"
#include <reworks/clock.h>
#include <FL/fl_ask.H>
#include <stdlib.h>
#include <stdio.h>
#define SIGNAL_NUMBER 8	// 信号量个数
extern float databuf[8];
//int SignalDelay[SIGNAL_NUMBER]={1000,1000,2000,1000,2000,1000};

//char* prediag_result="1";  //诊断结果     1--正常		2--低于下限	3--高于上限



#define TIMER_DELAY 1000	// 定时器延时
//#define Timer1  0			// 定义定时器0
int timer[8]={0,1,2,3,4,5,6,7};
int timer_status[8]={0,0,0,0,0,0,0,0};		//计时器状态 	0--不存在	1--就绪		2--已取消
//int prediag_result;  		//诊断结果     1--正常		2--低于下限	3--高于上限

float SignalLimit[SIGNAL_NUMBER][2]={{0.2,4.0},{0.9,4.0},{0.2,4.0},{0.8,1.0},{0.1,1.0},{0.6,1.0},{0.6,1.0},{0.6,1.0}};

unsigned32	t_id[SIGNAL_NUMBER];			// 计时器id

void create_timer(int);
void start_timer(int);
void cancel_timer(int);
void delete_timer(int);


/* 
 * signalindex 表示输入信号量的序号
 * signal 表示输入信号量的值,浮点型
 */
void prediag(int signal_index, float signal[],char* prediag_result)  
{
    timer_status[signal_index] = 0;
 
	create_timer(timer[signal_index]);
	
	if (signal[signal_index] < SignalLimit[signal_index][0])  {
		*prediag_result = '2';
		if (timer_status[signal_index] == 2)
			start_timer(timer[signal_index]);
	}
	else if (signal[signal_index] > SignalLimit[signal_index][1])  {
			*prediag_result = '3';
			if (timer_status[signal_index] == 2)
				start_timer(timer[signal_index]);
		  }
	else  {
		*prediag_result ='1';
		if (timer_status[signal_index] == 1)
			cancel_timer(timer[signal_index]);
	}

/*	if (signal[signal_index] < SignalLimit[signal_index][0])  {
		*prediag_result = '2';
		
	}
	else if (signal[signal_index] > SignalLimit[signal_index][1])  {
			*prediag_result = '3';
		
		  }
	else  {
		*prediag_result ='1';
		
	}*/
}


void create_timer(int signal_index)  {
	OS_STATUS	status;
	char*		t_name;
	
	t_name = "TIMER";
	
	/* 创建计时器 */
	if (timer_status[signal_index] == 0)  {
		status = OSTimerCreate  (t_name , &t_id[signal_index]);
  		if (status != OS_OK)  {
//	   		printf("Create TIMER ERROR\n");
  		}
	    else  {
//    		printf("Create TIMER OK\n");
  			timer_status[signal_index] = 2;    	
	    }
	}	
}


void cancel_timer(int signal_index)  {
	OS_STATUS status;
	
	OSTaskDelay(TIMER_DELAY);

	/* 取消计时器 */
 	status = OSTimerCancel (t_id[signal_index]);
 	if (status != OS_OK)  {
//    	printf("Cancel TIMER ERROR\n");
 	}
    else  {
//    	printf("Cancel TIMER OK\n");
    	timer_status[signal_index] = 2;
    }
}


void delete_timer(int signal_index)  {
	OS_STATUS status;
	
	OSTaskDelay(TIMER_DELAY);

	/* 删除计时器 */
 	status = OSTimerDelete (t_id[signal_index]);
// 	if (status != OS_OK)
//    	printf("Delete TIMER ERROR\n");
//    else
//    	printf("Delete TIMER OK\n");
}	

int ISR_status;
//unsigned32 Display_Task_id;
//static unsigned32 datasem_id;


void t_entry(unsigned32 id , void *data) {
	OS_STATUS status;
	// fl_alert("故障");
	//void fl_alert(const char *, ...);
//	printk("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[%s]\n",data);
//	ISR_status = 1;
/*
		status = OSTaskStart(Display_Task_id, 
                         display, //任务入口地址;
                         10 //传给任务体的参数;
                         );
*/  //这里到底应该如何写代码以保证在图形界面上显示报警信息??                         
}

void start_timer(int signal_index) {
	OS_STATUS	status;

	/* 在一段时间后启动计时器 */
	timer_status[signal_index] = 1;
	
	ISR_status = 0;
	
//	status=OSSemCreate("SEM1",0,OS_BINARY_SEM|OS_FIFO,0,&datasem_id);
	
//	status = OSTaskCreate("tDisplay", 
//                            60,
//                            4096, //分配的堆栈大小
//                            OS_DEFAULT,
//                            OS_DEFAULT,
//                            &Display_Task_id
//                          ); 

    status = OSTimerFireAfter(t_id[signal_index], 5000, t_entry, (void*)"ALARM!!!");
} 


void PreDiagData(void * p)
{
  char* prediag_result[8]={"1","1","1","1","1","1","1","1"};	
  
  while(1)
  {
//  		char* prediag_result="1";
//	prediag(1, databuf,prediag_result);
//	
//	switch (*prediag_result) {
//		case '1': output1->textcolor(FL_BLACK);
//		          
//		           break;
//			
//			  
//			
//			  
//		case '2': output1->textcolor(FL_RED);  //低于下限
//		          
//		           break;
//		           
//		           
//		case '3':
//			
//			output1->textcolor(FL_GREEN);      //高于上限
//			
//			break;
//	}		
//			
	
//	char* prediag_result3="1";
//	char* prediag_result4="1";
//	char* prediag_result5="1";
//	char* prediag_result6="1";
//	char* prediag_result7="1";
//	char* prediag_result8="1";

//	prediag(3, databuf,prediag_result3);
//	prediag(4, databuf,prediag_result4);
//	prediag(5, databuf,prediag_result5);
//	prediag(6, databuf,prediag_result6);
//	prediag(7, databuf,prediag_result7);
//	prediag(8, databuf,prediag_result8);
			
      prediag(0, databuf,prediag_result[0]);
  	  switch (*prediag_result[0]) {
		case '1': output1->textcolor(FL_BLACK);		          
		           break;					  
		case '2': output1->textcolor(FL_RED);  //低于下限
		           break;		           		           
		case '3':			
	 		       output1->textcolor(FL_BLUE);    //高于上限			
			       break;		
				}
	
      prediag(1, databuf,prediag_result[1]);
	  switch (*prediag_result[1]) {
		case '1': output2->textcolor(FL_BLACK);		          
		           break;					  
		case '2': output2->textcolor(FL_RED);  //低于下限
		           break;		           		           
		case '3':			
			       output2->textcolor(FL_BLUE);    //高于上限			
			       break;		
				}	

      prediag(2, databuf,prediag_result[2]);
	  switch (*prediag_result[2]) {
		case '1': output3->textcolor(FL_BLACK);		          
		           break;					  
		case '2': output3->textcolor(FL_RED);  //低于下限
		           break;		           		           
		case '3':			
			       output3->textcolor(FL_RED);    //高于上限			
			       break;		
				}			

      prediag(3, databuf,prediag_result[3]);
	  switch (*prediag_result[3]) {
		case '1': output4->textcolor(FL_BLACK);		          
		           break;					  
		case '2': output4->textcolor(FL_RED);  //低于下限
		           break;		           		           
		case '3':			
			       output4->textcolor(FL_RED);    //高于上限			
			       break;		
				}					

      prediag(4, databuf,prediag_result[4]);
	  switch (*prediag_result[4]) {
		case '1': output5->textcolor(FL_BLACK);		          
		           break;					  
		case '2': output5->textcolor(FL_RED);  //低于下限
		           break;		           		           
		case '3':			
  			       output5->textcolor(FL_RED);    //高于上限			
			       break;		
				}

      prediag(5, databuf,prediag_result[5]);
  	  switch (*prediag_result[5]) {
		case '1': output6->textcolor(FL_BLACK);		          
		           break;					  
		case '2': output6->textcolor(FL_RED);  //低于下限
		           break;		           		           
		case '3':			
			       output6->textcolor(FL_RED);    //高于上限			
			       break;		
				}

      prediag(6, databuf,prediag_result[6]);
	  switch (*prediag_result[6]) {
		case '1': output7->textcolor(FL_BLACK);		          
		           break;					  
		case '2': output7->textcolor(FL_RED);  //低于下限
		           break;		           		           
		case '3':			
			       output7->textcolor(FL_RED);    //高于上限			
			       break;		
				}									

	  prediag(7, databuf,prediag_result[7]);
	  switch (*prediag_result[7]) {
		case '1': output8->textcolor(FL_BLACK);		          
		           break;					  
		case '2': output8->textcolor(FL_RED);  //低于下限
		           break;		           		           
		case '3':			
			       output8->textcolor(FL_RED);    //高于上限			
			       break;		
				}	

	/*delete_timer(timer[0]);
	delete_timer(timer[1]);
	delete_timer(timer[2]);
	delete_timer(timer[3]);
	delete_timer(timer[4]);
	delete_timer(timer[5]);
	delete_timer(timer[6]);
	delete_timer(timer[7]);*/
	
   OSTaskDelay(500);
  }
}

⌨️ 快捷键说明

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