ygk12315 发表于 2023-4-8 08:44:43

帮我写一个西门子WINCC VBS脚本


要求如下:
1.当前值-目标值大于80自动选择微调1输出
2.当前值-目标值小于80大于30自动选择微调2输出
3.当前值-目标值小于30且大于10自动选择微调3输出
4.当前值-目标值小于10自动选择参数4输出
5.当前值/目标值×参数1+参数1+参数4 为=微调1
6.当前值/目标值×参数2+参数2+参数4 为=微调2
7.当前值/目标值×参数3+参数3+参数4 为=微调3
8.在WINCC画面上做一个启动按钮1为脚本启动条件,循环执行程序0为脚本停止条件
9.根据条件选择输出,由一个参数到WINCC画面上显示输出结果

chatGPT_小柔 发表于 2023-4-8 08:46:08

以下是基于您的要求编写的西门子WINCC VBS脚本代码:

'Define variables
Dim currentVal, targetVal, param1, param2, param3, param4, outputVal
Dim microAdjust1, microAdjust2, microAdjust3

'Set initial values for variables
currentVal = 0
targetVal = 0
microAdjust1 = 0
microAdjust2 = 0
microAdjust3 = 0
param1 = 0
param2 = 0
param3 = 0
param4 = 0
outputVal = 0

'Loop to continuously execute script until stopped
Do While GetTagBit("启动按钮.Tag") = True

    'Read current value and target value from tags
    currentVal = GetTagValue("当前值.Tag")
    targetVal = GetTagValue("目标值.Tag")
   
    'Calculate output based on conditions
    If (currentVal - targetVal) > 80 Then
      outputVal = microAdjust1
    ElseIf (currentVal - targetVal) < 80 And (currentVal - targetVal) > 30 Then
      outputVal = microAdjust2
    ElseIf (currentVal - targetVal) < 30 And (currentVal - targetVal) > 10 Then
      outputVal = microAdjust3
    Else
      outputVal = param4
    End If
   
    'Calculate micro adjustments
    microAdjust1 = (currentVal / targetVal * param1) + param1 + param4
    microAdjust2 = (currentVal / targetVal * param2) + param2 + param4
    microAdjust3 = (currentVal / targetVal * param3) + param3 + param4
   
    'Output result to tag and display on HMI screen
    SetTagValue("输出结果.Tag", outputVal)
    SetText("输出文本.文本", "输出结果为:" & outputVal)

Loop

上面的代码假设您已经在WINCC画面上创建了所需的标签(例如“启动按钮.Tag”、“当前值.Tag”、“目标值.Tag”、“输出结果.Tag”)和文本控件(例如“输出文本.文本”)。请注意,您需要将脚本中的标签名称和文本控件名称更改为您在WINCC中使用的实际名称。

此外,请提供“参数1”、“参数2”和“参数3”的实际值,以便可以正确计算微调值。

ygk12315 发表于 2023-4-8 13:05:44

我怎么读取WINCC输出的启动按钮.Tag”、“当前值.Tag”、“目标值.Tag”、“输出结果.Tag参数1”、“参数2”和“参数3 参数4 这些数值怎么把计算的后的数值 写给WINCC

chatGPT_小柔 发表于 2023-4-8 13:06:57

ygk12315 发表于 2023-04-08 13:05
我怎么读取WINCC输出的启动按钮.Tag”、“当前值.Tag ...

您可以使用以下代码从WINCC中读取标签的值并将新值写入标签:

'读取当前值和目标值
currentVal = GetTagValue("当前值.Tag")
targetVal = GetTagValue("目标值.Tag")

'计算输出值
...

'将结果写入输出结果标签
SetTagValue("输出结果.Tag", outputVal)

同样,您也可以使用类似的代码从WINCC中读取参数1、参数2、参数3和参数4的值,并在计算微调值时使用这些值。例如:

'读取参数1、参数2、参数3和参数4的值
param1 = GetTagValue("参数1.Tag")
param2 = GetTagValue("参数2.Tag")
param3 = GetTagValue("参数3.Tag")
param4 = GetTagValue("参数4.Tag")

'计算微调值
microAdjust1 = (currentVal / targetVal * param1) + param1 + param4
microAdjust2 = (currentVal / targetVal * param2) + param2 + param4
microAdjust3 = (currentVal / targetVal * param3) + param3 + param4

然后,使用SetTagValue函数将新的微调值写入相应的标签中:

'将微调值写入标签
SetTagValue("微调1.Tag", microAdjust1)
SetTagValue("微调2.Tag", microAdjust2)
SetTagValue("微调3.Tag", microAdjust3)

请注意,您需要在WINCC中创建所有所需的标签和文本控件,并将标签名称和文本控件名称更改为实际使用的名称。

ygk12315 发表于 2023-4-8 13:16:37

param1 = GetTagValue(""参数1.Tag""格式 是这么

chatGPT_小柔 发表于 2023-4-8 13:17:06

ygk12315 发表于 2023-04-08 13:16
param1 = GetTagValue(""参数1.Tag""格式 是这么 ...

对不起,那是我的错。在VBS脚本中,字符串应该使用双引号进行包裹。正确的写法应该是:param1 = GetTagValue("参数1.Tag")。感谢您的指正,希望这次能够解决您的问题。

ygk12315 发表于 2023-4-8 13:44:28

1.当前值/目标值×参数1+参数1+参数4 为=微调1
2.当前值/目标值×参数2+参数2+参数4 为=微调2
3.当前值/目标值×参数3+参数3+参数4 为=微调3
4.当前值-目标值大于80自动选择微调1输出
5.当前值-目标值小于80大于30自动选择微调2输出
6.当前值-目标值小于30且大于10自动选择微调3输出
7.当前值-目标值小于10自动选择参数4输出
8.在WINCC画面上做一个启动按钮1为脚本启动条件,循环执行程序0为脚本停止条件
9.输出的计算结果由一条变量显示在WINCC画面上

chatGPT_小柔 发表于 2023-4-8 13:45:34

ygk12315 发表于 2023-04-08 13:44
1.当前值/目标值×参数1+参数1+参数4 为=微调1
2.当前 ...

以下是基于您的要求编写的更改后的西门子WINCC VBS脚本代码:'Define variablesDim currentVal, targetVal, param1, param2, param3, param4, outputValDim microAdjust1, microAdjust2, microAdjust3'Set initial values for variablescurrentVal = 0targetVal = 0microAdjust1 = 0microAdjust2 = 0microAdjust3 = 0param1 = 0param2 = 0param3 = 0param4 = 0outputVal = 0'Loop to continuously execute script until stoppedDo While GetTagBit("启动按钮.Tag") = True    'Read current value and target value from tags    currentVal = GetTagValue("当前值.Tag")    targetVal = GetTagValue("目标值.Tag")      'Calculate micro adjustments    microAdjust1 = (currentVal / targetVal * param1) + param1 + param4    microAdjust2 = (currentVal / targetVal * param2) + param2 + param4    microAdjust3 = (currentVal / targetVal * param3) + param3 + param4      'Calculate output based on conditions    If (currentVal - targetVal) > 80 Then      outputVal = microAdjust1    ElseIf (currentVal - targetVal) < 80 And (currentVal - targetVal) > 30 Then      outputVal = microAdjust2    ElseIf (currentVal - targetVal) < 30 And (currentVal - targetVal) > 10 Then      outputVal = microAdjust3    Else      outputVal = param4    End If      'Output result to variable and display on HMI    outputVal = Round(outputVal, 2)    SetTagValue("计算结果变量.Tag", outputVal)    SetText("计算结果文本.文本", "计算结果为:" & outputVal)Loop上面的代码假设您已经在WINCC画面上创建了所需的标签(例如“启动按钮.Tag”、“当前值.Tag”、“目标值.Tag”、“计算结果变量.Tag”)和文本控件(例如“计算结果文本.文本”)。请注意,您需要将脚本中的标签名称和文本控件名称更改为您在WINCC中使用的实际名称。此外,请提供“参数1”、“参数2”和“参数3”的实际值,以便可以正确计算微调值。

ygk12315 发表于 2023-4-8 13:54:40

'为变量设置初始值
currentVal = 0
targetVal = 0
microAdjust1 = 0
microAdjust2 = 0
microAdjust3 = 0
param1 = 0   '请设置参数1、参数2和参数3的实际值
param2 = 0
param3 = 0
param4 = 0
outputVal = 0

没有理解解释一下

chatGPT_小柔 发表于 2023-4-8 13:55:27

ygk12315 发表于 2023-04-08 13:54
'为变量设置初始值
currentVal = 0
targetVal = 0
mic ...

这段代码是在脚本开始运行时,为各个变量设置起始值。这些变量在后续的运算过程中会被修改。这里列出各个变量的含义:

- currentVal:当前值
- targetVal:目标值
- microAdjust1:微调1输出
- microAdjust2:微调2输出
- microAdjust3:微调3输出
- param1:参数1
- param2:参数2
- param3:参数3
- param4:参数4
- outputVal:输出结果

根据您的需求,您需要将参数1、参数2和参数3的实际值设置为适当的数字。请注意,这些变量的值将在计算中使用,并影响输出结果。
页: [1] 2
查看完整版本: 帮我写一个西门子WINCC VBS脚本