我对编程还很陌生,我已经掌握了这项任务。我有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 ++。 抱歉,很长的问题!感谢您的投入和耐心。
答案 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];
类中使用它,以避免重复各个条件。