正在做一个项目要求Wincc能够与PIC18系列的单片机通过串口通讯,但是不知道如何实现。有谁能够帮我解决这个问题?
问题补充:
通过MODBUS rtu 协议传输,协议中说到数据帧之间以3.5个字符为间隔,3.5个字符传输的时间就1.5ms,这么短的时间,wincc能够捕捉到吗?
最佳答案
能做到,而且方法很多:
1.可以用WinCC+MsComm控件直接编程读取
2.用VB/VC+MsComm控件读取后通过OPC/DDE/OLE等其他方式再转至WinCC。
用MsComm控件怎么做串口通讯应该不用我说了吧,^_^,网上的代码一搜一大框。
第1种方法:WinCC支持VBS,也支持Windows控件,因此使用方法跟VB差不多。发送需要用全局脚本定时发送:
Dim oMsComm
Set oMSComm = HMIRuntime.Sceens("CommPdl").ScreenItems("MSComm1") '#获取MsComm控件
If oMsComm.PortOpen = True Then '#判断串口是否已经打开
oMsComm.Output = "Sending Char" '#发送代码
........
End If
如通讯成功并接收到字节时,将触发控件的Events->Object Events -> OnComm事件,在此编程接收字节并进行校验即可。
Sub OnComm(Byval Item)
'HMIRuntime.Trace Item.Input & vbCrLf
.......你的校验代码
End Sub
该方法可能会占用WinCC大量资源,且稳定性较差。
第2种方法:VB/VC通过MsComm控件将数据读上来后,可通过OPC/DDE/OLE将数据传递给WinCC。OPC Client方式网上有现成代码,不过较为复杂。DDE已经没有多少人用了,最简单的应该是OLE方式了。
这里以VB6为例,选择工程 -> 引用,引用WinCC HMIRuntime 1.0 Type Library,下面是如何将值传给WinCC的Tag
Dim oWinCCRT As New CCHMIRUNTIME.HMIRuntime
oWinCCRT.Tags("MyTag").Write 100.0 '这里改成你自己的Tag和值就可以了。
补充:没有问题的,其实时间是由Master来掌握的。如果你对WinCC不放心,那就用VB好了,^_^。
提问者对于答案的评价:
专业,认真。谢谢啦!
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc276308.html