技术论坛

S7通信探讨

作者 主题
至圣

经验值: 37445
发帖数: 5132
精华帖: 47
主题:【探讨】S7通信探讨
推荐帖


只看楼主 楼主 2022-09-30 11:32:20


大家好!

如下图片S7-GET PUT 通信

一直以来对REQ的处理都是采用系统时钟脉冲或者自己采用定时器进行脉冲触发,这样就会由于种种原因,例如间隔比较短的发送(发送频率高资源占用多)在PC/PG与PLC建立连接时会导致通信卡死,那么为了合理的规划这个S7通信是不是不应该采用DONE/ERR作为条件触发REQ?类似于MODBUS 的轮询。

希望大家一起探讨一下。

当然也有人会说要速度快为什么不进行PNIO通信,这里只探讨S7不要建议与S7通信无关的,谢谢!!



功能块管脚说明:

CALL “GET”    ,%DB1    //调用 GET,使用背景DB块:DB1;    

REQ     :=%M0.7    //系统时钟 2秒脉冲 ;    

ID    :=W#16#0100    //连接号,要与连接配置中一致,创建连接时的连接号,如图5.所示;    

NDR    :=%M2.0    //为1时,接收到新数据;    

ERROR    :=%M2.1    //为1时,有故障发生;    

STATUS    :=%MW4    //状态代码;    

ADDR_1    :=P#DB1.DBX0.0 BYTE 10    //从通信伙伴数据区读取数据的地址;    

RD_1    :=P#DB3.DBX0.0 BYTE 10    //本地接收数据地址;    


https://www.ad.siemens.com.cn/productportal/prods/1500published/Comm/Comm_4.2/Comm_4.2.html




工业起重机防摇摆 QQ:404136820 AntiSwayControl
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1787032&b_id=66&s_id=0&num=11

侠圣

经验值: 4241
发帖数: 344
精华帖: 1
回复:S7通信探讨


只看楼主 1楼 2022-09-30 16:08:58

这个题目很好,小白期待探讨学习


理想很丰满,现实很骨感
以下网友喜欢您的帖子:

  
至圣

经验值: 19808
发帖数: 4378
精华帖: 2
回复:S7通信探讨


只看楼主 2楼 2022-09-30 16:50:48

楼主厉害厉害。。。


 
以下网友喜欢您的帖子:

  
版主

经验值: 76166
发帖数: 19135
精华帖: 378
回复:S7通信探讨


只看楼主 3楼 2022-10-01 12:25:57

这还用讨论吗?


不是早就说过了不要用时钟直接触发通信任务吗?真是有愧于你这点网龄和积分了哟!




Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
至圣

经验值: 13749
发帖数: 2032
精华帖: 16
回复:S7通信探讨


只看楼主 4楼 2022-10-01 23:40:41

文档编号 48955385

看看这个


工控毁我青春!
以下网友喜欢您的帖子:

  
侠客

经验值: 932
发帖数: 51
精华帖: 0
回复:S7通信探讨


只看楼主 5楼 2022-10-05 13:56:03

我的理解为先触发PUT~再触发GET~是不是等同先发报文再接收解析报文


 
以下网友喜欢您的帖子:

  
至圣

经验值: 37445
发帖数: 5132
精华帖: 47
回复:S7通信探讨


只看楼主 楼主 6楼 2022-10-09 15:12:16
以下是引用SimonLi在2022-10-05 13:56:03的发言 >5楼

我的理解为先触发PUT~再触发GET~是不是等同先发报文再接收解析报文

我现在的做法是20ms间隔触发 上升边缘触发PUT 下降边缘触发GET 


工业起重机防摇摆 QQ:404136820 AntiSwayControl
以下网友喜欢您的帖子:

  
至圣

经验值: 37445
发帖数: 5132
精华帖: 47
回复:S7通信探讨


只看楼主 楼主 7楼 2022-10-09 15:14:11
以下是引用Zane在2022-10-01 12:25:57的发言 >3楼

这还用讨论吗?


不是早就说过了不要用时钟直接触发通信任务吗?真是有愧于你这点网龄和积分了哟!



主帖引用的是官方的例子  我自己做的是使用TON 上边缘下边缘触发


工业起重机防摇摆 QQ:404136820 AntiSwayControl
以下网友喜欢您的帖子:

  
至圣

经验值: 11495
发帖数: 1028
精华帖: 39
回复:S7通信探讨


只看楼主 8楼 2022-10-09 16:16:40

我的理解:S7  GET 和PUT都是异步通讯,一般会延迟一段时间周期才会收到Done和Error信号,周期受限于带宽,CPU扫描速度,通讯数据量,连接个数等,有些是不变量,有些是变量,比如某些操作可能占用带宽,比如监视多个程序,扫描某些设备等,下载,启用某些组件读写控制器数据都可能导致这个时间增大,我还见过一些资源分配不合理导致S7通讯缓慢的问题,

只要触发控制参数REQ的时间间隔足够长,也就是牺牲实时性,是没有问题的。但是用Done和Error来触发下一次请求就可以优化这个问题,Done和Error也可能由于编程逻辑问题,导致REQ不再触发的编程bug也时常听闻。而定时触发就像永不停歇的机器,有安全感。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 37445
发帖数: 5132
精华帖: 47
回复:S7通信探讨


只看楼主 楼主 9楼 2022-10-09 16:39:46
以下是引用宁超在2022-10-09 16:16:40的发言 >8楼

我的理解:S7  GET 和PUT都是异步通讯,一般会延迟一段时间周期才会收到Done和Error信号,周期受限于带宽,CPU扫描速度,通讯数据量,连接个数等,有些是不变量,有些是变量,比如某些操作可能占用带宽,比如监视多个程序,扫描某些设备等,下载,启用某些组件读写控制器数据都可能导致这个时间增大,我还见过一些资源分配不合理导致S7通讯缓慢的问题,

只要触发控制参数REQ的时间间隔足够长,也就是牺牲实时性,是没有问题的。但是用Done和Error来触发下一次请求就可以优化这个问题,Done和Error也可能由于编程逻辑问题,导致REQ不再触发的编程bug也时常听闻。而定时触发就像永不停歇的机器,有安全感。

使用DONE 与ERR触发有一点类似于MODBUS 通讯的方式,但是不知道为什么官方的S7通讯例子基本上都是使用CPU的时钟存储器来触发例如10HZ或者0.5HZ这样的频率来执行REQ。


另外提到的带宽与通讯REQ的请求间隔问题,这一点非常与感触,的确是PC在线连接时会大大占用带宽,这个时候S7通讯会卡死,S7通讯间隔时间越短 越明显,那么就需要合理的规划S7 REQ的请求应该是怎么样的,所以才想到是不是应该与MODBUS指令那样使用DONE/ERR作为条件更加合适。


工业起重机防摇摆 QQ:404136820 AntiSwayControl
以下网友喜欢您的帖子:

  
至圣

经验值: 11495
发帖数: 1028
精华帖: 39
回复:S7通信探讨


只看楼主 10楼 2022-10-09 20:43:39
以下是引用威师爷在2022-10-09 16:39:46的发言 >9楼

使用DONE 与ERR触发有一点类似于MODBUS 通讯的方式,但是不知道为什么官方的S7通讯例子基本上都是使用CPU的时钟存储器来触发例如10HZ或者0.5HZ这样的频率来执行REQ。


另外提到的带宽与通讯REQ的请求间隔问题,这一点非常与感触,的确是PC在线连接时会大大占用带宽,这个时候S7通讯会卡死,S7通讯间隔时间越短 越明显,那么就需要合理的规划S7 REQ的请求应该是怎么样的,所以才想到是不是应该与MODBUS指令那样使用DONE/ERR作为条件更加合适。

以下是引用宁超在2022-10-09 16:16:40的发言 >8楼:我的理解:S7  G...

引用8楼详细内容:

我的理解:S7  GET 和PUT都是异步通讯,一般会延迟一段时间周期才会收到Done和Error信号,周期受限于带宽,CPU扫描速度,通讯数据量,连接个数等,有些是不变量,有些是变量,比如某些操作可能占用带宽,比如监视多个程序,扫描某些设备等,下载,启用某些组件读写控制器数据都可能导致这个时间增大,我还见过一些资源分配不合理导致S7通讯缓慢的问题,

只要触发控制参数REQ的时间间隔足够长,也就是牺牲实时性,是没有问题的。但是用Done和Error来触发下一次请求就可以优化这个问题,Done和Error也可能由于编程逻辑问题,导致REQ不再触发的编程bug也时常听闻。而定时触发就像永不停歇的机器,有安全感。

你这不是轮询的概念,只是触发控制参数REQ的另一种方式,轮询是:

1 有超过一次Get Put总量的数据需要通讯,可能需要N次

2 只调用一次Get Put功能块

3 通过动态写入,指定第1次,第2次发送接收参数“ADDR ”  “SD”

这样做好处是节省了通讯任务资源,但是牺牲的是实时性。这才是轮询


 
以下网友喜欢您的帖子:

  
至圣

经验值: 13934
发帖数: 2007
精华帖: 43
回复:S7通信探讨


只看楼主 11楼 2022-10-10 08:50:49

通过DONE和ERROR,再根据需要,加上一定的发送延时(延时时间可调)。


完全通过脉冲发送不就是个开环嘛,很可能发生上一次发送没有完成,就触发新的发送请求了!


人生就像一场旅行!
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
S7通信探讨
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。