揭秘PLC(五)RTS之扩展通讯

您所在的位置:网站首页 plc发烫 揭秘PLC(五)RTS之扩展通讯

揭秘PLC(五)RTS之扩展通讯

2023-12-01 10:36| 来源: 网络整理| 查看: 265

揭秘PLC(五)RTS之扩展通讯

之前有朋友问过这样一个问题,遇到一个新项目/行业,到底是选择MCU还是PLC来实现,我觉得在PLC能够满足要求的前提下,项目初期非常合适使用PLC做评估验证,当产品定型后再通过设计专用的MCU板卡来实现,PLC揭秘(1)中介绍过的ISaGRAF就支持把IEC-61131-3的工程倒出为.c文件,从而简化设备商设计专用控制器的流程。

PLC相比MCU,还有一些无法比拟的优势:灵活性和扩展性。有些应用虽然相同,但是现场的传感器,执行器却并不相同,厂家不可能遍历所有的应用场景去设计MCU固件,而PLC可以通过更换用户代码以及安装不同的IO模块来适应各个场景。其中和IO模块的通讯就非常关键了,这也是PLC技术中非常重要的一环。

早期PLC的CPU模块通过背板扩展,而背板有些是在机框中固定,模块插在不同的槽位中,如下图所示:

f0642d93ee3aa78752d04a357ec1a072.png

而有些类似于拼积木,而这些IO模块都紧邻CPU模块,也可以被视为本地IO

f0e4e0dddf5eefc021334e29d3505c3e.png

现在PLC的厂商也在不断的衍进新的技术,比如分布式I/O,可以通过工业以太网远程扩展IO,常见的工业以太网有Profinet, EtherCAT, Powerlink等等。

9c385a836af16c58a6f536fc8fab900d.png

分布式I/O一般由接口模块(IM)和IO模块共同组成,模块之前还是通过背板连接,而IM通过网络与PLC相连

b3a314bdd12d389effd894c51af0240f.png

由于IO模块从成本考虑,通常会选择一颗MCU来控制输入/输入及背板协议,不管是本地CPU于IO模块之间,还是IM模块于IO模块之间的背板通讯往往会受到IO模块的限制,一般物理层会选择RS485或者CAN,针对RS485常见的协议有Modbus RTU,Profibus-DP,针对CAN常见的协议有CANOpen,DeviceNET。下面我们以Profibus-dp为例,抛砖引玉,向大家展示其主要原理。

Profibus-DP

Profibus-DP的物理层使用RS485,最大的波特率支持12Mbps,最大传输距离与波特率有关:

92587a6bb76d233f255da77778371e93.png

DP常见有3个版本

DP版本说明DPV0包括DP最基本功能,主从设备间的周期数据传输,从站设备的诊断功能DPV1在V0的基础上扩展了主从设备间非周期数据交互等特性DPV2添加了对冗余的要求,从站间通讯,时钟同步等功能

DP支持多主系统,同一个网络内最多有126个设备(包括多主),主站之前通过令牌的方式进行交互,下图是DP的基本功能:

9ffee88dc519e0588409deadf57fb7d6.png

DP网络使用了标准ISO/OSI参考模型的1、2和7层:

620ad538eac4d3dc2818cae3847ea752.png

DP的字节格式:每字节包含11bit数据:LSB在前,1个起始位,8个数据位,1个偶校验,1个停止位:

4d3400d527626081fe4cca27bdc0283e.png

DP常见有4种报文格式:SD1, SD2,SD4, SC

48609278c4c6925c8cec45f5ecc95aa0.png f663fbd62ebe4acd82b61d73fbde1185.png bc49c073a0e4752f0f480397d916df14.png 4ea5703de1ad18d4082a007e3730c8ad.png 符号定义SD起始符LE包括:DA、SA、FC、DSAP、SSAP、DU 在内的所有数据的长度LErLE 的重复DA目的地址,报文帧的接收方地址SA源地址,报文帧的发起方地址FC功能码,用于标识本报文帧的类型DU数据域,用于放置传输的用户数据FCS对帧中各域数据的代数和,由ASIC 自动计算给出。(Frame Check Sequence)ED结束分界符(End Delimiter),标志着本报文帧的结束。固定为0x16DSAP目的服务存取点(Destination Service Access Point)SSAP源服务存取点(Source Service Access Point)SD1起始界定符1(Start Delimiter 1)SD2起始界定符2(Start Delimiter 2)SD4起始界定符4(Start Delimiter 4)

DP主从数据交换原理:

4b47c91f589da0eb9c0a8ce8f047989e.png

DP的通讯关系可以参考下表:

功能/服务DP 从站1 类DP 主站2 类DP 主站使用的SAP 号使用第2 层服务Data_ExchangeMM0默认SAPSDRRD_InputsM056SDRRD_OutPutM057SDRSlave_DiagMM060SDRSet_PrmMM061SDRChk_CfgMM062SDRGet_CfgM059SDRGlobal_ControlMM058SDRSet_Slave_Addr0055SDRM_M_Communication0054SDR/SDNDDPV1_serics00051/50SDR

DP最主要使用的是需回答的数据传输和请求服务(SDR,Send Data With Reply),而这种服务通过数据链路层的SAP(服务存取点)来实现的。

DP要进入数据交互阶段,需要经过两次诊断和一次参数设置过程,下图是从站入网的过程:

9bf0c740d9c6fc53843d0ae1e8173551.png

从图中得知,入网需要3个比较重要的SAP报文:

诊断报文 68706bbe600b10d6049186437c8eb1da.png 95bb7f9d5317ac88129b452c72a6f026.png 47d38bd9a4c6cea2e950f7e1198d614a.png 参数报文 2ca6d5c7e180c789318c0d3c353af663.png c88ca910d6be63cf8663cf927ac42602.png 7beec83874c277ba36599b16507d47cd.png 配置报文 19c07112b1c654e220b425d14e9f7fe5.png 62f6a99f6960ff2889545766de311df7.png 数据交互报文 f20f9072baf707f94276ddcfbe2e3b1a.png

DP支持波特率自适应,也就是说不管总线上跑什么频率,DP的从设备都会自适应选择到合适的波特率。MCU可以通过软件的方式来实现该功能,首先我们知道帧头SD1 = 0x10, SD2 = 0x68,SD4 = 0xDC,而且不同波特率下帧间隔的最小时间,所以我们可以从最高波特率向下扫描,先假设为最高波特率,一直收数据,直到超过帧间隔时间后,记录下帧数据的包头,判断是否匹配SD帧头,如果是则可以收完整一帧数据,计算FCS是否正确,如果正确则找到了正确的波特率,过程中如果有任何错误,则切换为低一个速率的波特率继续尝试。参考完整的协议,是比较容易通过MCU来实现Profibus-dp从站的,需要注意的是timer的控制。

GSD文件解析 1.配置信息

前面我们重点介绍了DP协议的帧格式,现在我们来看下如何使用DP模块,在Codesys中需要添加DP主站,并设置Bus 参数:

afb63d3d495170e29d7b7d3ece653a16.png

在主站下面添加从站模块,并设置Input/Output和用户参数,当Input/Output模块添加后,PLC配置区会自动计算I/Q区的地址列表

dcbb9a6acb38a34338beb62d8fbd256a.png

输入输出区在GSD文件的Module Definition List,对应配置报文

; Module Definition List Module = "2 Bytes Out/ 2 Bytes In -" 0x31 EndModule Module = "8 Bytes Out/ 8 Bytes In -" 0x37 EndModule Module = "32 Bytes Out/ 32 Bytes In -" 0xC0,0x1F,0x1F EndModule Module = "64 Bytes Out/ 64 Bytes In -" 0xC0,0x3F,0x3F EndModule Module = "1 Word Out/ 1 Word In -" 0x70 EndModule Module = "2 Word Out/ 2 Word In -" 0x71 EndModule Module = "4 Word Out/ 4 Word In -" 0x73 EndModule Module = "8 Word Out/ 8 Word In -" 0x77 EndModule Module = "16 Word Out/ 16 Word In -" 0x7F EndModule ……

这里以Module = "2 Bytes Out/ 2 Bytes In      -" 0x31为例,其表示本模块是Simple格式,有2个字节的输入和2字节的输出

777597a8b142b100ba5cb6a745cb8991.png

Module = "32 Bytes Out/ 32 Bytes In    -" 0xC0,0x1F,0x1F

0xC0表示特殊格式,后面接着1字节的输出字节长度,1字节的输入字节长度

0x1F表示32 Bytes输出

0x1F表示32 Bytes输入

7fdf0e20f441ff872f041263e59a6053.png 2.用户参数

在Codesys中可以设定从站模块的用户参数:

a38336ff830ed6ddb38f447fcacb7948.png

用户参数在GSD文件的UserPrmData-Definition字段定义:

; UserPrmData-Definition ExtUserPrmData=1 "I/O Offset in the V-memory" Unsigned16 0 0-5119 EndExtUserPrmData ; UserPrmData: Length and Preset: User_Prm_Data_Len=3 User_Prm_Data= 0,0,0 Max_User_Prm_Data_Len=3 Ext_User_Prm_Data_Const(0)=0x00,0x00,0x00 Ext_User_Prm_Data_Ref(1)=1 ;

其对应参数报文,其中比较重要的是Ext_User_Prm_Data_Ref(1)=1,这句话括号里的字符表示该参数在扩展参数域的位置,等号后边的值对应ExtUserPrmData=1

PLC设备厂商在编写GSD文件的时候,可以通过一些检查工具来验证其合理性,这里就不详细说明,感兴趣的小伙伴可以搜索相关资料查看。

3.实现方式

从实现方式上讲,Profibus-DP最简单的做法就是使用专用的ASIC芯片:主站可以选择ASP2,从站的话,可以选择西门子的SPC3,Profichip的VPC3,这两个是针对Profibus的芯片,而HMS的B40支持多种协议见下图,其中包括Profibus,而德国赫优讯也提供类似的方案,使用专用芯片是最简单也最容易通过认证的方案,如果有认证的需求,这是不二之选。

ae6b27a3e0d1b056f2928465ba4e4f91.png

通过MCU实现DP也是可行的,但是容易受到波特率的限制,往往低于6Mbps,考虑到DP总线上长期会有周期数据,对MCU的主频也有一定的要求,如果波特率太高会频繁进入中断导致MCU的loading较高。FPGA也是一个较好的实现DP的手段,可以将DP状态机通过FPGA实现,MCU使用SPI或者8080总线与FPGA交互来读写用户参数,诊断,配置数据等操作,FPGA可以实现较高的通讯速率,并减小MCU的loading,但是成本会增加不少。

写在最后

我所分享的这5篇文章,大致是10年前PLC相关知识,就目前而言,PLC正在向更安全,更可靠,更高速的方向发展。国内的厂商早已经有通过SIL3等级认证的相关设备,其中还包括自主知识产权的编译器方案,更加复杂的冗余技术也已经有规模的应用。PLC相比于通讯行业或其他领域而言并不复杂,但需要成功的将计算机,编译器,嵌入式软件/硬件,通讯,安全诸多领域技术融合,并不是一件非常容易的事情,也希望老东家能厚积薄发,早日重回自动化50强。文章的目的不在于揭秘,而在于记录和交友,欢迎大家订阅公众号,本公众号主要发布和嵌入式相关的小文章,谢谢。

8a6c51266aa8837caa6bbfa5cf356319.png


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3