Model3C芯片方案--86彩屏中控面板Modbus协议说明

news2024/11/16 19:56:35

一、概述

Model3C芯片是一款基于RISC-V的高性能、国产自主、工业级高清显示与智能控制MCU,配备强大的2D图形加速处理器、PNG/JPEG解码引擎,并支持工业宽温。基于Model3C芯片的86彩屏中控面板,通过集成Modbus协议,实现了与多种控制设备的通信和数据交换。
在这里插入图片描述

二、Modbus协议简介

Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其他设备之间可以通信。它已经成为一通用工业标准,使得不同厂商生产的控制设备可以连成工业网络,进行集中监控。

此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus 协议发出。在其它网络上,包含了 Modbus 协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。

三、Modbus RTU在Model3C芯片方案中的应用

通信接口:Model3C芯片方案支持RS-485接口,该接口是Modbus RTU常用的串行通信接口之一。通过RS-485接口,86彩屏中控面板可以与其他Modbus设备(如PLC、传感器等)进行通信。

通信参数:在Model3C芯片方案中,Modbus RTU通信采用异步通讯模式,具体参数包括1位起始位、8位数据位、1位停止位、无校验位,波特率可根据实际需求进行配置(如常用的9600波特率)。

报文格式:Modbus RTU报文包括设备地址、功能码、数据域和CRC校验码等部分。在Model3C芯片方案中,这些报文格式遵循Modbus协议规范,确保通信的准确性和可靠性。

主从通信:在Modbus RTU通信中,Model3C芯片方案的86彩屏中控面板可以作为主设备(Master)或从设备(Slave)进行通信。作为主设备时,它可以主动发起查询请求;作为从设备时,它可以响应主设备的查询请求并提供相关数据。

功能码:Modbus协议定义了多种功能码(如读取线圈状态、写入线圈状态、读取保持寄存器等),用于实现不同的通信功能。

在Model3C芯片方案中,这些功能码得到了全面支持,使得86彩屏中控面板可以实现与多种Modbus设备的灵活通信和数据交换。

四、rt-thread 使用libmodbus-rtu库

libmodbus是一个与使用Modbus协议的设备进行数据发送/接收的库。该库包含各种后端通过不同网络进行通信(例如,RTU模式下的串口或TCP / IPv6中的以太网)。
在这里插入图片描述

将libmodbus库从软件包里启用, libmodbus是基于select操作的,依赖于文件系统和libc,需要在rt-thread中开启对应的支持。

RS485的话需要指定 modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS232); //改为485
modbus_rtu_set_rts(ctx, RS485_RE, MODBUS_RTU_RTS_UP); //指定485控制引脚和电平

#include “modbus_rtu_test.h”
#include “modbus.h”
#include “stdio.h”
#include “string.h”

#include <rtthread.h>
#include <sys/socket.h> /* 使用BSD socket,需要包含socket.h头文件 */
#include <netdb.h>
#include <string.h>
#include <finsh.h>

#define RS485_RE GET_PIN(G, 8)

static void test_thread(void *param)
{
	int slaveaddrs = 3;
	uint16_t tab_reg[64] = {0};
	modbus_t *ctx = RT_NULL;
	ctx = modbus_new_rtu("/dev/uart2", 9600, ‘N’, 8, 1);
	modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS232);
	//modbus_rtu_set_rts(ctx, RS485_RE, MODBUS_RTU_RTS_UP);
	modbus_set_slave(ctx, slaveaddrs);
	modbus_connect(ctx);
	modbus_set_response_timeout(ctx, 0, 200000); //50ms
	int num = 0;
	while (1)
	{
		memset(tab_reg, 0, 64 * 2);
		int regs = modbus_read_registers(ctx, 0, 20, tab_reg);
		if (regs == -1)
		{
			rt_kprintf(“error addrs %d—\n”, slaveaddrs);
			if(slaveaddrs == 2)
			{
				slaveaddrs = 3;
			}
			else {
				slaveaddrs = 2;
			}
			modbus_set_slave(ctx, slaveaddrs);
		}
		else {

       	 	rt_kprintf("-->addrs %d", slaveaddrs);
       		rt_kprintf("[%4d][read num = %d]", num, regs);
       	    num++;
       	    int i;
        	for (i = 0; i < 20; i++)
        	{
            	rt_kprintf("<%#x>", tab_reg[i]);
        	}
        	rt_kprintf("\n");
       	   if(slaveaddrs == 2)
       	   {
            	slaveaddrs = 3;
       	   }
       	   else {
                slaveaddrs = 2;
           }
		   modbus_set_slave(ctx, slaveaddrs);
    }
    rt_thread_mdelay(500);
}
//7-关闭modbus端口
modbus_close(ctx);

//8-释放modbus资源
modbus_free(ctx);
}

static void rtu77(int argc, char **argv)
{
	//rt_pin_mode(RS485_RE, PIN_MODE_OUTPUT);
	rt_thread_t tid;
	tid = rt_thread_create(“test”,
	test_thread, RT_NULL,
	2048,
	12, 10);
	if (tid != RT_NULL)
	rt_thread_startup(tid);
	return RT_EOK;
}

MSH_CMD_EXPORT(rtu77, a rtu test);

更多参考:本源码实现了在RT-Thread上的移植,支持MODBUS-RTU和MODBUS-TCP

五、Modbus RTU布线

Modbus RTU使用串行通信,通常使用RS-232或RS-485接口。

  • RS-232:这是一种点对点的通信方式,每个设备都需要单独的串行线连接到主控器。它使用9针或25针的D-sub连接器,但通常只用到其中的少数几个引脚,如TX(发送)、RX(接收)、GND(地线)。
  • RS-485:这是一种多点通信方式,允许多个设备共享同一对双绞线。RS-485使用一对双绞线(通常标记为A和B),并使用终端电阻来匹配线路。每个设备都有一个数据发送器(TX)和数据接收器(RX)引脚,以及一个公共地线(GND)。

六、Modbus RTU特点

以RS-485或RS-232作为其物理层实现。它使用总线式拓扑结构,允许多个设备共享同一通信线路,实现成本效益和简单的布线需求。Modbus RTU的数据传输采用二进制编码,每个数据帧包含地址码、功能码、数据和校验码,通过CRC校验确保数据的准确性。这种协议特别适合于短距离通信和成本敏感的应用场景。

七、总结

在这里插入图片描述

基于Model3C芯片的86彩屏中控面板通过集成Modbus RTU协议,实现了与多种控制设备的通信和数据交换。其高性能的通信接口和丰富的通信功能使得该中控面板在工业控制、智能建筑等领域具有广泛的应用前景。

Model系列芯片芯片基于RT-Thread进行开发,而RT-Thread可以通过集成第三方库来支持Modbus RTU,因此Model系列芯片完全可以支持Modbus RTU协议

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1860744.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一键登录功能实现(采用极光SDK)

前端流程 1. 引入极光认证 SDK&#xff1a; 通过 <script> 标签引入 &#xff0c;在 public/index.html 中确认 SDK 脚本已正确加载&#xff1a;参考官网Web SDK 概述 - 极光文档 <!-- 引入极光认证 SDK --> <script type"text/javascript" src&qu…

three.js - 置换贴图(displacementMap)、凹凸贴图(bumpMap)

这就是个灰度图 瞅瞅下面的贴图们&#xff0c;加深一下印象吧 说一下灰度图 在灰度图中&#xff0c; 黑色&#xff1a;代表最低的深度&#xff08;或最低的置换&#xff09; 白色&#xff1a;代表最高的深度&#xff08;或最高的置换&#xff09; 中间的灰度值&#xff0c;则…

java基于ssm+jsp 网络视频播放器

1前台首页功能模块 网络视频播放器&#xff0c;在系统首页可以查看首页、视频信息、系统公告、论坛信息、我的、跳转到后台、客服等内容&#xff0c;如图1所示。 图1前台首页功能界面图 用户登录&#xff0c;在登录页面可以填写账号、密码等信息进行登录&#xff0c;如图2所示…

Day4: 两两交换链表中的节点 24 删除链表的倒数第N个节点 19 链表相交 02.07 环形链表II 142

题目24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* …

Kivy tutorial 003: Building a full GUI

Kivy tutorial 003: Building a full GUI – Kivy Blog Central themes: Adding Widgets to one another 中心主题&#xff1a; 添加组件到另一个组件中 The tutorals so far have covered the very basics of a Kivy application; getting everything running, adding a Wid…

【linux】TCP交流状态变迁及一些函数调用

代码 登录 - Gitee.comhttps://gitee.com/r77683962/linux-6.9.0/commit/50bb00d844b9423c9bacf44d9b06604fab941686 https://gitee.com/r77683962/linux-6.9.0/raw/50bb00d844b9423c9bacf44d9b06604fab941686/dmesg_log/kern_tcp_with_state.log 从打印的日志&#xff0c;…

石油化工厂为什么要用专业防爆手机?

防爆手机之所以必须使用专业设计的产品&#xff0c;主要是出于安全考虑&#xff0c;以防止在易燃易爆环境中因手机使用不当引发爆炸事故。以下几点详细解释了使用专业化工防爆手机的必要性&#xff1a; 本质安全设计&#xff1a;顶坚专业防爆手机采用了本质安全&#xff08;本安…

线程版服务器实现(pthread_server)

用到的所有方法所需要的参数可以在wrap.c文件中查询&#xff0c;wrap中找不到的直接通过man手册查询 1.首先介绍一下我自己写的包裹文件&#xff0c;里面有各种在可能要用到的方法 wrap.c: #include <stdlib.h> #include <stdio.h> #include <unistd.h> #…

【IDEA】单项目多启动

IDEA 允许多次运行项目 一般来说一个项目仅允许启动一次&#xff0c;启动后它的启动按钮就会变成重启按钮&#xff0c;但是一些情况下我们可能需要启动多个客户端&#xff0c;可以用于模拟多个网络请求的发送等&#xff0c;多启动的开启方式如下&#xff1a; 2023.x 之后的版本…

常见网络攻击威胁分享

今天我来分享一下比较常见的网络攻击形式&#xff0c; ARP 欺骗攻击、CC 攻击和 DDoS 流量攻击是较为常见且危害巨大的攻击方式。 一、ARP欺骗攻击 ARP&#xff08;AddressResolutionProtocol&#xff0c;地址解析协议&#xff09;是用于将IP地址转换为MAC地址的协议。ARP欺骗…

web-原生Ajax

概念: Asynchronous JavaScript And XML&#xff0c;异步的JavaScript和XML。 作用: 数据交换:通过Ajax可以给服务器发送请求&#xff0c;并获取服务器响应的数据。 异步交互:可以在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部分网页的技术&#xff0c;如…

秋招突击——6/20——复习{(单调队列优化)——最大子序列和,背包问题——宠物小精灵收服问题}——新作{两两交换链表中的节点}

文章目录 引言复习单调队列优化——最大子序列和思路分析实现代码参考实现 背包问题——宠物小精灵的收服问题个人实现参考实现 新作两两交换链表中的节点个人实现参考实现 删除有序数组中的重复项个人实现知识补全迭代器的访问和控制vector删除特定的元素erasevector底层删除元…

私有化地图离线部署方案之查询定位服务

私有化地图离线部署整体解决方案&#xff0c;除硬件之外&#xff0c;一般主要由基础地图服务、查询定位服务、路径规划服务和高程检索服务构成。 其中&#xff0c;查询定位服务是指地理编码与逆地理编码服务。 在《私有化地图离线部署方案之基础地图服务》一文中&#xff0c;…

Python 挖坑式填充Excel模板内容(包括页眉/SheetName/logo)

纵览 Python处理Excel的方式--解压缩方式1、导包2、对模板文件进行解压缩3、对解压缩后文件层级进行介绍4、准备需要载入的数据5、模板挖坑6、运行替换代码7、压缩文件8、生成文件9、完成代码10、可能遇到的问题 结语 Python处理Excel的方式–解压缩方式 在处理Excel中过程中&…

Origin做聚类分析并利用聚类插件绘制热力图

1.聚类分析 1.1 K均值聚类 step1、首先进行归一化&#xff0c;具体步骤如图1-1所示&#xff1a; 图1-1 操作后得到归一化值如图1-2所示&#xff1a; 图1-2 step2、执行K均值聚类分析&#xff0c;如图1-3所示&#xff0c;选中聚类列&#xff0c;接着点击“统计”—“多变量分析…

Linux—LVM与磁盘配额

目录 一、LVM 1、LVM概念 2、LVM逻辑卷核心组件 3、LVM管理命令 二、LVM操作主要命令步骤 1、添加硬盘 2、新建分区&#xff0c;并修改分区类型 3、新建物理卷&#xff08;PV&#xff09; 4、新建卷组&#xff08;VG&#xff09; 5、新建逻辑卷&#xff08;LV&#xff0…

pgsql的套接字文件不存在

问题&#xff1a;psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory 解决方式&#xff1a; 检查 postgresql.conf 文件中的 unix_socket_directories 设置&#xff0c;确保它包含 /tmp 或者你期望的目录。 重…

网站安装HTTPS证书的重要性以及如何申请

在互联网时代&#xff0c;数据安全成为了企业和个人关注的焦点。HTTPS证书作为网站安全的重要保障&#xff0c;其重要性不言而喻。下面将探讨HTTPS证书的重要性&#xff0c;并介绍如何申请HTTPS证书&#xff0c;构建一个更安全、更信任的网络环境。 一、HTTPS证书的重要性 1.…

改网络ip地址有什么用

在数字化时代&#xff0c;网络IP地址是每个网络设备和终端在互联网上的唯一标识符。然而&#xff0c;有时出于安全、隐私或网络管理的需要&#xff0c;我们可能需要更改网络IP地址。例如很多小伙伴会选择使用虎观代理IP更改电脑或手机设备上的网络IP地址&#xff0c;那么&#…