打印

问题找到了

[复制链接]
1555|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 没问题,现在好像是前面的逻辑判断出错。

使用特权

评论回复
5
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();
                        }
                }                       
       
        }

使用特权

评论回复
6
thanksgiving|  楼主 | 2010-7-9 16:12 | 只看该作者
我原来也是用的switch, 后来改成IF了

使用特权

评论回复
7
thanksgiving|  楼主 | 2010-7-9 16:15 | 只看该作者
b_Ixx等表示空闲,
b_Wxx等表示警告,
b_Axx等表示报警。
xx表示第几台设备。
其中1A和1B......2A和2B是连在一起的,不同时开关也报警。

使用特权

评论回复
8
ayb_ice| | 2010-7-9 16:51 | 只看该作者
为了避免逻辑混乱,不要用使用else部分
if(xx && ...) // 报警
{
...
}
if(xx && ...) // 警告
{
...
}
....

使用特权

评论回复
9
thanksgiving|  楼主 | 2010-7-9 17:36 | 只看该作者
问题找到了,是读不到IO口状态。
可是我IO口高>5V
低<1V

为什么读不到状态?

使用特权

评论回复
10
zjswuyunbo| | 2010-7-9 18:56 | 只看该作者
不知道,没图…

使用特权

评论回复
11
自然的天逸| | 2010-7-10 13:50 | 只看该作者
低<0.8V

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

153

帖子

0

粉丝