湖南西控自动化设备有限公司
主营产品: 西门子一级代理商 PLC 变频器 工控机 伺服电机 触摸屏 软件 电线电缆 电源 S7-200CN S7-200SMART S7-300 S7-400 S7-1200 S7-1500 ET-200 全新原装正品 全国服务
6SE6420-2UC17-5AA1现货西门子代理商

干货!一文搞懂西门子S7通信的读写字节长度限制,及如何"突破"读写长度限制分享




概述
S7通讯作为西门子主要的通讯方式之一,通常用于CPU与CPU之间的通讯,相信不少小伙伴都有使用过。但是,不知道大家有没有遇到过数据长度过大,通讯异常报错的问题,您又是如何处理的呢?接下来分享下为什么会有限制,应该如何“突破”限制?image-20240411140113933
S7 通信数据长度限制

S7协议的一次性读取长度是根据“协议数据单元”PDU(Protocol Data Unit)大小计算出来的,这个PDU的值是来自于PLC本身,不同型号的CPU,它的PDU是不一样的,可参见下表;

本地 CPU

远程 CPU

以字节为单位的数据块大小

S7-1200

任意

240

S7-1500


S7-300

240

S7-400

480

S7-1200

240

S7-1500

960

从表中可以看出西门子PLC PDU大小一般会有三个档次240、480、960; 使用S7通信时,PDU大小的确认遵从“木桶短板理论”,即取通讯能力弱的;例如S7-1200 大PDU大小240,S7-1500 大PDU是960,如果S7-1200与S7-1500之间进行S7通信,那么大PDU应为240,而不是960,其它同理;

知道了PDU长度后,那么一次性读取的字节长度,就是在PDU的基础上减去18,这个18是指包头包尾会有18个字节,这样我们就知道了S7-1200一次大能读取222个字节(240-18=222),S7-1500这样的PLC,我们一次性大是可以读取942个字节的(960-18=942),一次性能读取的字节越长,越能提高上位机的通信效率。详细块大小参见下表:


所使用的 SD_i、RD_i、ADDR_i 参数的数量

数据块大小

指令

1

2

3

4

240 (S7-300)

PUT/GET/
USEND

160

-

-

-

240(S7-300,通过集成的接口)

PUT

212

-

-

-

GET

222

-

-

-

USEND

212

-

-

-

240 (S7-400)

PUT

212

196

180

164

GET

222

218

214

210

USEND

212

-

-

-

480 (S7-400)

PUT

452

436

420

404

GET

462

458

454

450

USEND

452

448

444

440

240 (S7-1200)

PUT

212

196

180

164

GET

222

218

214

210

960 (S7-1500)

PUT

932

916

900

884

GET

942

938

934

930

USEND

932

928

924

920

如何“突破”长度限制

既然单次读取有长度限制,那实际应用中应该如何“突破”这种限制呢,毕竟随着工业4.0、数字化推进,数据采集的需求也是越来越大,CPU与CPU之间数据通讯长度也越来越长;有心的朋友可能有答案了,一次不行那就多读次,这不就“突破“了吗?对了,答案就是通过轮询的方式,多次进行读写操作;

例如:S7-1200 PLC 做客户端从服务端PLC读取516个字节到DB200数据块中;

步在程序中,使用3个GET指令,分别对应不同的请求和状态返回值

image-20240411145919649

编写轮询程序,可通过脉冲对字节进行循环左移操作,当该字节对应不同值时,就输出不同的GET请求;

image-20240411150343498

循环左移开始后,该循环值将按照1,2,4,8,16..进行向左移位,根据不同值判断不同的GET请求;当该值等于8时,即第四次左移后,对该值重新赋0,进行下一周期轮询;

image-20240411150933187

实际运行效果

图片





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