[CODESYS]CODESYS中ADS通讯协议介绍
bigegpt 2025-06-30 14:45 2 浏览
最近啊,有朋友问我有没有跟 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 删除设备通知
ReadDevicelnfo 将数据写入ADS服务器并读取数据
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(网络变量列表)
从ADS的本质,即网络通讯协议,那么我们可以添加NVL
(Network Variable List的简称),来实现同一控制器或者不同控制器之间的数据交互。
这里可查看上一期文章链接:
【1-16】Network Variable List网络变量列表 PLC论坛-全力打造可编程控制器专业技术论坛 -
【1-16】Network Variable List网络变量列表
http://bbs.plcjs.com/forum.php?mod=viewthread&tid=506522&fromuid=17
(出处: PLC论坛-全力打造可编程控制器专业技术论坛)
OPC 通讯
另外,我们也可以使用控制器自带的OPC服务功能来实现数据的交互,可在Application应用程序中添加Symbol Configuration对象来订阅相关的变量:
当然,OPC 功能需要付费使用。后续会专题来介绍这一部分。
比起 ADS 来说,便利性确实比不上它,不过咱们还是能够参照 ADS 协议的具体规定,把上面讲的所有通讯方式结合起来,挑出合适的方案,或者再做个二次封装,最后实现咱们自己期望的那种效果。
附件资料
附件主要包含:
附件下载地址:
CODESYS有类似BECKHOFF的ADS通讯协议吗?
http://bbs.plcjs.com/forum.php?mod=viewthread&tid=506498&fromuid=17
(出处: PLC论坛-全力打造可编程控制器专业技术论坛)
相关推荐
- LangChain4j如何自定义文档转换器实现数据清洗?
-
LangChain4j提供了3种RAG(Retrieval-AugmentedGeneration,检索增强生成)实现,我们通常在原生或高级的RAG实现中,要对数据进行清洗,也就是将外接...
- Java 8 Stream API 详解(java stream.)
-
Java8StreamAPI详解一、概述在Java8中,StreamAPI是一个重要的新特性。它为处理集合(如List、Set等)中的元素提供了一种高效且富有表现力的方式。Str...
- Java修炼终极指南:185 使用 Stream 过滤嵌套集合
-
这是面试中的一个经典问题,通常从一个模型开始,如下所示(我们假设集合是一个List):publicclassAuthor{privatefinalStringname;pri...
- java8的stream使用小示例(java stream())
-
据JetBrains发布的2021年开发者生态系统调查,Java8在java使用的版本中仍然是当前最流行的版本。72%的专业开发人员使用Java8作为其在java开发中主要编程语言版本。现...
- Node.js Stream - 实战篇(node.js in action)
-
本文转自“美团点评技术团队”http://tech.meituan.com/stream-in-action.html背景前面两篇(基础篇和进阶篇)主要介绍流的基本用法和原理,本篇从应用的角度,介...
- Java Stream:集合处理的api(java 集合操作)
-
JavaStream流:高效集合处理的函数式编程利器一、什么是JavaStream?Java8引入的StreamAPI是一套用于处理集合数据的流式编程接口,通过函数式风格(无副作用的...
- 去除 List 中的重复元素,你知道几种实现方法?
-
去除List中重复元素,这在实际编程或面试中经常遇到,每个人都有习惯的写法吧,这里抛砖引玉,汇总了一些实现方案,开拓思路。准备数据假设数组中有10个数据,可能有重复,需要将重复的数据从数组中去掉。pu...
- Java开发者必看!Stream流式编程10个爆款技巧,让你代码优雅飞起
-
为什么你的Java代码总像拧巴的麻绳?掌握这10个Stream实战技巧,代码效率与优雅度将产生质的飞跃。以下案例均来自真实电商系统场景,带你感受流式编程的降维打击!一、过滤与映射组合拳(Filter...
- leetcode每日一题之存在重复元素(存在重复元素 iii)
-
题:给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回true。如果数组中每个元素都不相同,则返回false。比如:输入:[1,2,3,1]输出:true...
- 告别for循环!揭秘Stream API如何让你的代码简洁度提升300%
-
一、当传统循环遇上现代需求真实场景复现:某电商平台需要处理10万条订单数据,要求:筛选出金额>500的订单提取用户ID并去重统计VIP用户数量传统实现方案://常规写法Set<Long...
- Java中List去重的N种方法:从基础到优雅
-
Java中List去重的N种方法:从基础到优雅在日常的Java开发中,我们经常会遇到需要对List集合去重的情况。无论是为了清理重复的数据,还是为了优化算法性能,掌握多种去重方式都是一项非常实用的技能...
- Java Stream流没用过?常用高频方法
-
概念Stream流是Java8添加的以一种链式调用的方法处理数据,主要侧重于计算。具有以下相关特点代码简洁链式调用Stream常用方法1.将数组变为当作List操作String[]strArr=...
- 核医学专业名词索引(M-R)(核医学重点归纳)
-
M吗啡(morphia)埋藏式心律转复除颤器(implantablecardioverterdefibrillator,ICD)麦角骨化醇(VD2,calciferol)脉冲堆积(pulsepi...
- CodeMeter 新版发布(codesigner下载)
-
威步于2022年8月4日发布CodeMeter7.50及CodeMeter软件保护套装11.10,以下为新版内容。CodeMeterRuntime7.50StreamingSIMDExten...
- 世界上最小的五轴铣床Pocket NC(最小的五轴加工中心)
-
PocketNC,由MIT学生研制,还有说法是这款产品的设计者是来自美国蒙大拿州的一对极客夫妻。目前主要有两款产品:PocketNCV2-50,9000美元;PocketNCV2-10,60...
- 一周热门
- 最近发表
-
- LangChain4j如何自定义文档转换器实现数据清洗?
- Java 8 Stream API 详解(java stream.)
- Java修炼终极指南:185 使用 Stream 过滤嵌套集合
- java8的stream使用小示例(java stream())
- Node.js Stream - 实战篇(node.js in action)
- Java Stream:集合处理的api(java 集合操作)
- 去除 List 中的重复元素,你知道几种实现方法?
- Java开发者必看!Stream流式编程10个爆款技巧,让你代码优雅飞起
- leetcode每日一题之存在重复元素(存在重复元素 iii)
- 告别for循环!揭秘Stream API如何让你的代码简洁度提升300%
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)