用过S120的工程师都知道,S120有很多种通讯方式,Zui常见的有PROFIdrive 通讯、PROFIBUS DP通讯、PROFINET IO 通讯、Modbus TCP通讯、EtherNet/IP(EIP)通讯等等。与西门子的PLC通讯时前三种是Zui方便也是Zui常用的。这次我主要分享一下PROFIdrive通讯里面的非周期性通讯。
当我们在做程序的时候,一般都是选择适合的报文,让PLC与S120进行数据的交换或控制,这种通讯方式为PROFIdrive的周期性通讯,当有时候我们需要读取很多驱动参数的时候,周期性通讯将满足不了我们的要求了,这种情况下我们有两种选择,第一就是用FB286功能块进行读写,但调用一次Zui多只能读取16个参数,如果超过16个参数,那就需要重复调用,这时候用非周期性通讯将会是一个不错的选择。
使用非周期通讯对读写参数数量没有限制,但每个读写任务Zui大为 240个字节。当用S7-1200/S7-1500与S120走非周期性通讯时,需要采用系统功能块“WRREC”和“RDREC”,其中“WRREC”将“请求”发送给S120,“RDREC”将 S120 的“应答”返回给 PLC,这样就完成了一个读写的循环。
S120与PLC的通讯组态已经介绍过很多次,在这里不多做介绍,主要介绍一下程序中怎么去编写报文。如下图▼
第1部分是PLC通过“WRREC”发送给S120的报文,如果通讯成功,S120将通过“RDREC”返回第2部分报文,作为响应。这里对报文结构里的几个数据进行说明:
请求ID:读16#01,写16#02;
轴号ID:这里指驱动的轴号,G120为1,V90为2,S120根据组态选择相应轴号;
参数数量:要读取或写入的参数数量;
参数属性:要读取参数的值 16#10,只读取参数的描述16#20(只适用于读任务);
其他数据可以根据我程序里的变量名称直观的了解其含义。
“WRREC”.REQ:每一个上升沿执行一次;
“WRREC”.ID:选择驱动的硬件标识符;
“WRREC”.INDEX:固定为47;
“WRREC”.RECORD:请求读报文从DB1.DBW0开始,长度一共8个字;
“RDREC”.REQ:每一个上升沿执行一次;
“RDREC”.ID:选择驱动的硬件标识符;
“RDREC”.INDEX:固定为47;
“RDREC”.MLEN:响应报文长度为16个Byte;
“RDREC”.RECORD:响应报文返回的数据存入从DB1.DBW20开始的字,长度一共8个字;
"WRREC_DB".REQ的上升沿触发"WRREC“功能块,向S120发送请求读报文,读取参数r21实际速度与r31实际扭矩,完成信号"WRREC_DB".DONE触发“RDREC”功能块,接收响应报文,测试结果如下图▼
对于写请求也是一样,先要通过“WRREC”功能块发出写请求报文,向P1120和P1121两个参数分别写入加速时间10S,减速时间15S,通过“RDREC”功能块读取响应报文。结果显示通讯成功,写入2个参数▼
以上就是S7-1200通过非周期性通讯与S120进行参数读写的步骤,西门子其他支持PN或DP通讯的驱动用非周期通讯和上面一样。