基于RS485的ModBus通讯

B站https://www.bilibili.com/video/av84153640?p=6

一、通信

1.信道

传输数据的载体,比如古代传信息白天用狼烟,晚上用烽火。

2.协议

收发数据双方达成的一致协议,对数据格式、含义等作出规定,比如一道烽火代表500人,两道代表1000人。

二、串口

1.并行通讯

以收发十六进制数据为例,并行通讯要用8个IO口连8根线同时发送8位数据。

2.串行通讯

两个接口两根线构成一个回路,每次收发1位数据。

3.RS485通信

以字节形式发送,一次可以发很多字节,MAX485芯片支持,将数字量与模拟量转换,使用差分电路的方式,半双工,可收可发不可同时收发(对讲机一样)。

  • 高低电平,A>B 1,A<B 0,正电2~6V,负电-2~-6V。
  • 按波特率,9600的波特率就是1s能传输9600位数据,约1ms发1位,距离远的时候波特率可适当低一点。
  • 工业RTU传输,数字一般以16进制(8位1字节,每组数据头加0,尾加1)或字符发送。
  • 不传输数据时一直发高电平1(可用来检查设备接线是否正确:设备通电,把万用表调到直流10V档,测一下设备两根引线间的电压是不是高电平)。

三、功能码详解

RS485能做的就是收发数据,如果要进行多机通信要进行一些包装。

1.给设备进行编码

  • modbus协议规定第一个字节用来放从机地址,01——FF,00作为广播地址。
  • 主机不需要编号,只有一个主机。

2.给数据进行编码

  • 给数据地址分配了两个字节,0000——FFFF。这个地址仅仅是个编号,不代表真实的地址。

3.给指令进行编码

不论是PLC还是单片机,都有四种数据:

bit(位输入/出)byte(模拟量输入/出)
开关量输入(以西门子继电器为例:I0.0~I0.7)寄存器输入(以双字节为单位,IW64)
开关量输出(Q0.0~Q0.7,数据地址:0000~FFFF)寄存器输出(QW64)

主机对指令进行编码,又称功能码,分成收和发两部分,可以理解为主机指令的编号。一方面代表是读是写,另一方面代表是对哪种类型的数据进行操作。

指令编码操作数据类型编码操作数据类型
读数据01开关量输出02开关量输入
03寄存器输出04寄存器输入
写数据05开关量输出(单个位)06开关量输入(单个位)
15寄存器输出(多个字节)16寄存器输入(多个字节)

读位:读继电器开关量

读数:读变频器频率

写位:打开2号继电器

写数:将变频器的频率从50HZ改成30HZ

写入多个位:

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值