回复:S7-1200如何每间隔20ms采集一次数据,并通过PC-Station记录变量

Zane

版主 西门子1847工业学习平台

  • 帖子

    21062
  • 精华

    399
  • 被关注

    1486

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

发布于 2025-08-26 13:46:19

18楼

展开查看
以下是引用手机用户20230522256605在2025-08-26 13:32:52的发言 >17楼

不是20ms传一次数据,是20ms本地记录一次,数据保存在本地,上位机500ms读取一次缓存(也可以更长,只要本地缓存够用),把全部缓存发送给上位机,再回传读取内容的长度,PLC端判断缓存是否存满。

以下是引用Zane在2025-08-26 11:36:21的发言 >16楼:这是用PLC通过S7...

引用16楼详细内容:

这是用PLC通过S7通信,每20ms往外部上位机写数据吗?


1)你这数据量与实际工程需求相去甚远

2)TCP通信的规则是载波监听冲突检测,你怎能确保20ms必然能完成一次通信任务呢?

3)如果每个一秒钟完不成50次通信,还不包括出错再发的情景,那实际情况就是每秒钟发不了50条采用数据的,你的数据缓存不就是越来越大直到溢出吗?

以下是引用手机用户20230522256605在2025-08-25 13:23:11的发言 >15楼:能用上位机的话,可...

引用15楼详细内容:

能用上位机的话,可以做循环队列。原理如下:
尾指针每次计数+1,直到限值归0,依此循环;
头指针不动,但尾指针循环追上头指针时,头指针和尾指针一起+1,并将溢出标记置true(此时头尾指针数值相同,溢出代表通讯频率跟不上可以加大本地缓存大小);
上位机部分读取DB,获得数据长度等信息,将读取到的尾部指针值写入到头指针(表示读取这个区间段内容),并复位溢出标记,此时PLC若新增数据也不影响,因为PLC端尾指针依然在增长,满足异步读写要求。

贴个Demo
FC定义


DB定义:


程序连接:
这里t1,t2,t3模拟的传入数据,50Hz(20MS)的记录频率,


上位机端:
用S7Net包做的通讯,页面比较简陋,可以参考下,通讯做了点简单的封装,但不影响,可以看S7Net手册。
程序部分:

前端:

效果:



哦,了解。


1)有没有缓存呢?

2)没有缓存,如果在数据读取期间又有新的数据加入呢?

3)数据超过了S7读写的允许长度呢?

4)500ms完不成一次的数据交互呢?


你的方案,时间间隔不能太长,间隔长了数据长度会有问题,就不是一次通信可以交互完的。

间隔时间也不能太短,S7通信效率较低,太短的间隔时间,会导致完成不了一次的数据交互任务。



Zane 注册自动化系统工程师 Always save before download
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15113条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。