组态王编程
IF(\\local\A1罐_状态 ==0)
{ \\local\A1_State="1待机";}
else IF
(\\local\A1罐_状态 ==1)
{ \\local\A1_State="2_1灌水准备";}
else IF
(\\local\A1罐_状态 ==2)
{ \\local\A1_State="2_2排气";}
else IF
(\\local\A1罐_状态 ==3)
{ \\local\A1_State="3正冲洗";}
else IF
(\\local\A1罐_状态 ==4)
{ \\local\A1_State="4过滤";}
else IF
(\\local\A1罐_状态 ==5)
{ \\local\A1_State="5_1反洗准备";}
else IF
(\\local\A1罐_状态 ==6)
{ \\local\A1_State="5_2水反洗";}
else IF
(\\local\A1罐_状态 ==7)
{ \\local\A1_State="5_3水气混洗";}
else IF
(\\local\A1罐_状态 ==8)
{ \\local\A1_State="6_1静止";}
else IF
(\\local\A1罐_状态 ==9)
{ \\local\A1_State="6_2排水";}
else IF
(\\local\A1罐_状态 ==10)
{ \\local\A1_State="6_3气擦洗";}
else IF
(\\local\A1罐_状态 == 11)
{ \\local\A1_State="7_1停";}
else IF
(\\local\A1罐_状态 == 12)
{ \\local\A1_State="7_2水反洗";}
else IF
(\\local\A1罐_状态 == 13)
{ \\local\A1_State="7_3停机";}
else IF
(\\local\A1罐_状态 ==14)
{ \\local\A1_State="8_1进药";}
else IF
(\\local\A1罐_状态 ==15)
{ \\local\A1_State="8_2浸泡";}
else IF
(\\local\A1罐_状态 ==16)
{ \\local\A1_State="8_3排药";}
else IF
(\\local\A1罐_状态 == 17)
{ \\local\A1_State="9_1反洗准备";}
else IF
(\\local\A1罐_状态 == 18)
{ \\local\A1_State="9_2水反洗";}
else IF
(\\local\A1罐_状态 == 19)
{ \\local\A1_State="9_3水气混洗";}
else IF
(\\local\A1罐_状态 == 20)
{ \\local\A1_State="10_1静止";}
else IF
(\\local\A1罐_状态 == 21)
{ \\local\A1_State="10_2排水";}
else IF
(\\local\A1罐_状态 == 22)
{ \\local\A1_State="10_3气擦洗";}
else IF
(\\local\A1罐_状态 == 23)
{ \\local\A1_State="11_1停";}
else IF
(\\local\A1罐_状态 == 24)
{ \\local\A1_State="11_2水反洗";}
else IF
(\\local\A1罐_状态 == 25)
{ \\local\A1_State="11_3气擦洗";}
else IF
(\\local\A1罐_状态 == 26)
{ \\local\A1_State="12_1静止";}
else IF
(\\local\A1罐_状态 == 27)
{ \\local\A1_State="12_2排水";}
else IF
(\\local\A1罐_状态 == 28)
{ \\local\A1_State="12_2气擦洗";}
else IF
(\\local\A1罐_状态 == 29)
{ \\local\A1_State="13正冲";}
else
{ \\local\A1_State="超限";}用组态王7.5SP5
有更简洁的方式吗
可以使用switch语句来简化代码:
switch(\\local\A1罐_状态) {
case 0: \\local\A1_State="1待机"; break;
case 1: \\local\A1_State="2_1灌水准备"; break;
case 2: \\local\A1_State="2_2排气"; break;
case 3: \\local\A1_State="3正冲洗"; break;
case 4: \\local\A1_State="4过滤"; break;
case 5: \\local\A1_State="5_1反洗准备"; break;
case 6: \\local\A1_State="5_2水反洗"; break;
case 7: \\local\A1_State="5_3水气混洗"; break;
case 8: \\local\A1_State="6_1静止"; break;
case 9: \\local\A1_State="6_2排水"; break;
case 10: \\local\A1_State="6_3气擦洗"; break;
case 11: \\local\A1_State="7_1停"; break;
case 12: \\local\A1_State="7_2水反洗"; break;
case 13: \\local\A1_State="7_3停机"; break;
case 14: \\local\A1_State="8_1进药"; break;
case 15: \\local\A1_State="8_2浸泡"; break;
case 16: \\local\A1_State="8_3排药"; break;
case 17: \\local\A1_State="9_1反洗准备"; break;
case 18: \\local\A1_State="9_2水反洗"; break;
case 19: \\local\A1_State="9_3水气混洗"; break;
case 20: \\local\A1_State="10_1静止"; break;
case 21: \\local\A1_State="10_2排水"; break;
case 22: \\local\A1_State="10_3气擦洗"; break;
case 23: \\local\A1_State="11_1停"; break;
case 24: \\local\A1_State="11_2水反洗"; break;
case 25: \\local\A1_State="11_3气擦洗"; break;
case 26: \\local\A1_State="12_1静止"; break;
case 27: \\local\A1_State="12_2排水"; break;
case 28: \\local\A1_State="12_2气擦洗"; break;
case 29: \\local\A1_State="13正冲"; break;
default: \\local\A1_State="超限"; break;
}
此代码使用switch语句,以\\local\A1罐_状态作为选项。如果\\local\A1罐_状态在0到29之间,则设置\\local\A1_State对应的值。如果状态超出此范围,则将\\local\A1_State设置为"超限"。 还有其他方式呢? Li123456 发表于 2023-04-13 12:37
还有其他方式呢?
可以使用数组和索引来简化代码:
// 定义状态数组
string states[] = { "1待机", "2_1灌水准备", "2_2排气", "3正冲洗", "4过滤", "5_1反洗准备", "5_2水反洗", "5_3水气混洗", "6_1静止",
"6_2排水", "6_3气擦洗", "7_1停", "7_2水反洗", "7_3停机", "8_1进药", "8_2浸泡", "8_3排药", "9_1反洗准备",
"9_2水反洗", "9_3水气混洗", "10_1静止", "10_2排水", "10_3气擦洗", "11_1停", "11_2水反洗", "11_3气擦洗",
"12_1静止", "12_2排水", "12_2气擦洗", "13正冲", "超限" };
int index = \\local\A1罐_状态; // 获取状态索引
\\local\A1_State = index >= 0 && index < 30 ? states : states; // 设置对应的状态值,如果超出范围,则设置为“超限”
此代码使用一个字符串数组来存储所有的状态值。然后使用\\local\A1罐_状态作为索引,并通过判断该索引是否在0~29之间来设置\\local\A1_State的值。如果超出此范围,则设置\\local\A1_State为“超限”。 要求应用在软件组态王7.5 SP5 Li123456 发表于 2023-04-13 12:48
要求应用在软件组态王7.5 SP5
在组态王7.5 SP5中,你可以使用定义常量的方式来代替数组:
// 定义常量const string STATE_0 = &quot;1待机&quot;;const string STATE_1 = &quot;2_1灌水准备&quot;;const string STATE_2 = &quot;2_2排气&quot;;const string STATE_3 = &quot;3正冲洗&quot;;const string STATE_4 = &quot;4过滤&quot;;const string STATE_5 = &quot;5_1反洗准备&quot;;const string STATE_6 = &quot;5_2水反洗&quot;;const string STATE_7 = &quot;5_3水气混洗&quot;;const string STATE_8 = &quot;6_1静止&quot;;const string STATE_9 = &quot;6_2排水&quot;;const string STATE_10 = &quot;6_3气擦洗&quot;;const string STATE_11 = &quot;7_1停&quot;; 软件西门博图v16;写一个模拟量转换FB程序 Li123456 发表于 2023-04-13 14:59
软件西门博图v16;写一个模拟量转换FB程序 ...
在西门博图v16中,你可以按照以下步骤来编写模拟量转换FB程序:
1. 创建一个新的FB,在工程画面的“类型定义”中选择“标准函数块”,然后在弹出的菜单中选择“FUNCTION_BLOCK”。
2. 为FB指定名称,并定义输入和输出参数。例如,你可以声明两个输入参数ANALOG_IN和ANALOG_TYPE,以及一个输出参数ANALOG_OUT。
3. 编写程序代码,将输入的模拟量转换为所需的类型。以下是一个示例程序:
FUNCTION_BLOCK ANALOG_CONVERTER
VAR_INPUT
ANALOG_IN: REAL;
ANALOG_TYPE: STRING(10);
END_VAR
VAR_OUTPUT
ANALOG_OUT: REAL;
END_VAR
CASE ANALOG_TYPE OF
'VOLTAGE': ANALOG_OUT := ANALOG_IN * 1000; // 将输入值转换为毫伏
'CURRENT': ANALOG_OUT := ANALOG_IN * 100; // 将输入值转换为毫安
ELSE ANALOG_OUT := 0; // 如果不是已知类型,则输出0
END_CASE
END_FUNCTION_BLOCK
4. 在需要使用该FB的程序中调用该FB,并传递所需的输入参数。例如,假设需要将一个电流信号转换为毫安输出,可以按以下方式调用FB:
ANALOG_CONVERTER(ANALOG_IN:= 5.5, ANALOG_TYPE:= 'CURRENT', ANALOG_OUT=> myOutput);
其中,5.5是输入的电流值,'CURRENT'表示需要将其转换为毫安,而myOutput则是输出的结果变量。 软件西门博图v16;写一个4-20MA转换为浮点数模拟量转换FB程序 Li123456 发表于 2023-04-13 15:02
软件西门博图v16;写一个4-20MA转换为浮点数模拟量转 ...
在西门博图v16中,你可以按照以下步骤来编写4-20MA转换为浮点数模拟量转换FB程序:
1.创建一个新的FB,在工程画面的“类型定义”中选择“标准函数块”,然后在弹出的菜单中选择“FUNCTION_BLOCK”。
2.为FB指定名称,并定义输入和输出变量。输入变量包括:AI(模拟量输入,单位:mA),上下限值(最小值和最大值),输出变量为AO(模拟量输出,单位:mV)。
3.在FB中添加代码以将输入变量转换为模拟量输出值。可以使用以下公式:AO = (AI - 4) / 16 * (上限值 - 下限值) + 下限值。这个公式会将 4-20mA 的电流信号转换为浮点数模拟量信号。注意,在输出变量 AO 的数据类型应该设置为 Real。
4.保存并编译 FB 程序。
FB程序代码示例:
FUNCTION_BLOCK AI_TO_AO
VAR_INPUT
AI: REAL; // 模拟量输入,单位:mA
LowerLimit: REAL; // 下限值
UpperLimit: REAL; // 上限值
END_VAR
VAR_OUTPUT
AO: REAL; // 模拟量输出,单位:mV
END_VAR
VAR_TEMP
fRange : REAL; // 输出范围
END_VAR
fRange := UpperLimit - LowerLimit;
AO := (AI - 4) / 16 * fRange + LowerLimit;
注意:此示例中的计算仅适用于 4-20mA 到 mV 的转换,如果需要将 mA 转换为其他计量单位,建议修改公式中的系数即可。
页:
[1]
2