技术论坛

wincc 串口通讯 原创

作者 主题
侠圣

经验值: 2495
发帖数: 95
精华帖: 7
主题:【分享】wincc 串口通讯 原创
精华帖精华帖星级1级 推荐帖


只看楼主 只看精华 楼主 2017-01-09 21:47:36

该博文在我的博客已经发过了 搬到这里给大家分享以下

这个主要基于对控件的编程

本通讯方式可以更改控件使用以太网或者其他通讯方式。

WINCC是非常强大的一个软件,但是大多数功能我们都没有用到,对吧。市面上关于WINCC的书籍也不是很多同时也没有讲解更多的高级应用。前段时间很多的网友问我串口通讯的问题,感觉大家都有很强烈的需求所以再次写一篇串口通讯的例子,这次采用全局脚本来进行控制。这里我要说一下,WINCC虽然不是通用型的组态软件,但是它是能够和任何设备任何通讯协议进行通讯的。有网友说老师教的WINCC只能和西门子产品这种观点是错误的。不管是通用还是非通用的组态软件都会有至少一个接口和第三方设备进行通讯的接口。通过WINCC的OPC就能够和大部分设备通讯。再有就是WINCC是一个开放型的组态软件,有很多接口可以提供给第三方软件进行通讯。虽然我这里讲解的只是串口,TCP/IP也是一样的道理。如果我有时间会编写一个完成的MODBUS协议的通讯例子和TCP/IP的例子供大家参考

实验准备:参考上一篇关于串口通讯的例子即可。


要实现全局脚本对串口的控制首先你需要了解如何使用全局脚本编辑器。这里不进行讲解如何使用,我们直接上菜

 第一步先写一个动作脚本:


该脚本需要填写变量触发器(做一个二进制内部变量即可),写好保存即可,因为当WINCC启动时会自动执行所有的脚本动作,该脚本实现功能是对串口控件的通讯参数进行赋值。(提示,可以直接填写到控件参数也可以)

Option Explicit

Function action

'=========用于初始化串口参数========================

Dim scr

Dim comcl

Set scr=HMIRuntime.Screens("串口通讯")'绑定串口控件所在画面

Set comcl=scr.ScreenItems("串口控件")'绑定串口控件(控件名本人由原来的控件1改为现在名,这里注意如果改了控件名务必停止WINCC运行然后在启动WINCC)

comcl.commport=1' 设定端口

comcl.settings="9600,n,8,1"' 设置波特率,无校验,8位数据位,1位停止位

comcl.inputmode=1' 设定传输模式(文本为0,二进制为1)

End Function

以上脚本只是启动WINCC时候执行一次

第二步写一个循环执行的脚本(发送数据)

该脚本需要填写触发器,如果是一直需要通讯那么选用周期触发即可,触发时间自己定义。该脚本实现的是周期性扫描执行脚本。同时为了方便调试程序我在里面加了一个START变量来进行控制

Option Explicit

Function action

Dim scr

Dim comcl

Dim start

Dim sendtext

Set scr=HMIRuntime.Screens("串口通讯")'绑定串口控件所在画面

Set comcl=scr.ScreenItems("串口控件")'绑定串口控件(控件名本人由原来的控件1改为现在名,这里注意如果改了控件名务必停止WINCC运行然后在启动WINCC)

Dim receivetext

Set receivetext = HMIRuntime.Tags("receivetext")

'=======================================决定是否进行通讯===================================================

Set sendtext = HMIRuntime.Tags("sendtext")

Set start = HMIRuntime.Tags("start")

If start.Read =1 Then

If comcl.portopen=False Then

comcl.portopen=True  '开启串口

End If

receivetext.Write  comcl.input '显示接收字符串,注意一旦通讯一次就会自动清空缓冲区的。所以如果你要显示需要处理接收到的字符串

comcl.output= SEND(sendtext.read) '调用标准模块

Else

 comcl.portopen=False '关闭串口

End If

End Function

 

标准模块代码如下

Function  SEND(sendtext)

Dim scr

Dim comcl

Dim outData ' 数据暂存

Set scr=HMIRuntime.Screens("串口通讯")'绑定串口控件所在画面

Set comcl=scr.ScreenItems("串口控件")'绑定串口控件(控件名本人由原来的控件1改为现在名,这里注意如果改了控件名务必停止WINCC运行然后在启动WINCC)

outData = UCase(Replace(sendtext, Space(1), Space(0)))' 先去掉空格,再转换为大写字母

comcl.output=outData

End Function

这里加入标准模块调用主要是给大家展示哈标准模块的简单使用

关于使用ONCOMM事件,经过测试能识别到clear-to-send 线变化,但是不能识别到收和发的事件。通过ONCOMM事件来处理数据我是没有成功的。倒是我上面的程序是查询方法可以通过的。在程序不短循环查询中使用即可正常完成收和发,以上程序经过实验能够成功。

以上就能够实现简单的串口通讯



努力赚钱 养家糊口
推荐帖推荐理由: 讲解非常详细。 (推荐人:liujian1121)
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1360218&b_id=5&s_id=0&num=7

侠圣

经验值: 3904
发帖数: 370
精华帖: 1
回复:wincc 串口通讯 原创


只看楼主 只看精华 1楼 2017-01-09 22:09:57

收藏,学习,希望以后能用到!


无法改变之前,努力改变之后
以下网友喜欢您的帖子:

  
版主

经验值: 69050
发帖数: 12265
精华帖: 59
回复:wincc 串口通讯 原创


只看楼主 只看精华 2楼 2017-01-09 22:21:13

感谢分享,我也分享个资源中心的例子

如何在 WinCC 运行系统中通过串口发送接收数据?

https://support.industry.siemens.com/cs/cn/zh/view/28378295



Q群:https://jq.qq.com/?k=9BDuEgf6
以下网友喜欢您的帖子:

  
至圣

经验值: 12543
发帖数: 1843
精华帖: 0
回复:wincc 串口通讯 原创


只看楼主 只看精华 3楼 2017-01-14 10:39:18

请教:

   wincc  发16进制数 如

   &H01

   &H05

   &H03

   &H01

  命令随便写的,但在vb里能与第三方通讯,但wincc中实现不了,你试过吗?


邮箱 yongquancun@126.com
以下网友喜欢您的帖子:

  
侠圣

经验值: 3757
发帖数: 416
精华帖: 0
回复:wincc 串口通讯 原创


只看楼主 只看精华 4楼 2017-01-15 22:17:49

收藏一下,学习了!


继续努力!
以下网友喜欢您的帖子:

  
游侠

经验值: 558
发帖数: 60
精华帖: 1
回复:wincc 串口通讯 原创


只看楼主 只看精华 5楼 2017-01-25 13:33:41

不错,虽然暂时用不到,学习了


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 3804
发帖数: 500
精华帖: 3
回复:wincc 串口通讯 原创


只看楼主 只看精华 6楼 2017-01-26 09:23:02


收藏学习了


 
以下网友喜欢您的帖子:

  
至圣

经验值: 18073
发帖数: 1524
精华帖: 2
回复:wincc 串口通讯 原创


只看楼主 只看精华 7楼 2017-02-14 15:05:04


好好学习,强。


我回来了!继续努力!
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
wincc 串口通讯 原创
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。