广东湘恒智能科技有限公司
主营产品: 西门子PLC,西门子模块,西门子触摸屏,西门子变频器,西门子伺服电机驱动,电缆,西门子全系列
协议解析是关键:S7-1200通过串口自由口协议与电力仪表专有协议的通信方法
发布时间:2024-11-09

 西门子S7-1200、1500系列PLC的串口通讯,支持标准ModbusRTU协议,若遇到非ModbusRTU的其他协议,可通过自由口的方式来通讯。以下例程为S7-1200的RS485通讯模块,用自由口方式与电表通过DLT645-1997协议进行通讯,读取电表内“运行功率”及“累计电量”两个参数。

一、仪表的通信协议解析

1、从DLT645协议(文章后面有说明)进行协议解析,PLC需发送至电表的帧结构如下:

图片


PLC正常接收电表返回的帧结构如下:

图片


2、DLT645协议的具体协议内容

图片图片图片图片图片图片

二、组态PLC串口模块

      模块设置为2线制485,波特率1.2kbps(与电表设置一致),偶校验(固定设置),数据位8位(固定设置),停止位1位(固定设置),与电表及协议设置一致:

图片


消息开始固定为16#68

图片


消息结束固定为16#16;同时超过400ms未收到消息,也认为结束:

图片


三、制作FB功能块DLTM,按照DLT645协议格式发送、接收数据

1、编组发送帧

      按照DLT645的格式,将需发送到电表的14个byte数据放入数组SEND_PTP_SFB[1..14]中,并使用SEND_PTP功能块发送这14个byte。

图片图片


    使用SEND_PTP指令,发送以上编组好的SEND_PTP_SFB[1..14]共14个字节到串口

图片


2、从串口接收数据,并处理接收帧:

      从串口接收到的数据帧放入RCV_PTP_SFB数组中,若RCV_PTP_SFB[1..12]都与协议格式相同,且接收数据长度大于0,认为接收数据成功,将RCV_PTP_SFB[11]开始的2个数据放入READ_DATA数组中。

图片


接收成功后,使用RCV_RST复位,并将接收数组RCV_PTP_SFB清零:

图片


四、制作FB功能块DLT645,定义串口参数,定义功能码,并调用DLTM功能块

      读取不同参数时使用不同的控制码:读取功率时用16#9010控制码,长度为2;读取电量时用16#B61F控制码,长度为2:

使用PORT_CFG指令初始化串口:

PORT为串口模块硬件地址;

PROTOCOL=1代表点对点通信协议(固定设置);

BAUD为波特率,通讯链路上所有电表都需设置一致;

PARITY=2代表偶校验(固定设置);

DATABITS=1代表字节数据位8(固定设置);

STOPBITS=1代表字节停止位0(固定设置);

FLOWCTRL=1代表无数据流控制(固定设置);

图片


通过不同串口、读取不同电表、读取不同数据时,将不同的电表地址、数据标识通过块接口传入之前做好DLTM功能块:

图片


五、在主程序中调用DLT645功能块,输入端口、波特率、电表地址等参数,与多台电表通讯时,需要轮询

例如:第1台电表的DLT645地址设置为010101010101:

图片


图片


六、总结:通信协议的解析是通信应用能力的体现。


展开全文
拨打电话 微信咨询 发送询价