回复:modbus_comm_load初始化失败

已锁定

yming

西门子1847工业学习平台

  • 帖子

    23148
  • 精华

    881
  • 被关注

    1253

论坛等级:至圣

注册时间:2004-03-06

钻石 钻石 如何晋级?

发布于 2020-11-21 09:52:25

4楼

展开查看
以下是引用威师爷在2020-11-20 23:14:05的发言 >2楼

 modbus_comm_load 功能块的REQ上面直接给TRUE的变量,初始化失败的原因是因为一个扫描周期不能完成初始化导致。


你直接给一个常为TRUE的变量即可。亲自测试有效。

我觉得,你也没有理解使用CM、CP时,这类 xxxx_LOAD命令的工作方式。

当使用的是通讯模块、模板时,所有通讯任务,都是由它们自身完成的,PLC的CPU不参与该通讯操作。

这个xxxx_LOAD只是对模块、模板传送一次配置,而且一定是一次完成的!(因为这个命令没有 Busy )

除非命令参数有错!例如 波特率9600写成9566;(所以驱动通讯参数 干脆不让你这样写,直接选 1、2、3、4...)否则 不会“初始化”失败!

此外,这个命令说是初始化,其实是个对模块的配置(LOAD=装载),当前通讯任务完成后的任意时刻都是可以调用的(重新配置通讯模块)。

要注意的是,所有调用xxxx_LOAD命令的这个扫描周期,此模块其他相关的命令是不可执行的!

楼主的问题是没有理解,所有的REQ只是需要个上升沿电平(传送配置),而且对于相关的通讯命令(不是说LOAD)不建议直接使用那个Done操作REQ置一。

通常恰恰相反,是利用Done将那个操作REQ的置零!

调用(REQ=1)通讯命令后,通讯模块即收到,并执行通讯任务;这是异步通讯,经过一段时间,通讯完成时,模块等待CPU的调用命令;当某个扫描周期出现调用命令时,模块传回任务数据到调用命令指定的数据DB。同时该功能块收到Done或者Error。这些位只能存在一个周期(脉冲类型),否则你后面的程序没法写了。

CM、CB模块通讯期间,此类命令的调用,仅接收到模块的一个Busy。



学而时习之,不亦说乎?温故而知新,不亦乐乎?
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15112条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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