当前位置:
工控论坛
> >
产品
>
PLC
我要发帖
请教:MODBUS‘06’单个寄存器写入功能
点击:
7372
| 回复:
14
Yorktown
关注
私信
精华:1帖
求助:0帖
帖子:13帖 | 532回
年度积分:0
历史总积分:768
注册:2002年6月28日
发表于:2006-07-27 08:55:00
楼主
数据格式为 RTU 方式,使用 06 功能是否可以对单个寄存器的某个 位 进行写入?
例如使用 06 指令单独对从站 MODBUS 功能地址 40010 最低4位写入 1011 其余12位不写入。
分享到:
收藏
邀请回答
回复楼主
举报
中尉兄
关注
私信
精华:0帖
求助:0帖
帖子:25帖 | 436回
年度积分:0
历史总积分:647
注册:2006年6月05日
发表于:2006-07-27 09:12:00
1楼
计算机发送命令:[设备地址] [命令号06] [需下置的寄存器地址高8位] [低8位] [下置的数据高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位]
例:[11][06][00][01][00][03][CRC低][CRC高]
意义如下:
<1>设备地址和上面的相同。
<2>命令号:写模拟量的命令号固定为06。
<3>需下置的寄存器地址高8位,低8位:表明了需要下置的模拟量寄存器的地址。
<4>下置的数据高8位,低8位:表明需要下置的模拟量数据。比如例子中就把1号寄存器的值设为3。
<5>注意此命令一条只能下置一个模拟量的状态。
设备响应:如果成功把计算机发送的命令原样返回,否则不响应。
回复
引用
举报
中尉兄
关注
私信
精华:0帖
求助:0帖
帖子:25帖 | 436回
年度积分:0
历史总积分:647
注册:2006年6月05日
发表于:2006-07-27 09:16:00
2楼
如有疑问请继续跟贴!!
回复
引用
举报
通讯网
关注
私信
精华:11帖
求助:1帖
帖子:431帖 | 10265回
年度积分:0
历史总积分:24711
注册:2004年7月09日
发表于:2006-07-27 10:01:00
3楼
图中红笔圈出的就是给地址0,赋值0,的指令,需要的话,改变你的地址,改变你的赋值。
回复
引用
举报
通讯网
关注
私信
精华:11帖
求助:1帖
帖子:431帖 | 10265回
年度积分:0
历史总积分:24711
注册:2004年7月09日
发表于:2006-07-27 10:09:00
4楼
按你所说的应该发上图红笔圈出的一串字节。
回复
引用
举报
lcx426
关注
私信
精华:0帖
求助:0帖
帖子:1帖 | 140回
年度积分:0
历史总积分:144
注册:2005年7月09日
发表于:2006-07-27 10:20:00
5楼
当然是可行的,不过高四位的状态是须要覆盖发送的,个人见解请各位指正
回复
引用
举报
Yorktown
关注
私信
精华:1帖
求助:0帖
帖子:13帖 | 532回
年度积分:0
历史总积分:768
注册:2002年6月28日
发表于:2006-07-27 11:35:00
6楼
谢谢各位!那么看起来使用 06 功能指令一次写入就是 8 位,单写某个寄存器的 16 位中的 1 位是不行的。不知我的理解对不对?
回复
引用
举报
lcx426
关注
私信
精华:0帖
求助:0帖
帖子:1帖 | 140回
年度积分:0
历史总积分:144
注册:2005年7月09日
发表于:2006-07-27 11:57:00
7楼
是的,应该以字发送
回复
引用
举报
中尉兄
关注
私信
精华:0帖
求助:0帖
帖子:25帖 | 436回
年度积分:0
历史总积分:647
注册:2006年6月05日
发表于:2006-07-27 12:06:00
8楼
可以先用:[11][03],然后做处理当然是只改变你要改变的位了,最后再用:[11][06]写入。简单说就是读取数据--改变数据--写入数据,即可模拟你的按位写。
回复
引用
举报
Yorktown
关注
私信
精华:1帖
求助:0帖
帖子:13帖 | 532回
年度积分:0
历史总积分:768
注册:2002年6月28日
发表于:2006-07-27 12:26:00
9楼
“一族”先生的高见明白了:先用 03 功能读出这个 16 位,而后按要求修改所需的 位 后再用 06 写入就是了。可怜这个 MODBUS 功能地址 40010 是 只写,唉 这个方法可能也不行。谢谢!
回复
引用
举报
中尉兄
关注
私信
精华:0帖
求助:0帖
帖子:25帖 | 436回
年度积分:0
历史总积分:647
注册:2006年6月05日
发表于:2006-07-27 12:29:00
10楼
这个我还真忽略了!呵呵!
回复
引用
举报
中尉兄
关注
私信
精华:0帖
求助:0帖
帖子:25帖 | 436回
年度积分:0
历史总积分:647
注册:2006年6月05日
发表于:2006-07-27 12:48:00
11楼
对了,03和06对应的是40000开始的地址。不会有问题的阿,我刚查过。一个读一个写
回复
引用
举报
如火
关注
私信
精华:172帖
求助:0帖
帖子:803帖 | 5249回
年度积分:0
历史总积分:0
注册:1900年1月01日
发表于:2006-07-27 12:49:00
12楼
按位写,还是用05号命令写DO点;即使是对保持寄存器而言,读取数据--改变数据--写入数据的方法并不可取.按位操作最好用写DO来做,不要用输入或保持寄存器.
回复
引用
举报
中尉兄
关注
私信
精华:0帖
求助:0帖
帖子:25帖 | 436回
年度积分:0
历史总积分:647
注册:2006年6月05日
发表于:2006-07-27 13:09:00
13楼
如果是开关量当然是用05合适,但要是模拟量的话还是用04、06这样配合做才能解决这个问题。
回复
引用
举报
中尉兄
关注
私信
精华:0帖
求助:0帖
帖子:25帖 | 436回
年度积分:0
历史总积分:647
注册:2006年6月05日
发表于:2006-07-27 13:12:00
14楼
对了,如火兄,有profibus的协议吗?题外话!呵呵
回复
引用
举报
热门招聘
相关主题
国产PLC即将出世
[8033]
电气符号库
[9629]
profibus 和MPI 总线有何区别...
[7448]
PLC是什么?什么是plc
[13065]
STEP7 中文视频教程下载
[14081]
松下PLC技术支持
[8237]
西门子S7-200编程软件SP9直接...
[8242]
可编程控制器PLC教程(1-40完...
[18054]
PLC控制系统设计的基本原则
[7436]
PID的详细调试说明资料,好! ...
[13027]
官方公众号
智造工程师
客服
小程序
公众号