OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6144|回复: 9

modbus里功能码的意义。

[复制链接]

41

主题

242

帖子

0

精华

高级会员

Rank: 4

积分
523
金钱
523
注册时间
2016-1-11
在线时间
132 小时
发表于 2017-3-28 08:52:12 | 显示全部楼层 |阅读模式
20金钱
ModBus常用功能码 (功能码为10进制)  
01 READ COIL STATUS                       读线圈寄存器   
02 READ INPUT STATUS           读状态寄存器
03 READ HOLDING REGISTER      读保持寄存器
04 READ INPUT REGISTER                  读输入寄存器   
05 WRITE SINGLE COIL                        写单线圈寄存器  
06 WRITE SINGLE REGISTER       写单保持寄存器
15 WRITE MULTIPLE COIL          写多线圈寄存器
16 WRITE MULTIPLE REGISTER           写多保持寄存器void ModBus(void)
{
     switch(Function)
     {   
          case 0x01:
                    ReadCoil();     
                    break;
          case 0x02:         
                    break;
          case 0x03:
                    ReadReg();   
                    break;
          case 0x04:
                    break;   
          case 0x05:
                    SetCoil();
                    break;
          case 0x06:
                    SetReg();
                    break;
          case 0x0f:
                    SetNCoil();
                    break;
          case 0x10:
                    SetNReg();
          default: ;
     }      
}
哪位大虾帮忙解释下什么意思?这个是接受到一个字节后执行的程序。阅读线圈,设置线圈是什么意思啊?只有一个站号01  麻烦大虾说的通俗点,小弟没搞过PLC ,用的STM32f103vct6芯片。(公司程序里面的)


最佳答案

查看完整内容[请看2#楼]

搞过单片机不? 相当于51单片机的位操作 例如你定义一个位变量 bit i; 然后将i的值送给 TXD_BUF[5]=i; 这就相当于读线圈。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

24

主题

257

帖子

0

精华

高级会员

Rank: 4

积分
771
金钱
771
注册时间
2017-2-19
在线时间
133 小时
发表于 2017-3-28 08:52:13 | 显示全部楼层
搞过单片机不? 相当于51单片机的位操作  例如你定义一个位变量   bit i; 然后将i的值送给
TXD_BUF[5]=i;  这就相当于读线圈。
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2017-3-28 09:03:41 | 显示全部楼层
线圈寄存器实际就是PLC的输出寄存器,一系列的存储单元,实际的做法就是继电器,那些存储单元当作是软继电器,和单片机控制继电器一样使用,再接近一点就是STM32的ODR和IDR寄存器了
回复

使用道具 举报

8

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
422
金钱
422
注册时间
2016-11-19
在线时间
111 小时
发表于 2017-3-28 09:05:17 | 显示全部楼层
八度空间 发表于 2017-3-28 09:03
线圈寄存器实际就是PLC的输出寄存器,一系列的存储单元,实际的做法就是继电器,那些存储单元当作是软继电 ...

单片机控制和PLC控制,modbus协议的寄存器地址差1位
回复

使用道具 举报

1

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
340
金钱
340
注册时间
2017-2-15
在线时间
172 小时
发表于 2017-3-28 09:08:06 | 显示全部楼层
功能码表示要读或者写的数据类型。数据类型总共就是4种:DI,DO,AI,AO。DI也就是数字量输入,在这里叫做状态寄存器;DO是数字量输出,叫做线圈寄存器;AI是模拟量输入,这里叫做输入寄存器;AO是数字量输出,也就是保持寄存器。数字量占一个bit,模拟量占2个字节。功能码指示了要读单个、写单个寄存器,或者读多个写多个寄存器。要想详细了解可以去看看Modbus协议的资料。
回复

使用道具 举报

41

主题

242

帖子

0

精华

高级会员

Rank: 4

积分
523
金钱
523
注册时间
2016-1-11
在线时间
132 小时
 楼主| 发表于 2017-3-28 10:12:30 | 显示全部楼层
八度空间 发表于 2017-3-28 09:03
线圈寄存器实际就是PLC的输出寄存器,一系列的存储单元,实际的做法就是继电器,那些存储单元当作是软继电 ...

我的这个函数是属于从站响应是吧?主站发送一个数据帧,然后执行函数里面响应的功能是把?
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2017-3-28 10:30:14 | 显示全部楼层
mchoose 发表于 2017-3-28 09:08
功能码表示要读或者写的数据类型。数据类型总共就是4种:DI,DO,AI,AO。DI也就是数字量输入,在这里叫做 ...

好详细喔
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2017-3-28 10:32:10 | 显示全部楼层
沧海 发表于 2017-3-28 10:12
我的这个函数是属于从站响应是吧?主站发送一个数据帧,然后执行函数里面响应的功能是把?

看你做主机还是从机咯

1、从机的话就是响应功能码,执行相应的功能,有现成的开源代码FreeModbus
2、主机的话就是根据你想要获取的信息进行相应的功能码组合相应的数据帧,返回的数据解释数据帧就是了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

41

主题

242

帖子

0

精华

高级会员

Rank: 4

积分
523
金钱
523
注册时间
2016-1-11
在线时间
132 小时
 楼主| 发表于 2017-4-2 16:54:55 | 显示全部楼层
刘东君 发表于 2017-4-2 16:03
搞过单片机不? 相当于51单片机的位操作  例如你定义一个位变量   bit i; 然后将i的值送给
TXD_BUF[5]=i ...

这多直白, 通俗易懂,整其他都白扯。
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-4-3 17:45:03 | 显示全部楼层
把线圈去掉就好理解了.总线又不是专门控制线圈的.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-22 10:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表