回复:【MODBUS】变频器串口轮询通讯

link_wxm

  • 帖子

    125
  • 精华

    3
  • 被关注

    3

论坛等级:侠客

注册时间:2013-08-27

普通 普通 如何晋级?

发布于 2015-04-23 11:52:29

13楼

展开查看
以下是引用并州将在2015-04-20 21:56:29的发言 >12楼:首先我没注意你们谈的是1200,而不是200,我是基于S7200和S7200 Smart 说的,下面说说我的看法,如果说错了,还请前辈给予指教奥:
1、done位在手册上虽然没有直接说错误也能置为1,但有这么1句话,不知兄台注意到没有?
==发送请求和接收响应时,“完成”(Done) 输出关闭。 响应完成或 MBUS_MSG 指令因错误中止时,“完成”(Done) 输出接通。==

仅当“完成”(Done) 输出接通时,“错误”(Error) 输出才有效。

这句话是不是表明了:一切错误代码的有效性是完全基于DONE==1为前提?

2、你可以这样验证下,就是只用done位来轮询3个站,然后你把其中任何1个站拔掉,看是否其它2个站还可以! 如果你拔掉其中任何一个站,其他2个站都停掉了,证明你的说法是对的,相反如果你拔掉其中任何1个站,其他2个站还照常运行,那么你的说法就是错误的,

综上,以前我现场用过的,我认为我的理解应该是对的,因为我就是轮询的3个510变频器,可是有时候变频器故障了,但是其他照样运行,只不过稍微延迟那么几百毫秒罢了,就是我说的延迟时间×唤醒次数,如果按照兄台的逻辑,假设某个设备故障了或者通讯故障了,done位就一直为0,那么请兄台解释下那个ERROR错误码还有何意义?因为done位一直为0,那么它的错误代码就没有任何有效性,你要是用错误位判断岂不是错上加错?除非西门子手册上这句话是写错了!
==发送请求和接收响应时,“完成”(Done) 输出关闭。 响应完成或 MBUS_MSG 指令因错误中止时,“完成”(Done) 输出接通。==

仅当“完成”(Done) 输出接通时,“错误”(Error) 输出才有效。
以下是引用link_wxm在2015-04-08 11:02:47的发言 >7楼:刚看到你说的,让我...

引用7楼详细内容:

刚看到你说的,让我之前的记忆越来越模糊不定了,花了几分钟做了个实验还好我的记忆没有出错;
我不知道你说的这个“完成位”在达到唤醒次数后是怎么置1;
以下是我做的实验图片:








以下是引用并州将在2015-04-08 01:22:10的发言 >6楼:完成位在错误时也是...

引用6楼详细内容:

完成位在错误时也是可以的,DONE位并不是说只有通讯正常时才置1,它在通讯错误达到唤醒次数限制时也同样置1的,西门子默认的唤醒次数是3次,但是可以修改成1次,对于只有三五个从站的话,设置成50~100ms的延时完全不受影响,只有从站多的时候需要给个控制优先级,一般情况下完全没有问题!

以下是引用link_wxm在2015-03-18 10:19:52的发言 >1楼:用完成位做轮训是...

引用1楼详细内容:

用完成位做轮训是不够的(应该用完成+错误位);
如果数据干扰、错误呢?完成位怎么触发下一个读写呢?
版主还是没有认真的看完modbus通讯的说明;
还有问题:
你都是完成位触发且没有掉站说明没有数据错误,那何来的8200(端口忙于处理发送请求),不合理啊!
你加延时触发就解决了8200(端口忙于处理发送请求),这不符合原理;
加比较没有必要,既然轮训了那就跟PLC的扫描周期一样,数据变化就更新不是更方便吗?
版主应该在程序上下点功夫好好检查你的程序;

兄台以后得注意标题方可回答,否则“殃及鱼池”(200的不清楚可能有区别);
实验就不做了没有一点意义了,兄台难道没有看见实验中的结果吗?
“完成位”和“错误代码”两者互不冲突啊!
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

谈天说地

共有14334条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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