Vbscript 我可以通过全局脚本消除VBS重复代码吗?

Vbscript 我可以通过全局脚本消除VBS重复代码吗?,vbscript,duplicates,call,wincc,Vbscript,Duplicates,Call,Wincc,我不太熟悉VBS,也不知道如何最好地实现这一点 我有一个基本的代码,当机器的值>=100时,它会发送一封电子邮件。只要标记值发生变化,WinCC就会触发该脚本 现在,我想利用其他一些数值来监控机械和设备的部件,并发送一些电子邮件警报 但是,是否需要在每个脚本中复制整个电子邮件设置代码,或者是否有一种方法可以让触发的代码调用包含电子邮件设置的全局脚本 因此,不要“触发VBS-检查值-如果为真-这里是电子邮件详细信息-发送电子邮件” 它更像是“触发VBS-检查值-如果为真-加载电子邮件设置VBS-发

我不太熟悉VBS,也不知道如何最好地实现这一点

我有一个基本的代码,当机器的值>=100时,它会发送一封电子邮件。只要标记值发生变化,WinCC就会触发该脚本

现在,我想利用其他一些数值来监控机械和设备的部件,并发送一些电子邮件警报

但是,是否需要在每个脚本中复制整个电子邮件设置代码,或者是否有一种方法可以让触发的代码调用包含电子邮件设置的全局脚本

因此,不要“触发VBS-检查值-如果为真-这里是电子邮件详细信息-发送电子邮件”

它更像是“触发VBS-检查值-如果为真-加载电子邮件设置VBS-发送电子邮件”

希望这有意义

Option Explicit
Function action

Dim TagVari1
Dim TagVari2

Set TagVari1 = HMIRuntime.Tags("TestTag1")
TagVari1.Read
TagVari1.Value = TagVari1.Value +1

Set TagVari2 = HMIRuntime.Tags("TestTag2")
TagVari2.Read

TagVari2.Value = TagVari1.Value

TagVari2.Write

If TagVari2.Value >= 100 Then

    Dim objMessage
    

    Set objMessage = CreateObject("CDO.Message")
    
    objMessage.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

    objMessage.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.mydomain.com"

    objMessage.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
    
    objMessage.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1

    objMessage.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "my.email@mydomain.com"

    objMessage.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"

    objMessage.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    
    objMessage.Configuration.Fields.Item _
    ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = "30"
    objMessage.Configuration.Fields.Update
    
    objMessage.Subject = "WinCC Message"
    objMessage.From = "my.email@mydomain.com"
    objMessage.To = "recip.email@outlook.com"
    objMessage.TextBody = "This is a test message from WinCC......"
    objMessage.Send
    
    x=Msgbox("CHP Alarm" ,0, "Tag2 equal or over 100")

End If

End Function

以下是如何包含另一个*.vbs,由Frank Peter Schultze提供

将此子脚本放入主脚本中:

让您的电子邮件发送程序使用另一个脚本,例如MySendMail.vbs

然后在你的主要剧本开始的某个地方

Include("Full\Path\To\MySendMail.vbs")

这是一个警告:必须将包含的文件名及其完整路径(包括驱动器)传递给Sub。

它必须位于其他vbs中吗?你不能在同一个文件中创建一个子文件或函数并调用它吗?这能回答你的问题吗?格特,不,那不行。在WinCC中,有触发脚本的操作。因此,可能有多个动作取决于所监视的内容,每个动作都会触发不同的脚本。当涉及到通过电子邮件发送警报时,我可能会有一系列不同的操作,它们都使用相同的脚本。我希望每个脚本都编写变量,然后运行一个单独的电子邮件脚本。这样,如果我以后需要更改电子邮件详细信息,只有一个脚本需要修改,而不是30或40个脚本。@MarkLee,那么复制的脚本没有帮助吗?恐怕它们是你唯一的选择,如果它们都不适用于WinCC,那你就走运了,但看起来好像你没有说明你是否看过它们,我想我们也不知道。Lanymart-是的,复制它很好。我有3个不同的脚本用于测试,每个脚本都包含相同的电子邮件代码,但主题、主体、电子邮件等不同。我想发布更多的警报,目前我已经识别了37个。但在我这么做之前,我想知道我是否可以摆脱重复的代码,这样我就有了一点电子邮件确认代码。如果我必须更改它,我将有37多个代码需要更改。为什么要重复答案?你不认为它被标记为复制品是有原因的吗?因为我显然是瞎子。我的错,对不起。
Include("Full\Path\To\MySendMail.vbs")