最新提现记录

  • 恭喜 admin 于 2023-6-6 15:17 成功提现 500元
  • 恭喜 admin 于 2023-5-3 09:45 成功提现 400元

组态王编程

[复制链接]
查看3183 | 回复13 | 2023-4-13 12:31:33 | 显示全部楼层 |阅读模式

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
有更简洁的方式吗

回复

使用道具 举报

chatGPT_小智 | 2023-4-13 12:33:44 | 显示全部楼层
可以使用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-4-13 12:37:05 | 显示全部楼层
还有其他方式呢?
回复

使用道具 举报

chatGPT_小智 | 2023-4-13 12:38:26 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=2951&ptid=1288][color=#999999]Li123456 发表于 2023-04-13 12:37[/color][/url][/size]
还有其他方式呢?[/quote]

可以使用数组和索引来简化代码:
[code]// 定义状态数组
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[index] : states[30]; // 设置对应的状态值,如果超出范围,则设置为“超限”[/code]

此代码使用一个字符串数组来存储所有的状态值。然后使用\\local\A1罐_状态作为索引,并通过判断该索引是否在0~29之间来设置\\local\A1_State的值。如果超出此范围,则设置\\local\A1_State为“超限”。
回复

使用道具 举报

Li123456 | 2023-4-13 12:48:18 | 显示全部楼层
要求应用在软件组态王7.5 SP5
回复

使用道具 举报

chatGPT_小智 | 2023-4-13 12:48:47 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=2953&ptid=1288][color=#999999]Li123456 发表于 2023-04-13 12:48[/color][/url][/size]
要求应用在软件组态王7.5 SP5[/quote]

在组态王7.5 SP5中,你可以使用定义常量的方式来代替数组:

// 定义常量const string STATE_0 = "1待机";const string STATE_1 = "2_1灌水准备";  const string STATE_2 = "2_2排气";const string STATE_3 = "3正冲洗";const string STATE_4 = "4过滤";  const string STATE_5 = "5_1反洗准备";const string STATE_6 = "5_2水反洗";const string STATE_7 = "5_3水气混洗";  const string STATE_8 = "6_1静止";const string STATE_9 = "6_2排水";const string STATE_10 = "6_3气擦洗";  const string STATE_11 = "7_1停";
回复

使用道具 举报

Li123456 | 2023-4-13 14:59:37 | 显示全部楼层
软件西门博图v16;写一个模拟量转换FB程序
回复

使用道具 举报

chatGPT_小智 | 2023-4-13 15:00:29 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=2959&ptid=1288][color=#999999]Li123456 发表于 2023-04-13 14:59[/color][/url][/size]
软件西门博图v16;写一个模拟量转换FB程序 ...[/quote]

在西门博图v16中,你可以按照以下步骤来编写模拟量转换FB程序:

1. 创建一个新的FB,在工程画面的“类型定义”中选择“标准函数块”,然后在弹出的菜单中选择“FUNCTION_BLOCK”。

2. 为FB指定名称,并定义输入和输出参数。例如,你可以声明两个输入参数ANALOG_IN和ANALOG_TYPE,以及一个输出参数ANALOG_OUT。

3. 编写程序代码,将输入的模拟量转换为所需的类型。以下是一个示例程序:

[code]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[/code]

4. 在需要使用该FB的程序中调用该FB,并传递所需的输入参数。例如,假设需要将一个电流信号转换为毫安输出,可以按以下方式调用FB:

[code]ANALOG_CONVERTER(ANALOG_IN:= 5.5, ANALOG_TYPE:= 'CURRENT', ANALOG_OUT=> myOutput);[/code]

其中,5.5是输入的电流值,'CURRENT'表示需要将其转换为毫安,而myOutput则是输出的结果变量。
回复

使用道具 举报

Li123456 | 2023-4-13 15:02:11 | 显示全部楼层
软件西门博图v16;写一个4-20MA转换为浮点数模拟量转换FB程序
回复

使用道具 举报

chatGPT_小智 | 2023-4-13 15:03:35 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=2961&ptid=1288][color=#999999]Li123456 发表于 2023-04-13 15:02[/color][/url][/size]
软件西门博图v16;写一个4-20MA转换为浮点数模拟量转 ...[/quote]

在西门博图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程序代码示例:

[code]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;[/code]

注意:此示例中的计算仅适用于 4-20mA 到 mV 的转换,如果需要将 mA 转换为其他计量单位,建议修改公式中的系数即可。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则