单片机技术网|技术阅读
登录|注册

您现在的位置是:单片机技术网 > 技术阅读 > 揭秘PLC(五)RTS之扩展通讯

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

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

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

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

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

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

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

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

由于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,最大传输距离与波特率有关:

DP常见有3个版本

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

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

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

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

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

符号定义
SD起始符
LE包括:DA、SA、FC、DSAP、SSAP、DU 在内的所有数据的长度
LErLE 的重复
DA目的地址,报文帧的接收方地址
SA源地址,报文帧的发起方地址
FC功能码,用于标识本报文帧的类型
DU数据域,用于放置传输的用户数据
FCS对帧中各域数据的代数和,由ASIC 自动计算给出。(Frame Check Sequence)
ED结束分界符(End Delimiter),标志着本报文帧的结束。固定为0x16
DSAP目的服务存取点(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主从数据交换原理:

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

功能/服务DP 从站1 类DP 主站2 类DP 主站使用的SAP 号使用第2 层服务
Data_ExchangeMM0默认SAPSDR
RD_InputsM
056SDR
RD_OutPutM
057SDR
Slave_DiagMM060SDR
Set_PrmMM061SDR
Chk_CfgMM062SDR
Get_CfgM
059SDR
Global_ControlMM058SDR
Set_Slave_Addr0
055SDR
M_M_Communication
0054SDR/SDN
DDPV1_serics00051/50SDR

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

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

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

诊断报文

参数报文

配置报文

数据交互报文

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

GSD文件解析

1.配置信息

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

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

输入输出区在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字节的输出

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

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

0x1F表示32 Bytes输出

0x1F表示32 Bytes输入

2.用户参数

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

用户参数在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,而德国赫优讯也提供类似的方案,使用专用芯片是最简单也最容易通过认证的方案,如果有认证的需求,这是不二之选。

通过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强。文章的目的不在于揭秘,而在于记录和交友,欢迎大家订阅公众号,本公众号主要发布和嵌入式相关的小文章,谢谢。