摘要:最近啊,有朋友问我有没有跟 BECKHOFF 的 ADS 通讯方式类似的,尤其是订阅功能那种。我跟您说哈,没有跟 ADS 完全一样的通讯方式。不过呢,您可以按照自己的实际需要,选不同的通讯方式来达成目的。比如说,像 OPC DA/UA 啦,Share Memo
最近啊,有朋友问我有没有跟 BECKHOFF 的 ADS 通讯方式类似的,尤其是订阅功能那种。我跟您说哈,没有跟 ADS 完全一样的通讯方式。不过呢,您可以按照自己的实际需要,选不同的通讯方式来达成目的。比如说,像 OPC DA/UA 啦,Share Memory 共享内存啦,Ethernet TCP/IP 啦,Modbus TCP 啦,PLC Handler 等等,都能实现。那最近关于 CODESYS 的各种通讯,会在公众号里一直做专题探讨。就是希望能在大家工作和学习的时候,给您提供点想法和帮助。当然啦,这里面有些通讯协议是得花钱才能支持的,这个咱就不重点说了,咱们主要讲讲那些实用又免费的通讯方式。
BECKHOFF ADS通讯
首先,我们先来了解下ADS通讯方式:
在 Beckhoff TwinCAT (TwinCAT 是德国倍福系列 PLC、IPC 产品的软件名字,具体的您可以自己去官网查查)系统里,那些个软件模块(像 TwinCAT PLC、TwinCAT NC、Windows 应用程序啥的)的工作模式跟硬件设备有点像,它们能自己单独干活。各个软件模块之间的信息交流是通过 TwinCAT ADS 来实现的。
ADS(Automation Device Specification)就是自动化设备规范,它能给设备之间的通讯弄个通路。在 TwinCAT PC 和 Beckhoff 的 CX、BX、BC 系列控制器里都有 TwinCAT 信息路由器。所以呢,各个 ADS 设备之间都能交换数据和信息。
基于ADS 的TwinCAT 系统构架如下图所示:
可以简单说,ADS协议属于网络通讯协议,且在其应用层。
TwinCAT中ADS常用函数
AddDeviceNotification 连接一个变量到ADS客户端
ReadDevicelnfo 读取ADS服务器的版本号
AddDeviceNotificationEx 连接—个变量到ADS客户端
ReadDevicelnfo 读取ADS服务器的ADS状态和设备状态
Connect 建立—个至ADS服务的连接
ReadDevicelnfo 读取一个变量的值,并返回object类型
CreateSymbolInfoLoader 创建—个新的
ReadDevicelnfo 获取一个变量的信息
CreateVariableHandle 生成—个ADS变量的唯一句柄
ReadDevicelnfo 将数据写入ADS服务器并读取数据
DeleteDeviceNotification 删除设备通知
DeleteVariableHandle 释放一个ADS变量句柄
ReadDevicelnfo 写入数据到ADS服务器
Read 从ADS服务器读取数据
ReadDevicelnfo 改变ADS服务器的ADS状态和设备状态
ReadAny 从ADS服务器读取数据
ReadDevicelnfo 写入一个变量的值
通过ADS通讯,可以非常灵活地实现:
BECKHOFF 系列 PLC 的内部通讯;
BECKHOFF 系列所有 PLC 产品相互之间的通讯;
能支持用多种语言开发的上位机之间的通讯,能做到对好多家 Scada 软件的支持,比如说:VB、C#、C++、第三方 Explorer 等等。
关于ADS通讯的详细介绍,可以参考本文最后的附件资料。这里不做展开说明。
PLC Handler和共享内存
在 CODESYS 平台里,能用多种语言来搞数据通讯的办法当中有一个就是 PLCHandler。它能在第三方的客户端和基于 CODESYS 开发的 PLC 之间搭建通讯的桥梁。PLCHandler 把完整的底层通信协议都给封装起来了,还提供了 API 接口。这个 API 接口能让人访问到所有能用的功能和服务。
具体的介绍已经在前期推文中详细说明了,请参考下方的链接:
【例程L9】C/C++/C#开发上位机和CODESYS通讯(免费) PLC论坛-全力打造可编程控制器专业技术论坛 -
【例程L9】C/C++/C#开发上位机和CODESYS通讯(免费)
http://bbs.plcjs.com/forum.php?mod=viewthread&tid=506520&fromuid=17
(出处: PLC论坛-全力打造可编程控制器专业技术论坛)
Network Variable List(网络变量列表)
(Network Variable List的简称),来实现同一控制器或者不同控制器之间的数据交互。
来源:PLC技术玩