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

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已经通过串口服务器访问温湿度传感器成功了。

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

0vbfkt-1715755841290)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐