首页 文章 精选 留言 我的

精选列表

搜索[本地知识库],共10000篇文章
优秀的个人博客,低调大师

SBC‑TLT153 实现 Modbus‑RTU 温湿度采集:数据 CSV 本地存储方案

**前 言** 本文档主要介绍基于单板机/工控机的Modbus协议开发案例。 备注:本文适用于SBC TLT153单板机及EPC TLT153工控机系列(由SBC TLT153单板机搭配扩展板与外壳组成),文中所有演示均基于512MByte NAND FLASH + 512MByte DDR3硬件配置的工控机开展。 **开发环境** Windows开发环境:Windows10 64bit Linux开发环境:VMware16.2.5、Ubuntu22.04.4 64bit sysroot:t153-Tronlong-Desktop-22.04-sysroot-[版本号]-emmc.tar.gz、t153-Tronlong-Desktop-22.04-sysroot-[版本号]-nand.tar.gz 系统版本:Tronlong-Desktop 22.04(类Ubuntu)、Linux-5.10.198、U-Boot 2023.04-rc4 应用开发交叉编译工具:arm-linux-gnueabihf-gcc(版本为11.4.0) **术语表** 为便于阅读,下表对文档出现的关键术语进行解释;对于广泛认同释义的术语,在此不做注释。 ![](https://developer.qcloudimg.com/http-save/8546319/3dcb37bba2f6375e7f0004fe25ff20eb.png) **注意事项** (1)请先参考《应用开发手册》完成应用开发环境搭建。 (2)无特殊说明,默认从NAND FLASH启动系统,使用DEBUG接口作为调试串口,通过路由器与PC机进行网络连接,请确保PC机、单板机系统可正常访问互联网。 ## **1 modbus_humiture_capture_save案例** ### **1.1 案例说明** 本案例演示基于Modbus RTU协议的温湿度数据采集,并在串口终端打印温湿度数据,同时支持将数据保存至CSV文件。程序的运行流程如下: ![](https://developer.qcloudimg.com/http-save/8546319/f80d084cb8b413579c52c3246fbf96b2.png) 案例相关资料位于产品资料“4-软件资料\Demo\platform-demos\modbus_humiture_capture_save\”目录下。案例bin目录存放可执行文件,src目录存放源码。 ### **1.2案例测试** 本次操作基于EPC-TLT153-BU工控机、温湿度变送器(厂家:中盛科技,型号:ZS-SHT30-1T-1H-5-36V-RS485)进行演示。 请使用杜邦线将温湿度变送器RS-485接口的A、B端子分别连接至RS-485串口的A1、B1端子,硬件连接如下图所示。 备注:如需使用其他RS-485接口进行测试,硬件连接方法类似。 ![](https://developer.qcloudimg.com/http-save/8546319/feefbf6b7ae8f6d7366e2a300f65f305.jpg) 请将本案例bin目录下的可执行程序modbus_humiture_capture_save拷贝至文件系统,并在可执行程序所在目录下,执行如下命令运行程序,查看程序参数说明。 Target# ./modbus_humiture_capture_save -h ![](https://developer.qcloudimg.com/http-save/8546319/b64843002fdffa36e2faf511892c3f86.png) **参数解析:** :表示RS485对应的串口。 -b:设置波特率(默认为9600) -s:设置从站ID(默认为1)。 -h:查看帮助信息。 执行如下命令,采集温湿度变送器的数据。 备注:本次操作RS-485串口的设备节点为"/dev/ttyAS7"。若使用其他RS-485串口,请参考《EPC-TLT153工控机使用说明书》修改为对应的设备节点。 Target# ./modbus_humiture_capture_save /dev/ttyAS7 -b 9600 -s 1 ![](https://developer.qcloudimg.com/http-save/8546319/a7cdbfa5d6b86799909dfa5d59ff3864.png) 由以上打印信息可知,当前环境温度为26.5°C,湿度为69.7%。同时,可观察到该温湿度信息每秒刷新一次。 按下"Ctrl + C"即可停止程序运行,并且生成.csv文件。 ![](https://developer.qcloudimg.com/http-save/8546319/24c466a1a35db771749bcd2478b66b4f.png) 执行如下命令,查看.csv文件,可以看到程序每秒获取到的温湿度数据。 Target# cat data.csv ![](https://developer.qcloudimg.com/http-save/8546319/2e0f63669cf0b49e9e70db5cccb40bf9.png) ![](https://developer.qcloudimg.com/http-save/8546319/ea54ec7c81671cf218a9ede2138e34ed.png) 将.csv文件拷贝至PC机,可通过Excel表格查看获取温湿度数据。 ![](https://developer.qcloudimg.com/http-save/8546319/dec0ec979bb5beaf664f9fd6cf28742f.png) ### **1.3案例编译** 请将产品资料“4-软件资料\Demo\platform-demos\modbus_humiture_capture_save\src\”目录下的案例源码拷贝至Ubuntu工作目录。进入案例源码目录,执行如下命令,配置交叉编译工具链,并执行make命令进行案例编译。编译完成后,将在当前目录下生成可执行文件。 Host# source /home/tronlong/T153/environment Host# make ![](https://developer.qcloudimg.com/http-save/8546319/d9cf6c1c25979efc29f150819fda5344.png) ### **1.4关键代码** (1)初始化CSV文件。 ![](https://developer.qcloudimg.com/http-save/8546319/8c78e56707496aaf186a3d47a9a4ad1a.png) (2)初始化Modbus,创建Modbus RTU通信对象,保存串口和通信参数。 ![](https://developer.qcloudimg.com/http-save/8546319/d8ba82b3f7496fc32bb5f3bfad772b9b.png) (3)读取存放在温湿度变送器的寄存器的温湿度数据信息。 ![](https://developer.qcloudimg.com/http-save/8546319/fdcb02aa9355aa2a30acd4c04d249509.png) (4)解析温湿度信息。 ![](https://developer.qcloudimg.com/http-save/8546319/83ecdddeec4af4175cbf13b738697166.png)

优秀的个人博客,低调大师

VLC Media Player 不只能播放:一条命令把本地视频变成网络流

大多数人用 VLC Media Player 只做一件事:打开视频文件看。 但它还有个能力很少被用到——把视频推到网络上,当成流媒体源。 一条命令就能做到: ``` cvlc video.mp4 --sout '#standard{access=http,mux=ts,dst=:8080}' ``` 执行完,局域网里任何设备打开播放器、输入服务器地址加端口,就能看这个视频。 为什么一个播放器能干这个? 得从它的内部结构说起。 ## VLC 内部是一条管道 VLC 不是"一个程序做所有事",而是由很多小模块拼起来的。 播放一个视频,数据要经过这么几道: - Access:读取原始数据——从文件、网络、采集设备 - Demux:解封装——把容器格式拆成独立的音视频轨 - Decode:解码——把压缩数据还原成画面和声音 - Output:输出到屏幕和扬声器 关键在于:每一道都是可替换的模块。 读文件用一个 Access 模块,读网络流用另一个;解 MP4 和拆 TS 用不同的 Demux 模块。 这条管道是通的,所以数据可以在任意一环被"岔出去"。 播放的路径是解完码直接送显示。而如果把数据在中间转个方向——比如解封装之后不走解码,直接封装成另一种容器发出去——那就是串流。 VLC 能做流媒体服务器,是因为它本来就是按管道设计的,串流只是把管道的出口换了个地方。 ## --sout 在配置什么 前面那条命令里的 --sout,就是 VLC Media Player 里"流输出"(Stream Output)的开关。 它的语法是链式的,用冒号分隔多个模块: ``` --sout '#模块1{参数}:#模块2{参数}:...' ``` 数据会依次经过这些模块。 常见的组合是两段: - transcode{...}:调整编码、码率、分辨率 - standard{...}:指定传输方式、封装格式、端口 前面那条命令没有 transcode 段——因为原文件不用改,直接发就行。 ## 一个必须搞清的区别:转码 vs 不转码 这是 VLC 串流里最容易踩的坑。 转码(transcode)和不转码(copy),差别很大。 ### 转码:解开再重编 ``` cvlc video.mp4 --sout '#transcode{vcodec=h264,vb=800,acodec=mp3,ab=128}:standard{access=http,mux=ts,dst=:8080}' ``` 流程是:把原始视频解码成每一帧画面,再用新的参数重新编码。 为什么要这么做? 当目标设备只支持特定格式、或者网络带宽不够需要压码率时,必须重编。 代价是 CPU 占用很高。 视频编码本身就是重度计算——即使是硬件加速,资源消耗也远高于单纯读文件。 ### 不转码:只换容器 ``` cvlc video.mp4 --sout '#transcode{vcodec=copy,acodec=copy}:standard{access=http,mux=ts,dst=:8080}' ``` 注意这里的参数是 copy。 它的意思是:音视频数据不碰,原样搬运。 只做一件事——把原来的容器换成目标容器。比如 MP4 装进 TS 里发出去。 CPU 占用极低,因为不需要解码和编码,只是数据搬运。而且画质完全无损——数据一个字节都没改。 ### 怎么选 - 换容器格式(用哪种:copy;CPU:极低) - 保持原画质(用哪种:copy;CPU:极低) - 改码率适配带宽(用哪种:transcode;CPU:高) - 改分辨率(用哪种:transcode;CPU:高) - 换编码格式(用哪种:transcode;CPU:高) 如果源文件的格式已经能用,永远优先 copy。 很多人在推流时发现电脑风扇狂转、画面掉帧,原因就是无谓地开了转码。 判断方法很简单:你的目标设备能不能放原格式? 能放,就用 copy。 ## 换个传输方式 前面的例子都用 HTTP。VLC 也支持其他协议。 推到指定地址(RTP 方式): ``` cvlc video.mp4 --sout '#transcode{vcodec=h264,vb=800,acodec=none}:rtp{dst=192.168.1.100,port=5004,mux=ts}' ``` 参数含义: - dst:接收端 IP - port:端口 - mux:封装格式 - acodec=none:不要音频 RTP 常用于低延迟场景——数据直接推给指定接收方,不像 HTTP 那样需要对方来"请求"。 注意 acodec=none:如果不传音频,显式写 none 比留空更清晰。 ## 摄像头也能推 Access 模块不只是读文件。它也能读采集设备。 ``` cvlc v4l2:///dev/video0 --sout '#transcode{vcodec=h264,vb=800}:rtp{dst=192.168.1.100,port=5004,mux=ts}' ``` v4l2 是 Linux 的视频采集接口,/dev/video0 是第一个摄像头。 所以 VLC 可以当简易的监控推流工具——把摄像头画面实时发到网络上,不需要额外软件。 ## 串流没成功怎么排查 第一件事:看日志。 VLC 的详细日志靠 -vvv 参数打开: ``` cvlc -vvv video.mp4 --sout '...' ``` -vvv 是三级详细度——参数越多越啰嗦,但也越能看清问题出在哪一步。 常见的排查方向: 防火墙。 局域网其他设备连不上,先确认端口有没有放行。这是最常见的原因。 用 cvlc 而不是 vlc。 带界面的版本不适合跑在服务器上,cvlc 是纯命令行版本,不启动 GUI。 根用户限制。 某些 Linux 发行版不允许 root 直接跑,换个普通用户。 ## 一个实用技巧:从界面反推命令 GUI 里调好的参数,怎么变成命令行? VLC 提供了办法: 1. 打开 工具 → 消息 1. 把详细级别设为 2 1. 在界面上走一遍串流配置 1. 在日志里搜 stream_out 或 sout 你会看到完整的命令行参数——直接复制出来就能用。 这个方法省去了查文档的功夫:配置界面上一项项选,比记参数名快得多;调通之后从日志里把参数抄出来,下次直接用命令跑。 ## 一句总结 VLC Media Player 能当流媒体服务器,不是因为功能多,是因为架构是管道式的。 播放、串流、转码——在它眼里是同一套流程,只是数据的出口不同。 理解了这一点,--sout 那串看着复杂的参数就不难读了:无非是告诉它,数据在这条管道的哪一环、以什么形式、往哪里送。 安装包: https://dubapkg.cmcmcdn.com/cs/257def/VLC%20Media%20Player.exe

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册