问题找到了

[复制链接]
2968|10
 楼主| thanksgiving 发表于 2010-7-9 15:35 | 显示全部楼层 |阅读模式
本帖最后由 thanksgiving 于 2010-7-9 17:36 编辑

多台设备,现在要有报警出报警ALM(),没报警有警告出警告WRN(),没报警和警告出正常运行RUN();
如果有空闲,则运行相应的ALM_IDL(), WRN_IDL(), IDL();

用单片机处理的,我的程序逻辑有问题,但是看不出来,请高手指点。
ayb_ice 发表于 2010-7-9 15:38 | 显示全部楼层
switch(f){
case ALARM:
    ALM();
    break
case WARNING:
    WRN();
    break
case ...:
...
}
h292 发表于 2010-7-9 16:06 | 显示全部楼层
switch(f){
case ALARM==1:
    ALM();
    break
case WARNING==1:
    WRN();
    break
case ...:
...
}

你试一下
 楼主| thanksgiving 发表于 2010-7-9 16:10 | 显示全部楼层
switch 没问题,现在好像是前面的逻辑判断出错。
 楼主| thanksgiving 发表于 2010-7-9 16:11 | 显示全部楼层
while(1)
        {


                if(b_I1A && b_I1B && b_I2A && b_I2B) //无IDLE报警,高
                {
                        if((b_A1A==0)||(b_A1B==0)||(b_A2A==0)||(b_A2B==0)||(b_P1A!=b_P1B)||(b_P2A!=b_P2B))
                        {
                                ALM();
                        }
                        else
                        {
                                if((b_W1A==0)||(b_W1B==0)||(b_W2A==0)||(b_W2B==0))
                                {
                                        WRN();
                                }
                                else
                                        RUN();
                        }
                }
                else //有IDLE报警,低
                {
                        if((b_A1A==0)||(b_A1B==0)||(b_A2A==0)||(b_A2B==0)||(b_P1A!=b_P1B)||(b_P2A!=b_P2B))
                        {
                                ALM_IDL();
                        }
                        else
                        {       
                                if((b_W1A==0)||(b_W1B==0)||(b_W2A==0)||(b_W2B==0))
                                {
                                        WRN_IDL();
                                }
                                else
                                        RUN_IDL();
                        }
                }                       
       
        }
 楼主| thanksgiving 发表于 2010-7-9 16:12 | 显示全部楼层
我原来也是用的switch, 后来改成IF了
 楼主| thanksgiving 发表于 2010-7-9 16:15 | 显示全部楼层
b_Ixx等表示空闲,
b_Wxx等表示警告,
b_Axx等表示报警。
xx表示第几台设备。
其中1A和1B......2A和2B是连在一起的,不同时开关也报警。
ayb_ice 发表于 2010-7-9 16:51 | 显示全部楼层
为了避免逻辑混乱,不要用使用else部分
if(xx && ...) // 报警
{
...
}
if(xx && ...) // 警告
{
...
}
....
 楼主| thanksgiving 发表于 2010-7-9 17:36 | 显示全部楼层
问题找到了,是读不到IO口状态。
可是我IO口高>5V
低<1V

为什么读不到状态?
zjswuyunbo 发表于 2010-7-9 18:56 | 显示全部楼层
不知道,没图…
自然的天逸 发表于 2010-7-10 13:50 | 显示全部楼层
低<0.8V
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

153

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部