首页 » 智能科技 » modbus10分钟搞懂,继电器的作用和原理。

modbus10分钟搞懂,继电器的作用和原理。

喜鹊装饰工程通讯 2024-09-07 0

扫一扫用手机浏览

文章目录 [+]

这是一个普通单片机进行的MODBUS输入输出掌握,可以运用在任何必要读取或者掌握的硬件厂商,办理上位机与硬件通讯的问题,如果通过转换网关实现远端掌握,云端掌握等。

输入输出接线与功能描述:

modbus10分钟搞懂 modbus10分钟搞懂 智能科技

输出部分:NC(常关) COM(公共脚) N0(常开)

modbus10分钟搞懂 modbus10分钟搞懂 智能科技
(图片来自网络侵删)

负载 220V 10A 建议在220V 6A以下

1.只是一个开关的关闭与断开,没有任何电压输出。

2.只能通过485通讯发指令来掌握继电器的开启与关闭。

3.默认情形NC COM是接通的,当485发送开启指令的时候

NC 与COM断开,NO与COM接通。
反之。

输入部分:IN1接开关或者电压旗子暗记(3V - 30V),

1.只能通过电脑读取开关量的状态,不能掌握继电器,如果须要能掌握继电器跟店家沟通。

2. IN1 接开关(无电压旗子暗记): IN1 接VCC电脑去取为 1 否则为0

通信协议

Modbus RTU 指令

波特率 :9600 8 NONE 1

16进制发送16进制吸收

操作步骤:1.软件选择通讯波特率2.设置地址(通讯利用的设备地址,默认地址为01) //

把稳:只接一个设备,否则地址都会被设置。
设置地址为:0100 10 00 00 00 01 02 00 01 6A 00// 修正成01设置地址为:0200 10 00 00 00 01 02 00 02 2A 01// 修正成02设置地址为:0300 10 00 00 00 01 02 00 03 EB C1// 修正成03

读取地址00 03 00 00 00 01 85 db返回:00 03 02 00 01 44 44 //01为地址

////各字节代表的意义:[1号地址]//--------------------------------------------1号继电器开启 : 01 05 00 01 01 00 9d 9a

字节1: 地址字节2: 功能吗字节3 4:寄存器地址字节5 6:寄存器数据字节7 8:CRC校验

//==============================================================[1号地址]//--------------------------------------------0号继电器开启 : 01 05 00 00 FF 00 8C 3A0号继电器关闭 : 01 05 00 00 00 00 CD CA//--------------------------------------------1号继电器开启 : 01 05 00 01 FF 00 DD FA1号继电器关闭 : 01 05 00 01 00 00 9C 0A//-------------------------------------------2号继电器开启 : 01 05 00 02 FF 00 2D FA2号继电器关闭 : 01 05 00 02 00 00 6C 0A//-------------------------------------------3号继电器开启 : 01 05 00 03 FF 00 7C 3A3号继电器关闭 : 01 05 00 03 00 00 3D CA//-------------------------------------------4号继电器开启 : 01 05 00 04 FF 00 CD FB4号继电器关闭 : 01 05 00 04 00 00 8C 0B//--------------------------------------------5号继电器开启 : 01 05 00 05 FF 00 9C 3B5号继电器关闭 : 01 05 00 05 00 00 DD CB//-------------------------------------------6号继电器开启 : 01 05 00 06 FF 00 6C 3B6号继电器关闭 : 01 05 00 06 00 00 2D CB//-------------------------------------------7号继电器开启 : 01 05 00 07 FF 00 3D FB7号继电器关闭 : 01 05 00 07 00 00 7C 0B//-------------------------------------------

//读取0号继电器状态:01 01 00 00 00 01 FD CA读取1号继电器状态:01 01 00 01 00 01 AC 0A读取2号继电器状态:01 01 00 02 00 01 5C 0A读取3号继电器状态:01 01 00 03 00 01 0D CA读取4号继电器状态:01 01 00 04 00 01 BC 0B读取5号继电器状态:01 01 00 05 00 01 ED CB读取6号继电器状态:01 01 00 06 00 01 1D CB读取7号继电器状态:01 01 00 07 00 01 4C 0B

读取所有继电器状态:01 01 00 00 00 08 3D CC//让开指令:解释:开启后立时关闭,100MS为一个单位[1代表100MS]

1号地址:0号继电器让开 : 01 05 02 00 07 00 CE 42 //700MS = 7100MS = 700MS1号继电器让开 : 01 05 02 01 08 00 9A 72 //800MS返回:跟发送指令一样2号地址:0号继电器让开 : 02 05 02 00 05 00 CF 11 //500MS1号继电器让开 : 02 05 02 01 06 00 9E 21 //600MS

//======================================================================全灭: 01 0F 00 00 00 08 01 00 FE 95全亮: 01 0F 00 00 00 08 01 FF BE D5

//单一翻转指令:0号继电器翻转:01 05 00 00 55 00 F2 9A1号继电器翻转:01 05 00 01 55 00 A3 5A2号继电器翻转:01 05 00 02 55 00 53 5A3号继电器翻转:01 05 00 03 55 00 02 9A4号继电器翻转:01 05 00 04 55 00 B3 5B5号继电器翻转:01 05 00 05 55 00 E2 9B6号继电器翻转:01 05 00 06 55 00 12 9B7号继电器翻转:01 05 00 07 55 00 43 5B

全部翻转指令:01 05 00 00 5A 00 F7 6A

//读取所有接口 输入状态发送:01 02 00 00 00 08 79 CC //读取8个输入状态返回:01 02 01 00 A1 88

那么我们根据上述功能及通信协议就可以开拓对应的上位机

通过网关就可以做很多少事情

大略来说便是打通硬件末了一米

2、先聊聊“数据通信模型”

玩嵌入式的小伙伴们肯定是玩过各种通信办法和通信协议,由于我们所做的项目不是一个独立的个体,它须要跟外界交互,交互就须要有一套大家都遵守的东西那便是我们的协议,一样平常的与打算机有点关系的信息类专业,大学该当或多或少学过《打算机网络》这门课程,可以说打算机网络系统是一套非常完备的通信系统
我们本日的modbus协议的先容肯定比他大略不知道多少倍,以是大家不要错愕。
不过我以为提及通信一定不能短缺下面这个模型:

可以说险些所有的通信办法都会基于该数据通信模型进行分层制订和开拓
我们在前面的文章中的编程技巧也提到了这个模型,个人以为它最大的特点便是分层,并且下层仅仅为上层供应做事,但是却只一个层面上的交互
(形象点说,就好打我们电话我们只在乎你说的话的内容,我们并不在乎我们所说的话是若何通过电话和通信通报给对方的)

好了,我们平时在嵌入式中常常碰着的串行数据通信,比如串口通信,SPI,IIC,CAN等等,他们都属于上面模型中的数据链路层和物理层,可能很多小伙伴们自己制订了大略的通信协议,那么可以说直接从用户层-->数据链路层-->物理层进行传输,中间层基本上就没有了。
以是说我们可抽取个中的几个层面来进行我们通信协议的设计。

3、通信的实质(纯粹个人理解)

通信的实质我以为便是沟通嘛。
那么在我们编程中我们可以叫做"交流数据",比如说我把数据传给你,你接管到处理往后把我想要的数据传给我,就这么大略。
我们也知道大部分旗子暗记都是电旗子暗记,然后我们去看电旗子暗记来对应数据吗?电旗子暗记数据无非便是0和1,可以对应着我们程序的二进制文件,有点难懂,既然传输的是数据我们如果能够用8bit-byte的形式来表示那就最好了。
那我们在程序中接管到数据直接就可以拿来利用了

对付SPI,IIC等这类通讯办法,我们就认为在传byte就行了,我们在往后的项目开拓中我们常常会碰着通信FIFO来进行缓冲(以是我之前写了一篇《无数据类型的行列步队实现》是非常有用的),终极解析数据的话基本上都是去FIFO中取数据进行解析,以是用如下图模型(大家彷佛叫字节流-那么就叫"字节流模型")再好不过了。
对付CAN这种一次性发送多个byte的通信办法,虽然有分外的处理的通信协议,不过我们完备可以转化为如下图所示的办法进行数据解析和处理。
(只是说我们可能会考虑到传输效率和运用等会开拓出新的通信协议)

4、超级大略的Modbus协议

根据我们第二小节所说的字节流模型,我们知道数据都是1个bye一个byte传输的,我们只要规定好每个byte代表什么意思,然后把byte组合起来是不是发送方也接管方都懂了?那么规定这些byte意思的便是我们的协议-协议完备可以自己定,不过我们这里本日选用了一种运用非常广泛的modbus协议来供大家学习和参考。
一方面可以参考协议如何制订,往后可以直接模拟创造自己新的协议,另一方面可以积累一些设计上的履历
好了,下面开始我们的modbus协议的讲解:(这里我不可能把modbus协议全面的为大家讲解,也没有必要,由于很多东西都是重复的,只要大家理解查查modbus协议手册分分钟的事情)

1)先容modbus协议核心

modbus协议是一种要求/应答的协议。
说白了便是一问一答
可能小伙伴们会问,主机向从机写数据也是问吗?是的,比说说:我问你123456789收到没?你回答说接管到了123456789.下面为大家展示一下modbus一些的核心:

modbus的核心便是由这样四个区域的byte组成的数据包来进行相互传输相互交互的。

地址:(占用1byte)modbus通信总线上有非常多的设备,并且其总线上只有一个主机,就彷佛一间教室里面一个老师正在产生发火业本一样,老师会根据学生的名称(也便是该地址)发送对应的作业本给学生,而学生写完作业往后也会填上字节的名字进行上交。
并且这些地址肯定是唯一的标识,由于我们modbus协议还不能像老师一样能够根据外表来同名区分。
(总结:如果该数据包是主机发送,那么地址便是对应从机的地址,如果该数据包是从机的上报,那么该地址便是从机的地址)

功能码:(占用1byte)字面上的意思便是区分不同的数据帧的类型,实在modbus协议便是通过不同的功能码定义了数据部分的不同格式,从而实现了多种传输功能。
以是modbus的功能码特殊多,不足我总结了一下基本上便是读数据和写数据,只是讨情势上分得更多了点,我们只要根据modbus协议上规定的办法进行添补即可。
后面我会举例解释。

数据:(根据功能码占用多个byte)根据功能码的不同,不同的byte代表不同的意思。

校验:(占用2byte)为了保持数据的稳定性,只管即便避免在通讯过程中的数据错乱,就好比把前面的数据进行求和然后放在该区域发送出去。
只是说modbus协议利用更加精良的CRC校验(前面我也揭橥过CRC校验的文章,CRC校验分很多类型,在数据校验中常常利用)

说了很大略吧,下面我以一个功能码为大家进行详细的讲解:(其他功能码和一些把稳事变都可以在modbus的详细协议文档中找到答案)

2)modbus协议功能码实例

我们以功能码:0x04为例,下面完备知足我们上面的格式(个中数据区位于功能码和校验之间)

发送方地址功能码起始地址输入寄存器数量校验

把稳:1)modbus中的地址和数据都是大端模式,也是便是说高字节先传,比如地址2byte分别是0x1122,那么发送字节流的时候先发0x11然后放0x22。

2)上面接管方接管到数据,会判断功能码,字节数输入寄存器个数等等,是否在精确的范围,如果都知足哀求,就以接管方(success)的数据格式精确的返回数据,如果检讨有问题就会以吸收方(Fault)的格式把0x04+0x80作为功能码,然后确定好非常的类型(在modbus标准协议中有解释)然后进行发送。

3)其他的功能码都是类似的,并且Modbus协议是一种不依赖物理通讯的通信协议!大家可以根据自己实际的项目进行改造。

标签:

相关文章