首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

机房自动化监控手把手分享给你 - 2 温湿度传感器的对接

  • 25-03-08 00:41
  • 2091
  • 6728
blog.csdn.net

本文章是一个项目系列文章的第三篇,如果你还不了解前面的内容,请参考机房自动化监控手把手分享给你 - 0 总体说明

机房自动化监控手把手分享给你 - 1 项目前期准备
 

本章原计划讲解空调设备对接,后来发现先得讲明白RS485和Modbus协议内容,否则对不起手把手这个要求,所以就以温湿度这个最简单的设备作为本文内容了。

0 现场对接准备

我们现场实施采用如下思路:先保证监控箱供电正常,把串口服务器以太网接口接入内网交换机。然后把我们的笔记本电脑也能够接入内网,并且与监控箱串口服务器在同一个网段。

电脑上配置相关软件,确保监控箱能够与pc上的软件能够正常访问。

下面我以我的经验和理解,给你直观简单讲解一下RS485接口和以此为基础Modbus RTU协议内容。如果你已经对此了解,可以略过。如果你不了解,那么这些内容应该是最容易让你理解的教材,否则对不起这个“手把手”

0.1 RS485接口

RS485接口可以说是工业设备现场用的最多也是最简单的一种电器接口。只需要两根线,就可以把多个RS485设备连接在一起,设备间连接采用“手牵手的方式”,下面我给你一个简单的示意图:

​

上图的4个设备都有RS485接口,我们可以把这些设备用2芯电缆手牵手连接起来。这个图和实际现场接线几乎一样的,并不是抽象示意图。实际上上面的电缆线最好采用两芯屏蔽电缆,可以把电缆的屏蔽层接大地。一些工业现场如果要求更严格,你这个两芯电缆必须采购RS485专用电缆,我感觉里面的差别就是除了屏蔽层之外,内部的两根芯是卷绕在一起的,能够有更好的抗干扰能力。上面的设备间如果距离远了,整个线缆的两端可能还需要并联接一个120欧姆的电阻,用来避免信号反射回去。

事实上,机房环境非常好,距离又近,基本上你随便找根两芯线都可以搞定。

那么为什么RS485接口那么受欢迎呢?

很明显这个连接已经简单到不能再简单了,并且理论上的距离可以达到1000米,能够满足大部分工业现场设备连接需要。同时,人家抗干扰能力也有先天优势,那么这两根芯如何抗干扰的呢?

RS485这两根芯A,B采用的是电压差方式传输数据,当电压相差超过一定数值之后就认为这个数值是1,低于一定数值之后就是0。你可以想象,上面4个设备附近突然打了个雷,电缆上被电磁波感应出干扰电压,这个干扰电压在两根芯上可以认为是差不多的,那么线缆上的压差几乎不受影响(这应该就是抗共模干扰的能力,不要被这个专业术语唬住,其实大白话应该就这么简单)。

你仔细看上面的4个设备由3根电缆连接在一起,总体上形成一个总线。扣扣脚指头你就能明白,4个设备在同一时间,只能有一个设备发送数据——发送数据的设备控制485A和485B这两根芯的电压差变化,而其他设备就观察这个变化获得对应的数据。不仅如此,设备间还需要有如下一致性才能正常通信。

0.1.1 说话的速度:波特率

在同一个总线上的设备,必须遵循同一个信号变化速度,也即是AB两根线在0 1 变化之间的时间间隔必须一致,否则就错乱了。比如2400、4800、9600、19200他们分别代表1秒钟内变化次数,这个波特率越大,那么每秒能够传输的数据量就越大(传输速率)。但很明显速率越大,抗干扰能力就会下降。我在工业现场用的最多的波特率是9600.

0.1.2 数据字节位数和校验

我们计算机的数据基本以byte字节作为基础,而RS485 AB一次压差只能传输1bit,所以为了能够传输字节,除了波特率一致之外,还需要设定每个数据的位数如8,停止位1,是否要寄偶校验。这些参数在一个总线上的所有设备只需要保持一致就行。

有了上面RS485的统一参数,这下设备间就可以通信了吧。还不够:比如你说中文,总线上另一个人说英语,互相听不懂,那就没法传递信息了。同时还有个问题:如果这个总线上同时有两个设备发送数据,那就乱套打架了。那么如何避免呢?这就需要设备间有个协调机制了,也就是通信协议了。

0.2 Modbus RTU协议

有了上面的RS485总线和4个设备,好比有了4个人,每个人都有一个嘴巴和耳朵。但这些人都比较蠢,同一时间只能一个人说话,其他人才能听明白。这时,我们就需要让他们遵循一点的说话规则,这就是通信协议。对通信来说,Modbus RTU协议是工业现场最简单的通信协议之一。

0.2.1 主从设备划分

Modbus协议规定,一个总线上只能有一个主设备,其他都是从设备。所有的通信都只能由主设备发起,从设备根据发起的请求判断是否需要自己回答,主设备请求结束之后,对应的某一个从设备开始发送自己的应答数据。

这个主从机制就可以保证总线上同一时间,只有一个设备发送数据。

这种主从设备限定能够满足大部分工业现场需要,以我们这次机房监控为例,我们制作的监控箱可以提供3个RS485接口,可以建立3个RS485总线。监控箱RS485口是主设备,而现场的机器和传感器都是从设备。连接之后,如果我们监控箱不发起请求,它们就不做任何信息发送。

0.2.2 从设备地址

还是以上图4个设备为例,如果“设备1”是主设备,那么从设备(设备2、设备3、设备x)应该如何区分呢。Modbus协议规定,每个从设备都可以有1字节的设备地址(值范围1-254)。同一个总线上的从设备地址不能相同,这样当主设备发起请求的时候,第一个字节就是从设备地址,那么总线上所有的从设备在发现主设备的请求数据之后,只需要判断第一个字节,就可以知道是不是自己应该答复的内容。并且在应答的时候,发送数据第一个字节也是自己的地址。

0.2.3 功能码

有了以上内容之后,那么我们就可以进入主设备对其中一个从设备一次“请求-应答”的详细传输数据了。

Modbus规定,主设备发起请求的第一个字节是设备地址,第二个字节就是功能码了,这个功能码代表了请求的类型。用的最多的读取数据功能码是:

01

读取线圈状态

取得一组逻辑线圈的当前状态(ON/OFF)

说人话:其实就是读取-只读的开关量或bool值,每个数据1bit

地址格式:000xx

02

读取输入状态

取得一组开关输入的当前状态(ON/OFF)

说人话:其实就是读取-可读写的开关量或bool值,每个数据1bit

地址格式:100xx

03

读取保持寄存器

在一个或多个保持寄存器中取得当前的二进制值

说人话:其实就是读取-可读写的word数据,每个数据16bit(word)

地址格式:400xx

04

读取输入寄存器

在一个或多个输入寄存器中取得当前的二进制值

说人话:其实就是读取-只读的word数据,每个数据16bit(word)

地址格式:300xx

如果主设备要把数据写入到某个从设备,那么用的最多的有这两个功能码

05

强置单线圈

强置一个逻辑线圈的通断状态

说人话:其实就是写入单个-可读写的开关量或bool值,数据1bit

地址格式:100xx

06

预置单寄存器

把具体二进值装入一个保持寄存器

说人话:其实就是写入单个-可读写的word数据,数据16bit(word)

地址格式:400xx

 上面的功能码命名很怪异,我感觉是历史上使用继电器年代遗留的命名,所以我给你加了我的人话说明。另外,在软件配置中,你不需要知道这些具体的功能码,你只需要遵循对应的地址格式,软件自己就知道应该使用哪种功能码。

上面你如果第一次接触可能会有点头大,没关系我们后面具体到设备会慢慢展开讲解。你只需要知道如下:每个设备内部都有一个数据块,内部有多个数据,每个数据都有自己的地址。这些数据随着设备的运行会不断变化。我们的主设备可以通过功能码和地址参数直接从这些设备内部获得应答数据,或者通过写入功能码和地址把数据写入到从设备中——以达到控制设备的效果。

你如果是第一次接触这些内容,看到这里,你如果不迷糊,那么恭喜你。工业现场看似复杂的设备和唬人的线路,以及内部的运行机制马上就要被你看穿了。那种对你产生吸引的神秘感马上就要被揭开面纱了。

1 监控箱的安装和软件对接准备

我们在现场把监控箱先安装好,通上220VAC供电,这样箱子就可以为我们提供12V和24V直流电了。这也为我们现场设备安装和调试提供了方便。

每个设备在现场安装上导轨之后,我一般都会对此进行单独测试或参数设置。你可以发现我们的设备大部分都是RS485接口,在总线上必须分配不同的地址。每个设备由于厂家的不同,地址设置方式都有自己的差别。这个就需要厂家提供足够详细的说明书了。

为了调试设备,建议你安装ModScan软件。这个软件直接支持Modbus协议,又比较小巧,可以在电脑上模拟主设备。使用这个软件你需要对Modbus协议比较了解,同时考虑到设备限制——一些计算能力较弱的设备不允许一次读取太多数据,你在使用ModScan测试时也需要一些技巧。我使用开源项目软件IOT-Tree只需要配置相关的地址即可。并且,在项目中也使用这个软件配置监控UI,所以本文章也就以这个软件作为测试、部署推进整个过程。

1.1 IOT-Tree软件的安装和简单介绍

你在github上搜索IOT-Tree,进入项目界面,从release中下载最新的版本。这个软件只需要解压就可以运行。

github下载地址

这个软件安装启动之后,里面的文档也比较全,建议有时间可以整体快速过一遍了解一下,在此就不做细说了。

假设你笔记本上已经安装并启动了这个软件,打开浏览器访问本地管理地址 http://localhost:9090/admin/ 进入系统管理主界面,在 “Local Projects”区域点击上方的"+Add"按钮,填写你的项目名称和标题,新建项目。

然后点击新建的项目进入项目管理主界面。如下图:

IOT-Tree最大的特色是设备接入-数据组织分离,你可以先使用RS485直接连接的方式测试设备,配置好之后,在实际项目环境切换一下接入即可。数据组织可以不用修改。 

2 直接基于RS485接口测试温湿度模块

2.1 测试电路

我使用USB-RS232-RS485转接线如下图:

 usb端插入电脑之后,你在我的电脑上鼠标右键,选择"管理",在弹出的计算机管理窗口中,点击设备管理,然后在右边的“设备列表中”展开“端口(COM和LPT)”。你会看到如下内容:

请记住这个COMX(我的是COM3),这个是串口在windows系统下面的端口标识,通过我们这个转接电缆,代表的就是对应的RS485接口。

现在请准备好温湿度传感器,从监控箱中使用一根两芯电缆连接12V供电,接入传感器的供电正负极。然后在用一根两芯电缆,连接usb-RS485转接头到温湿度传感器。如下图

 2.2 温湿度传感器说明书

 这个温湿度传感器出厂的时候,RS485接口参数是9600波特率 无校验 8数据位 1停止位,设备地址为1。

由于读取命令功能码使用04,对应设备地址为300xx(以1为起始地址)

2.3 软件配置

2.3.1 配置测试串口接入

 点击左上角Connectors,在菜单中选择"COM",然后在弹出的对话框填写如上内容,其中ID选择你插入USB-RS485转换电缆之后的COM口,我这个是COM3。点击"Ok",你就新建了这个串口接入。

2.3.2 配置通道和设备

我们在项目中间it_room这个根节点下新建一个通道和这个通道下面的设备,这个通道从逻辑上对应现场的一个RS485总线。我们计划除了这个温湿度传感器,另外两个漏水传感器也在这个通道下面——也即是现场这3个设备在一个总线上。

鼠标右键"it_room"节点,选择“New Channel",在弹出的对话框填写如下内容:

其中,通道的Driver请选择Modbus RTU。点击Ok之后我们就完成了这个通道的建立,并且指定这个通道使用Modbus RTU驱动。IOT-Tree会在这个通道上,以Modbus的主设备存在。

现在我们在新建的ch1节点上鼠标右键,点击”New Device“ ,在弹出的对话框中,填写设备的名称和标题即可。如图:

点击确定之后,我们就可以看到在这个通道下面,新增了这个设备节点。点击此节点,在右边"[Tags]"区域,点击“+Add Tag” ,

上面我们新增设备内部温度值地址0x0001,对应modbus标准地址30002。我们接着添加湿度地址0x0002,对应标准地址30003。两个数据添加完成之后,如下图:

根据设备厂家文档,我们发现两个数据读出时是个整数,其值是温度或湿度的10倍,我们需要对此数据做除10,并且变成浮点数的转换。我们双击对应的数据项,在编辑界面中,点击Transfer输入框,弹出的对话框中,选择JS,填写一行js转换代码,并且选择转换之后的数据类型为float。如下:

多次点击"Ok" ,完成对数据转换的设置,温度和湿度都同样设置转换处理,完成之后,数据列表如下图:

根据厂家文档,我们发现使用功能码03,可以读写设备从机地址数据,这个数据地址是0x101,对应标准modbus地址是40258。我们添加数据对话框如下:

这样我们就完成了这个温湿度传感器的数据设置。我们接着打开控制箱电源,使得传感器通电工作。然后,在项目中把串口usbcom接入和ch1,建立关联(鼠标移动到subcom右边的方块,点左键不松开,移动到ch1左边的小方块上方,然后松开左键就完成了),并启动项目。 

如果设备正常,可以看到设备数据获得的数据:

其中,温湿度通过转换都以float类型进行展示,而设备地址是可读写的,你可以在里面填写11,然后点击输入框边上的写入按钮,IOT-Tree会自动写入对应的数据到传感器中。传感器的modbus地址会被更改,你在控制箱中切断供电,然后在通电,使得传感器被重启,这时候这个温湿度模块的modbus从地址已经是11,你会发现数据都出错了。

因为我们缺省情况添加的这个设备地址是1。也即是我们需要修改这个设备的地址。点击wsd这个设备节点,然后在右边内容去点击"Properties"选项卡,找到Modbus Device Address属性项,把里面的地址1修改为11,然后点击上方的Apply按钮。之后,再项目上方点击停止,然后在点击启动。你就会发现数据又正常了。此时,这个温湿度传感器的地址已经被修改成11,我们配置的设备参数也跟着更改了。

3 温湿度传感器接入串口服务器

通过以上USB-RS485直接连接,我们测试并修改了温湿度传感器的对接和Modbus从地址。接下来我们把这个传感器接入到串口服务器的某个RS485接口中。

3.1 设备接入机房内网

用户给我们的设备接入他们现有的以太网交换机,网段为192.169.5.*。其中,串口服务器分配地址192.168.5.11;UPS分配192.168.5.12;监控触摸屏计算机192.168.5.13;我们自带的笔记本通过自动获取IP,也在这个网段之内,能够方便的互相访问。

串口服务器模块因为在监控箱内,可以直接由里面的电源模块提供12V直流供电。现在市场上的串口服务器都提供了网页访问的参数设置。我这个串口服务器里面有个3个RS485接口,他们分别是COM1,COM2,COM3。通过配置,这三个RS485接口分别对应3个Tcp Server监听端口8001,8002,8003。我们在PC端的软件只需要访问串口服务器IP地址192.168.5.11,然后分别连接这三个端口,就可以建立3个Tcp链路,分别对应这三个RS485总线。并且数据传输都是透明的。

我们把上面测试的温湿度模块原先对接我们USB-RS485接口断开,然后使用两芯线接入串口服务器的COM1对应的RS485口。当然供电还是以监控箱提供不做改变。如下图:

这样接线之后,我们就可以通过 192.168.5.11:8001这个IP地址和端口访问这个温湿度传感器了。

3.2 IOT-Tree配置Tcp接入

我们还是在IOT-Tree机房项目管理界面中,点击左上角Connectors,在菜单中选择Tcp Client。然后,在弹出的编辑对话框填写如下信息:

点击"Ok"之后,我们就完成了通过串口服务器COM1口接入,可以透明连接到温湿度传感器了。此时,我们鼠标右键之前测试使用的usbcom右边连接方框,删除此链接。然后鼠标左键点击ethcom1右边的连接方框不松手,拖拉线条到ch1左边的连接方框释放,这样就完成了链接的切换。如图:

可以看到,通道ch1下面已经配置好的设备不需要做任何修改。你给监控箱通电之后,点击上方项目启动按钮,可以看到此时,你的笔记本电脑上运行的IOT-Tree已经通过串口服务器访问温湿度传感器成功了。

到此为止,我们在现场,对这个温湿度传感器现在安装、测试并且在软件中也配置成功。 

4 总结

本章内容主要以RS485和Modbus协议及配套软件的详细说明。并且以温湿度直接连接和通过串口服务器切换连接都取得成功。

本章的内容非常重要,后续设备的接入和使用Modbus协议基本就以这篇文章讲述的内容而进行。

在串口服务器COM1 RS485口对应的总线,我们后续还会接入两个漏水传感器。这个就在下一篇详细介绍。请注意:当前软件都运行在你的笔记本电脑上。到最后我们只需要把你现在调试使用的项目导入到现场触摸屏微型PC中。所以,后续软件配置如果不做说明,那么都是在你的笔记本电脑上进行。

注:本文转载自blog.csdn.net的柱子jason的文章"https://blog.csdn.net/qq_40065619/article/details/135332457"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top