一天领导拿了几个传感器设备丢给我,给我把这些数据取到。
我一看,好家伙。这是要搞硬件了啊。那就搞他丫的。
可是,怎么搞是个问题。我是一头雾水。
还好,和传感器丢给我的,还有传感器厂家一起给的一些相关的资料(传感器的接线说明,调试软件,和java写的demo)
曾以为有文档和demo在手,就是让我上天,我也给走上一遭。可哪想到,即便是能上了天,
所遇到的问题,也能把磨到,上天的只剩下灵魂。
由于什么都不懂,真是困难重重。线,接起来不对。代码运行不进来。我想哭,怎么办?
于是我把着厂家技术支持这根稻草不放了。一个劲的问人家,都把人家问得烦了。线虽然接对了,可是代码还是运行起来。我再问,这下可好,人家是真烦了,被随便应付了。
可是,我知道了,要把这个传感的数据取到。需要用到485串口通信。于是我网上搜485串口通信。找到一份代码,而且能用。这可把我牛逼坏了,嘿嘿,果然没有什么是能难到程序员的。算是能成功取到了数据。
这里贴出这个程序的博客的地址。后面我也把我整理了一下的代码附上。
https://www.cnblogs.com/new-life/p/9345849.html
后来,我才知道这篇博客是写了一个相当于master程序,只能从传感器上获取到数据。
后来由于这个程序没有处理线程和粘包的问题,不太能满足需求,所以又需要改。
这时,已经知道了rtxxComm就是直接对串口进行操作的(读写数据),在上面的程序就是基于这个来写的。而rxtxComm中读写数据也是基于流来的。所以想到了结合netty,来写一个master。一下给出在代码没有处理粘包(写一个Decoder,在其中处理好一个完整的包,再传到handler就是了)
master.java
public class Mater{ private String portName;//串口名 private int baudrate;//波特率 RxtxChannel channel; List<String> data;//将设备返回的数据,解析后存于改list public Mater(String portName, int baudrate,List<String> data) { this.data=data; this.portName = portName; this.baudrate = baudrate; } public void run(){ try { OioEventLoopGroup group = new OioEventLoopGroup(); Bootstrap b = new Bootstrap(); b.group(group) .channelFactory(new ChannelFactory<RxtxChannel>() { public RxtxChannel newChannel() { return channel; } }) .handler(new ChannelInitializer<RxtxChannel>() { @Override public void initChannel(RxtxChannel ch) throws Exception { ch.pipeline().addLast( new RxtxHandler() ); } }); channel = new RxtxChannel(); channel.config().setBaudrate(baudrate); channel.config().setDatabits(RxtxChannelConfig.Databits.DATABITS_8); channel.config().setParitybit(RxtxChannelConfig.Paritybit.EVEN); channel.config().setStopbits(RxtxChannelConfig.Stopbits.STOPBITS_1); ChannelFuture future = b.connect(new RxtxDeviceAddress(portName)).sync(); System.out.println("rxtx启动成功"); } catch (InterruptedException e) { e.printStackTrace(); } } public void writeAndFlush(String hexString) { String s = CRC16Util.crcDeal(hexString); System.out.println("手动发送数据:"+s); byte[] bytes = ByteUtil.hexStringToBytes(s); ByteBuf buffer = channel.alloc().buffer(); ByteBuf byteBuf = buffer.writeBytes(bytes); channel.writeAndFlush(byteBuf); } public void inputCmd(){ Scanner sc=new Scanner(System.in); while (true){ String s = sc.nextLine(); writeAndFlush(s); } } //不断请求传感器数据 public void request() throws InterruptedException { String [] cmds = new String[]{"030300000002","020300020001","040300030001"}; for (int i = 0; i < cmds.length; i++) { Thread.sleep(500); writeAndFlush(cmds[i]); } } //程序入口 public static void main(String[] args) { Master master =new Master("COM3",9600,new ArrayList()); master.run(); master.request(); } }
RxtxHandler.java
public class RxtxHandler extends ChannelInboundHandlerAdapter { /** * 客户端接收到数据的回调 */ @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception{ byte[] read =new byte[in.readableBytes()]; in.readBytes(read); //将byte数据转成16进制的数据报文 //String packet = ByteUtil.BinaryToHexString(read).toUpperCase(); //可以对数据进行处理 //System.out.println(packet); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { cause.printStackTrace(); ctx.close(); } }
原网址: 访问
创建于: 2023-09-14 18:07:37
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论