回复:modbus_comm_load初始化失败

已锁定

威师爷

  • 帖子

    5108
  • 精华

    47
  • 被关注

    255

论坛等级:至圣

注册时间:2013-09-18

白金 白金 如何晋级?

发布于 2020-11-21 10:07:17

5楼

展开查看
以下是引用yming在2020-11-21 09:52:25的发言 >4楼

我觉得,你也没有理解使用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。



以下是引用威师爷在2020-11-20 23:14:05的发言 >2楼: modbus_comm_load ...

引用2楼详细内容:

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


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

学习了。


是的,该指令就是向CM模块传递配置参数的。修改了波特率以后还得重新触发才有效,这一点可以说明。



工业起重机防摇摆 QQ:404136820 AntiSwayControl
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15105条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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