📄 testprog.c
字号:
m_br_work_sty1 = 1;
m_br_work_sty2 = 0;
m_br_work_sty3 = 0;
}
else if(m_get_gzfs ==5)
{
printf_hz(8, 0,":最高平均值");
m_br_work_sty1 = 1;
m_br_work_sty2 = 0;
m_br_work_sty3 = 1;
}
else if(m_get_gzfs ==6)
{
printf_hz(8, 0,":自动调节 ");
m_br_work_sty1 = 1;
m_br_work_sty2 = 1;
m_br_work_sty3 = 0;
}
printf_hz(28,0,"MA");
if(m_get_cur2 < 1000)
{
display_zf(25,0,3,m_get_cur2,1);
display_zf(21,0,2,m_get_vol2,1);
printf_hz(23,0,"KV");
}
else
{
display_zf(24,0,4,m_get_cur2,1);
display_zf(20,0,2,m_get_vol2,1);
printf_hz(22,0,"KV");
}
//查找给定的一次电流
//
//暂时引用火花次数作为计数器
m_hh_count = m_get_cur2/100-1; //-2
if(m_get_vol2 == 72)
m_cur1_given = curlimit72[m_hh_count];
else if(m_get_vol2 ==66)
m_cur1_given = curlimit66[m_hh_count];
else if(m_get_vol2 == 60)
m_cur1_given = curlimit60[m_hh_count];
m_cur1_given_div4 = m_cur1_given/4;
m_max_ss = curlimit11[m_hh_count];
// m_cur1_com = m_cur1_given/10;
m_cur2_div6= m_get_cur2/6;
m_cur2_div3= m_get_cur2/3;
m_cur2_div4= m_get_cur2/4;
m_cur2_div4_3 = m_cur2_div4*3;
//==============================================================
if(m_get_ykfs == 2)
m_br_dcs = TRUE;
else if(m_get_ykfs == 1)
m_br_dcs = FALSE;
P2DDRH = 0x5f; //attention please! change later!
P2DDRL = 0xf5; //
P2 = 0x7f; //P2.5 = 1
//===============================================================
m_r_in = 0; //记录标志初始化
m_br_can_s = FALSE;
for(i = 0;i<18;i++)
ser_rec[i] = 0;
if(RI_0)
{
i = SBUF0;
RI_0 =0;
}
TI_0 = 0;
m_change_mode = 0;
m_vol1 = 0; //一次电压
m_cur1 = 0;
m_vol2 = 0;
m_cur2 = 0;
m_dtj = 0;
m_now_hhl = 0;
m_tem_cur2_6 = 0;
m_tem_cur2_7 = 0;
m_tempurature = 0;
icbase1 = 0;
m_fdb_tc = (m_get_fdb-1)*277; //每个台阶为10度
m_left_fdb_tc = 8900 - m_fdb_tc;
EA = SET;
EWDI = SET;
WDTCON = 0x80; // Set EWDT
WDTCON = 0x09; // Clear EWDT – Watchdog enabled
gon2:
WDTCON |= 0x20; // Set RWDT, other bits unaffected
WDTCON &= ~0x20; // Clear RWDT—watchdog reset
EX0 = CLEAR; //禁止中断
ET0 = CLEAR;
ET1 = CLEAR;
U_DRV = SET;
work_sta = SET; //备妥
ES = SET; //改为常打开方式
// if(m_br_jkyk == TRUE && m_br_dcs == FALSE) //2005-10-15
// ES = SET; //2005-10-15
// else //2005-10-15
// ES = CLEAR; //2005-10-15
if(icbase1 != 0) //故障时间,合不上闸刀
{
U_BJ = CLEAR; //铃响,提示开机
}
if(m_br_work == FALSE)
{
scan_jp(30,0);
if( jp_code == 0x0b && m_br_jkyk == FALSE ) //启动/停机键(处于近控方式)
m_br_work =!m_br_work;
else if(jp_code == 0x0c)
{
m_br_jkyk =! m_br_jkyk;
if(m_br_jkyk == TRUE && m_br_dcs == TRUE )
{
ES = CLEAR;
}
else
{
ES = SET;
m_r_in = 0;
ser_rec[0] = 0;
ser_rec[1] = 0;
ser_rec[2] = 0;
ser_rec[3] = 0;
}
// if(m_br_jkyk == FALSE )
// {
// //ES = CLEAR;
// ES = SET;
// m_r_in = 0;
// ser_rec[0] = 0;
// ser_rec[1] = 0;
// ser_rec[2] = 0;
// ser_rec[3] = 0;
//
// }
// if(m_br_jkyk == TRUE && m_br_dcs == FALSE)
// {
// ES = SET;
// m_r_in = 0;
// ser_rec[0] = 0;
// ser_rec[1] = 0;
// ser_rec[2] = 0;
// ser_rec[3] = 0;
// }
m_br_work = FALSE;
}
else if(jp_code == 0x08) //关闭退出的通道
{
U_STO = SET; //初始没有备妥信号
goto init;
}
}
work_sta = SET; //
// if( m_br_jkyk == TRUE && icbase1 == 0 )//&& m_br_dcs == TRUE
// {
// U_STO = CLEAR; //远控备妥信号
// }
// else
// {
// U_STO = SET; //非远控、或者是远控,但是不是DCS方式
// }
if( icbase1 == 0 )
{
U_STO = CLEAR; //远控备妥信号
}
else
{
U_STO = SET; //非远控、或者是远控,但是不是DCS方式
}
//如果属于遥控工作方式,即使在休息时间,也能进行通信
// if(m_br_jkyk == TRUE && m_br_dcs == FALSE)
if( m_br_dcs == FALSE) //更改为远控近控都有通信操作
{
//----------------------------------------
//连线状态下的开机,停机操作
if( ser_rec[0] != 0xa5 && ser_rec[1] != m_get_jh ) //
{
m_r_in = 0; //继续从零开始接收
m_br_can_s = FALSE;
ser_rec[0] = 0;
ser_rec[1] = 0;
ser_rec[2] = 0;
ser_rec[3] = 0;
ES = SET; //已经接收到发往本机的信息
DE_S = CLEAR; //禁止发送信息
}
else if((m_r_in == ser_rec[3]) && m_r_in >3 )
{
ES = CLEAR; //已经接收到发往本机的信息
if( ser_rec[0] != 0xa5 || ser_rec[1] != m_get_jh )
{
//-------------------------- 仅仅是擦除,不做任何反应
m_r_in = 0; //继续从零开始接收
ser_rec[0] = 0;
ser_rec[1] = 0;
ser_rec[2] = 0;
ser_rec[3] = 0;
ES = SET; //已经接收到发往本机的信息
goto exit_this;
}
c_c = ser_rec[0];
for(z = 1; z < m_r_in -1; z++)
{
c_c += ser_rec[z];
WDTCON |= 0x20; // Set RWDT, other bits unaffected
WDTCON &= ~0x20; // Clear RWDT—watchdog reset
}
if(c_c == ser_rec[m_r_in - 1]) //判断累加和是否相等
{
//累加和正确,接收到正确的信息
if( ser_rec[2] == 0x8d )
{
if(ser_rec[4] == 0xff && m_br_jkyk == TRUE && m_br_dcs == FALSE)
m_br_work = TRUE;
else if(ser_rec[4] == 0 && m_br_jkyk == TRUE && m_br_dcs == FALSE)
{
m_br_work = FALSE;
U_BJ = SET; //用于上位机关闭报警
icbase1 = 0; //用于上位机关闭报警
}
fetch_succ(); //回应正确的通信
}
else if( ser_rec[2] == 0x0d) //要求状态
{
ser_rec[0] = 0x9A;
ser_rec[1] = m_get_jh;
ser_rec[2] = 0x0d;
ser_rec[3] = 0x12; //17;
ser_rec[4] = 0; //一次电压
ser_rec[5] = 0; //
ser_rec[6] = 0; //一次电流
ser_rec[7] = 0; //
ser_rec[8] = 0; //二次电压
ser_rec[9] = 0; //二次电流
ser_rec[10] = 0; //
ser_rec[11] = 0; //导通角
ser_rec[12] = 0; //省掉火花率
ser_rec[13] = 0; //m_tempurature; //油温
ser_rec[14] = icbase1; //报警状态
ser_rec[15] = icbase3; //工作状态
ser_rec[16] = 0; //工作状态
//========================================================
//发送相关的数据
ES = CLEAR;
DE_S = SET; // ADDING 2003-12-19
TB8_0 = 0;
TI_0 = 0;
for( z = 0 ;z < 16; z++ )
{
SBUF0 = ser_rec[z];
while(!TI_0){};
TI_0 = 0;
ser_rec[16] += ser_rec[z];
}
SBUF0 = ser_rec[16];
while(!TI_0){};
TI_0 = 0;
SBUF0 = 0;
while(!TI_0){};
TI_0 = 0;
DE_S = CLEAR; // ADDING 2003-12-19
m_r_in = 0;
ser_rec[0] = 0;
ser_rec[1] = 0;
ser_rec[2] = 0;
ser_rec[3] = 0;
ES = SET;
}
else if( ser_rec[2] == 0x98)
{
//--------------------------------------------不写进内部数据区
m_cur1_given = ser_rec[4]*256 + ser_rec[5] ; //用16进制格式
m_get_vol2 = ser_rec[6];
m_cur2_climit = ser_rec[7]*256 + ser_rec[8]; //用16进制格式
m_get_dtj = ser_rec[9]; //用16进制格式
m_get_hhl = ser_rec[10]; //用16进制格式
m_get_ljyw = ser_rec[11]; //用16进制格式
m_get_gzfs = ser_rec[12]; //用16进制格式
fetch_succ(); //回应正确的通信
if(m_get_gzfs ==1)
{
printf_hz(8, 0,":间歇供电 ");
m_br_work_sty1 = 0;
m_br_work_sty2 = 0;
m_br_work_sty3 = 1;
}
else if(m_get_gzfs ==2)
{
printf_hz(8, 0,":定值火花率");
m_br_work_sty1 = 0;
m_br_work_sty2 = 1;
m_br_work_sty3 = 0;
}
else if(m_get_gzfs ==3)
{
printf_hz(8, 0,":临界少火花");
m_br_work_sty1 = 0;
m_br_work_sty2 = 1;
m_br_work_sty3 = 1;
}
else if(m_get_gzfs ==4)
{
printf_hz(8, 0,":脉冲供电 ");
m_br_work_sty1 = 1;
m_br_work_sty2 = 0;
m_br_work_sty3 = 0;
}
else if(m_get_gzfs ==5)
{
printf_hz(8, 0,":最高平均值");
m_br_work_sty1 = 1;
m_br_work_sty2 = 0;
m_br_work_sty3 = 1;
}
else if(m_get_gzfs ==6)
{
printf_hz(8, 0,":自动调节 ");
m_br_work_sty1 = 1;
m_br_work_sty2 = 1;
m_br_work_sty3 = 0;
}
//重新写量程信息
if(m_get_vol2 > 72 )
m_get_vol2 = 72;
if(m_get_cur2 < 1000)
{
display_zf(25,0,3,m_get_cur2,1);
display_zf(21,0,2,m_get_vol2,1);
printf_hz(23,0,"KV");
}
else
{
display_zf(24,0,4,m_get_cur2,1);
display_zf(20,0,2,m_get_vol2,1);
printf_hz(22,0,"KV");
}
//重新写量程信息
if(m_get_cur2 < 1000)
{
display_zf(25,0,3,m_get_cur2,1);
display_zf(21,0,2,m_get_vol2,1);
printf_hz(23,0,"KV");
}
else
{
display_zf(24,0,4,m_get_cur2,1);
display_zf(20,0,2,m_get_vol2,1);
printf_hz(22,0,"KV");
}
}
}
else fetch_fail();
}
exit_this: printf_hz(0,0,"远控");
}
// else if(m_br_jkyk == TRUE && m_br_dcs == TRUE ) //DCS 工作方式
if(m_br_jkyk == TRUE && m_br_dcs == TRUE ) //DCS 工作方式
{
if( ACH7 == FALSE && icbase1 == 0)
{
m_br_work = TRUE;
U_STO = CLEAR; //远控状态,DCS方式下备妥信号
}
if( ACH7 == TRUE) m_br_work = FALSE;
printf_hz(0,0,"远控");
ES = CLEAR;
}
else if(m_br_jkyk == FALSE)
{
U_STO = SET;//CLEAR;//2004/12/11 //近控状态,DCS方式下无备妥信号
printf_hz(0,0,"近控");
// m_r_in = 0;
// ser_rec[0] = 0;
// ser_rec[1] = 0;
// ser_rec[2] = 0;
// ser_rec[3] = 0;
// ES = CLEAR;
}
if(m_br_work == TRUE && icbase1 == 0 )
{
printf_hz(4, 0,"工作");
U_STA = CLEAR; // -----正逻辑
// U_STO = CLEAR; //???????????????????????
}
else if( m_br_work == FALSE )
{
printf_hz(4, 0,"停机");
U_STA = SET; // -----正逻辑
clszf();
goto gon2;
}
ET0 = 0;
TR0 = 0;
U_DRV = SET;
ET1 = 0;
TR1 = 0;
icbase0 &= 0x30; //all kinds of flags
icbase1 = 0;
icbase2 = 0;
printf_hz(5, 7," "); //擦除报警的标志以及描述
if(m_br_work == FALSE ) goto gon2;
if(m_br_work == TRUE)
{
clszf();
if(HS1_0 == FALSE) //wa si signal
{
m_br_wsbj = TRUE;
m_br_work = FALSE;
printf_hz(5, 7,"瓦斯报警 ");
}
else
{
printf_hz(5, 7,"无 ");
}
m_zkb_now = m_get_zkb/2+1;
m_set_interval = 6000/m_get_hhl; //间隔的中断次数
m_fsmc = m_get_mcfs-1;
m_cur2_limit = m_get_cur2+ m_get_cur2/9;
m_pulse_count = 0;
m_detel_k = m_get_cur2/100; //--------
m_tempurature = 0;
m_third_sec = 0;
m_hh_count = 0;
m_int_count_rec = 7; //记录火花之间的间隔
m_br_reach = TRUE;//FALSE; //最初的12秒定时标志
m_br_fs = FALSE; //at first ,it's mustn't lock wave to zero
m_br_plc = FALSE;
m_br_u2 = FALSE;
m_br_zz = FALSE;
m_br_xy = FALSE;
U_BJ = SET; //报警装置平时带电
m_br_can_s = FALSE; //可以发送回馈信息
m_br_open = FALSE;
m_br_over8 = FALSE;
m_int_count = 0; //clear the count value of interrupt
m_tc = 1600;
m_tc_max = 2500;
con_speed = 3; //初始阶段的上升速度
m_tc_old = 3500;
m_count_kkg_kl = 0;
m_vol2_new = 0;
m_send_ref = 0; //工作期间,数据发送的参考
m_vol2_old_01 = 0;
m_vol2_old_90 = 0;
m_vol2_old_10 = 0;
m_count_low = 0;
m_count_plc = 0;
m_count_open = 0;
m_count_dl2 = 0; //二次电流短路计数
m_now_hhl = 0;
m_r_in = 0; //用于记录接收到的信息
m_vol1 = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -