0

我对 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
4

1 回答 1

0

这是包含另一个 *.vbs 的方法,由 Frank-Peter Schultze 提供

将此 Sub 放入您的主脚本中:

'------------------------------------------------------------------------------
'Purpose  : Include another VBScript file into the current one.
'Note     : Usage: Include("vbsfile.vbs")
'
'   Author: Frank-Peter Schultze
'   Source: http://www.fpschultze.de/smartfaq+faq.faqid+51.htm
'------------------------------------------------------------------------------
Sub Include(ByVal strFilename)
    Dim objFileSys, objFile, strContent

    Set objFileSys = WScript.CreateObject("Scripting.FileSystemObject")
    Set objFile    = objFileSys.OpenTextFile(strFilename, 1)
    strContent     = objFile.ReadAll

    objFile.Close
    Set objFileSys = Nothing

    ExecuteGlobal strContent

End Sub
'------------------------------------------------------------------------------

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

然后在你的主脚本开头的某个地方调用它

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

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

于 2020-11-06T17:30:35.517 回答