1200 S7通讯问题

已锁定

Siemens automation

西门子1847工业学习平台

  • 帖子

    760
  • 精华

    11
  • 被关注

    247

论坛等级:奇侠

注册时间:2013-06-23

钻石 钻石 如何晋级?

1200 S7通讯问题

4292

7

2022-06-24 23:26:42

       这几天在调试项目遇到1200  S7通讯一些问题,通过这两天努力基本解决。在这了要感谢西门子1200技术支持工程和我的项目同事。也推翻以前我对西门子S7通讯的一些认知。估计很多人看过我的经历也被现在很多资料给迷惑带到沟里翻车了。下面详细介绍问题点,和如何解决这些问题或是再次对S7有了一些新的认知和纠正了以前的一些错误认知。

       问题点,项目上是一条很大的生产组装生产线,这些生产线有若干个工位,这条生产线由多家公司完成,每个子站都是独立的1200PLC,总调度控制为一台1500PLC,还有上位机。到家公司做大型生产线就会设置到一些站有数据交互,上游厂家规划这些子站数据交互为S7通讯。可能有很多人说,为什么不用PN通讯,应为每个子站都带了变频器和伺服,还有分布式ET200SP模块,1200走PN最大也就能带16个PN。有些子站要和几个其他站交换通讯,PN通讯就有点不够,这样才规划S7通讯。S7通讯我就遇到以前没有遇到的问题,最早我这站要和三个其他子站进行S7通讯,我规划交互方式是字格式(INT)而流水线站却是规划的BOOL量数据通讯格式。其实这些数据这样规划没问题。现在是通讯方式如果我运到问题,我是不会认为有问题。我这边做客户端,流水线要多个子站通讯做服务器端。我用PUT和GET指令读写对方数据。我GTE指令用BOOL就出问题。

问题是指向服务端管脚填写如下

ADDR_1 := P#DB9.DBX10.0 BOOL 8

RD_1 := P#DB230.DBX46.0 BOOL 8

这样填写就出问题了,一监控就报16#0004,我就一直认为这样填写方式没问题,但是这填写就是有问题,估计很多人以前也是这样认为没有问题,也许以前博图软件和PLC固件支持这样做,但是现在是支持。一开始以为是我这边数据定义为INT字格式,服务端定义为16个BOOL量才会造成这个问题,后来我改成这样  RD_1 := P#M800.0 BOOL 8 ,还是不可以。以前用S7都是用字节,字或是双子格式交换数据都没问题,到时昨天第一次用BOOL量就出现问题。我花了几个小时去找资料该程序就是BOOL这种方式不行。我到了下午把程序改成下面方式就可以解决了。

ADDR_1 := P#DB9.DBX10.0 BYTE 1

RD_1 := P#DB230.DBX46.0 BYTE 1

这样一改再去监控程序就没有报错了,也能收到对方BOOL状态。后来试了字,双子都可以正常通讯。昨天解决了就没有深究,到了晚上躺着床上想这个问题,还是不能理解,以前接触的资料介绍BOOL量访问只要是8的倍数就可以正常通讯,为什么到了我这里就不可以。我白天问同事说也是这样说。于是到了今天早上我还是想这个问题,我看到了8点半就电话西门子技术支持,结果西门子技术支持说我理解没有问题,他的理解也是这样。我把我情况告诉他了,我再次将程序修改成BOOL量8的倍数,将我监控的情况告诉西门子技术支持,会报16#0004错误代码,他自己也在做测试,结果是会报错,我估计他是做仿真测试。在修改程序时,我第一次将ADDR_1管脚和RD_1管脚一个BYTE修改成一个BOOL量居然可以通讯。这是歪打正着得到可以访问一个BOOL量。访问一个BOOL量能正常通讯写法如下

ADDR_1 := P#DB9.DBX10.0 BOOL 1

RD_1 := P#DB230.DBX46.0 BOOL 1

我想是访问两个BOOL就开始报错了,我把这个结果告诉西门子技术支持了,他说好像这样以前是不可以。我同事说访问一个BOOL量确实可以,以前他用过。这时西门子技术支持说他测试一下会再次电话联系我,告诉我结果。到了下午1点多,上午那个西门子技术支持给我来电话了,在这里感谢这位西门子技术支持和他们团队。西门子技术支持说了以前好像是可以直接访问BOOL量,只要是8的倍数就可以,现在不可以了,反倒是可以访问一个BOOL可以。西门子技术支持说测试结果和我一样,不过RD_1管脚是可以写成P#DB230.DBX46.0 BOOL 8  这个格式,但是可以这样写ADDR_1 := P#DB9.DBX10.0 BYTE 1。

    今天在这个调试对S7通讯有了新的认识。不管是GET还是PUT都可以按照如下格式读写。

GET中的ADDR管脚可以设置BOOL量只能读取1个BOOL量,字节,字,双字没有限制,只要不超过S7通讯允许最大字节数就可以,这里ADDR管脚数据长度一定要和RD管脚数据长度一致,不管你ADDR填写什么数据类型,都要和RD管脚数据长度一致,哪怕ADDR管脚访问的是字节格式,长度是8个,你RD管脚数据可以是字节,字,双字或是位,只要长度对应是8个字节就可以正常通讯,PUT指令也是一样。ADDR管脚也可以写一个位方位,SD管脚也可以是一个位,只要数据长度一致,数据格式不一样没关系,同样ADDR管脚填写位只能是一个位,不能填写8的倍数,字节,字,双字只要不超过最大长度就可以。下图是我程序格式和监控状态两张图片。




大家以前有没有遇到过我遇见的问题,有没有好的见解。       

1200 S7通讯问题 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有13939条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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