编程多个变量的另一种方法

时间:2018-08-11 00:55:06

标签: c++

我对编程还很陌生,我已经掌握了这项任务。我有10个电池组,可以与主机系统通信各种数据。我有3个主要的故障安全流程,分别称为故障安全A,故障安全B和故障安全C,以及无故障。 以下是一些详细信息: 当存在电压或继电器故障时,故障安全A较高(含义== 1),这是设置该故障安全情景的示例。

(lb_fail == 00 and (lb_status == 2 or lb_status == 3 or lb_status == 6 
or lb_status ==7)) or voltage > 400 or voltage < 190 etc.

在大约14种不同的情况下,故障保护A为1。仅当满足以下任一条件时,系统才会打印故障保护A = 1。但是,为了了解导致故障保护A为1的情况,我引入了另一个变量reason_bit。 例如

reason_bitA == 0001b when (lb_fail == 00 and (lb_status == 2))
reason_bit == 0010b when (lb_fail == 00 and (lb_status == 3))
reason_bit == 0011b when (lb_fail == 00 and (lb_status == 6)) and so on.

类似地,将故障安全B设置为1的条件为12个,将故障安全C设置为1的条件为12个。故障安全B和C分别具有reason_bitB和reason_bitC。

每10个电池组都有故障安全A,B和C。 我只知道这种原始编码方式:

if(Fail_safe_A1 ==1)   // Fail_safe_A1 corresponds to battery pack 1
{
  if (lb_fail ==0 & lb_status == 2)
     cout << "reason_bitA1 = 0001" << endl;
  if (lb_fail ==0 & lb_status == 3)
     cout << "reason_bitA1 = 0010" << endl; 
  if (lb_fail ==0 & lb_status == 2)
     cout << "reason_bitA1 = 0001" << endl;
}and so on.

我将必须执行14次故障安全A,对故障安全B和C分别进行12次和仅对一包包装。我还有9包需要同样的东西。 以这种方式进行编码只会增加代码中的行数。我觉得,这不是编码此代码的最有效方法。有人可以帮助我提供有关如何更有效地编写代码的意见吗?我正在使用C ++。 抱歉,很长的问题!感谢您的投入和耐心。

1 个答案:

答案 0 :(得分:0)

让自己成为一个代表单个包装的所有标志的类:

if-else

现在,您可以为每个电池组制作"Always on top" = False的数组或向量,而不必为每个电池组复制代码:

class pack_status {
    int status_bits;
    int lb_fail;
    int lb_status;
    ...
};

此外,您可以为pack_status编写一个类,并在pack_status pack_stat[10]; 类中使用它,以避免重复各个条件。