WaterDropTec 发表于 2017-3-15 09:57

vb.net加载vbs实现事后多参数逻辑判断

本帖最后由 WaterDropTec 于 2018-12-18 12:49 编辑

大大们,首次发帖,如有违规请删除,谢谢

背景:由于单位的一套设备监控系统过于陈旧,很多的设备报警信息都报不出来,也没有办法实现后增(在不修改源代码的情况下)的报警逻辑,而监控的维保也已经过期啦{:1_907:},领导让我做个能够实现上述不足的辅助出来,一开始寻思着也不难,就直接答应了{:1_906:},后来发现这是个坑啊,但是还是用了半个月写了出来,个中点滴收获与各位分享下,希望能够对各位有点帮助

技术:通信采用的BacNet智能楼宇通信协议(这个协议看了我一个多星期,头都大了),编程采用的是vb.net(本人也就会用这个写点稍微大点的程序)

好了,废话不多说进入正文

先上一个程序主图:

再来一张报警配置页面:


页面什么的就不多解释了,直接说思路了:


BacNet通信

这个通信协议的文档在网上有很多,随便下载一个,粗略看一看,有个概念就好了因为我的目的就是做通通信,所以我在对bacnet有了初步的概念后,直接在网上查找相关代码,试了很多代码,多少都有点问题,最后找个这个yetanotherbacnetexplorer-code-221-trunk,这个是C#的,直接修改成vb.net的,调试,通过了{:1_918:},这个代码不是本人写的,就不放出来了,需要的朋友自己查找下



实现多参数输入的逻辑
在程序完成的情况下,如何实现后续自建逻辑,是我遇到的第二个问题,由于本人技术有限,最初的想法是通过主程序调用动态库的形式,在每次新建一个报警逻辑的时候需要生成一个dll文件,然后再由主程序调用,但这种方式只是稍微方便了一点,于是有了第二步本人想找个无非就是输入参数不定,报警逻辑不定,既然如此,像这点要求vbs即可完成,然后就有了通过主程序调用vbs实现新建报警逻辑的功能直接上代码,代码很简单,仅是实现了参数输入(para变量),及报警逻辑(纯vbs代码,CoderFunction变量),通过CreateObject调用vbs对象

Public Function AlarmVBS(para As String, CodeFunction As String)
      Dim VBS
      VBS = CreateObject("ScriptControl")
      VBS.language = "VBScript"
      Try
            VBS.addcode(CodeFunction)
      Catch ex As Exception
            ErrLogSub(ex, "Module1中Alarm!")
            Return Nothing
      End Try
      If para.EndsWith("@") Then
            para = para.Remove(para.Count - 1, 1)
      End If
      Dim tmps() = para.Split(New () {"@"c})
      Dim p(tmps.Count - 1)
      For i = 0 To tmps.Count - 1
            Try
                p(i) = CSng(tmps(i))
            Catch ex As Exception
                p(i) = IIf(tmps(i), 1, 0)
            End Try
      Next
      Try
            Return VBS.run("Main", p)
      Catch ex As Exception
            Return Nothing
      End Try
    End Function

原理都很简单,自己mark下,并分享给可能需要的朋友,:lol

ycc714 发表于 2017-3-15 10:01

抢个沙发,感谢楼主的分析

夏末moent 发表于 2017-3-15 10:40

欢迎分析讨论交流,吾爱破解论坛有你更精彩!
页: [1]
查看完整版本: vb.net加载vbs实现事后多参数逻辑判断