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 抢个沙发,感谢楼主的分析 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
页:
[1]