📄 prediag.c__
字号:
/*
* 时域诊断
*
*/
#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 + -