回复:那位朋友手头也有CP341(RS485)以及MODBUS_MASTER硬件狗能否帮忙做个实验并解答我的问题??

老石

  • 帖子

    47
  • 精华

    3
  • 被关注

    0

论坛等级:游民

注册时间:2008-08-04

普通 普通 如何晋级?

发布于 2008-09-05 19:51:29

0楼

quote:以下是引用万泉河在2008-09-05 15:42:31的发言:
楼上说的与我看到的一样。
没有哪个例子提到fc16,而恰恰fc16最难做。

TO 老石
用两个FB分别来做不同功能的通讯当然是可以的。
这样就不必总倒换数据区的内容了。
这个时候可能需要用到REQ管角了。



我也认为"用两个FB分别来做不同功能的通讯当然是可以的",但是没有成功,不知道什么原因.我想另发帖子与大家讨论.
FC16其实一点都不难,主要是资料对某些细节讲的十分含糊,做这个工作的人也不多,我感到4008104288的朋友对MODBUS通讯经验也不多,所以遇到问题可探讨朋友的不多.
只要搞明白了LEN和源数据块(source data area)DB长度的关系,可以自由的搞FC16通讯.
英文资料"Modbus_Master.pdf"47-48页有一个表介绍各个功能在DB的BYTE长度,其他功能的DB块长度是固定的,只有FC15,FC16是大于6个BYTE.注意体会.

最近我的实验还有一点体会,做小结如下.即数据块(例如DB1)的第四个字也特别有用处.是自己摸索的,也没有见过介绍.请朋友验证指教.
我的体会如下:
当FB8使能端EN有效,想修改背景数据块DB8的LEN变量DB8.DBW8(LEN)是不能的。
修改DB1(source data area)各个WORD或者BYTE可以。
LEN是源数据块(例如DB1的数据长度),但不是CP341实际发送的MODBUS查询帧代码的长度。DB1.DBW4是真正控制实际发送数据长度的参数。

例: DB1保持同样数字,仅仅是DB1.DBW4变化,CP341发送的查询帧发生变化。
下面两行代码是DB1基本保持同样内容的数字(18个BYTE),仅仅是DB1.DBW4变化,CP341发送了不同长度的查询帧。
LEN=18,DB1.DBW4=6。CP341发送的查询帧:
02 10 00 00 00 06 0C 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F DC 7D
LEN=18,DB1.DBW4=3 。CP341发送的查询帧:
02 10 00 00 00 03 06 00 0A 00 0B 00 0C 0A 85


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54618条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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