依赖

用的是netty实现的,通过上位机的ip和端口采集欧姆龙PLC的数据,解析数据的话就不写了

 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.20.Final</version></dependency>

Fins协议配置FinsClientConfig


import com.global.common.hex.HexStringUtil;
import io.netty.bootstrap.Bootstrap;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;/*** Fins协议配置** @author Administrator* @since 1.0.0*/
public class FinsClientConfig {public static ChannelFuture channelFuture;public static void finsStart(String ip, int port) throws Exception {NioEventLoopGroup eventExecutors = new NioEventLoopGroup();try {//创建bootstrap对象,配置参数Bootstrap bootstrap = new Bootstrap();//设置线程组bootstrap.group(eventExecutors)//设置客户端的通道实现类型.channel(NioSocketChannel.class)//使用匿名内部类初始化通道.handler(new ChannelInitializer<SocketChannel>() {@Overrideprotected void initChannel(SocketChannel ch) throws Exception {//添加客户端通道的处理器ch.pipeline().addLast(new MyClientHandler());}});System.out.println("客户端准备就绪,随时可以起飞~");//连接服务端channelFuture = bootstrap.connect(ip, port).sync();//对通道关闭进行监听channelFuture.channel().closeFuture().sync();} finally {//关闭线程组eventExecutors.shutdownGracefully();}}/*** 发送数据** @param msg 数据*/public static void send(String msg) {channelFuture.channel().writeAndFlush(Unpooled.wrappedBuffer(HexStringUtil.hexToByteArray(msg)));}
}

Handler类MyClientHandler


import cn.hutool.core.util.HexUtil;
import com.global.common.hex.HexStringUtil;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;/*** 业务处理** @author Administrator* @since 1.0.0*/
public class MyClientHandler extends ChannelInboundHandlerAdapter {/*** 握手** @param ctx* @throws Exception*/@Overridepublic void channelActive(ChannelHandlerContext ctx) throws Exception {//握手ctx.writeAndFlush(Unpooled.wrappedBuffer(HexStringUtil.hexToByteArray("46494E530000000C00000000000000000000000D")));}/*** 消息处理** @param ctx* @param msg* @throws Exception*/@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {//接收服务端发送过来的消息ByteBuf byteBuf = (ByteBuf) msg;byte[] bytes = ByteBufUtil.getBytes(byteBuf);System.err.println(HexUtil.encodeHexStr(bytes));}
}

下面这个方法可以自己去写一个,比如hutool的HexUtil工具类里就有我这边自己写

     /*** 16进制字符串转化为byte数组** @param inHex 要转16进制字节流数组的16进制字符* @return 16进制字节流*/public static byte[] hexToByteArray(String inHex) {int hexlen = inHex.length();byte[] result;if (hexlen % 2 == 1) {// 奇数hexlen++;result = new byte[(hexlen / 2)];inHex = "0" + inHex;} else {// 偶数result = new byte[(hexlen / 2)];}int j = 0;for (int i = 0; i < hexlen; i += 2) {result[j] = hexToByte(inHex.substring(i, i + 2));j++;}return result;}

指令的说明介绍请看这个大佬的:https://www.cnblogs.com/resplendent/p/15219216.html

Java实现欧姆龙Fins协议(推荐用springboot)相关推荐

  1. 大学生的福音,学习 Java 最强书单推荐,附学习方法

    请肆无忌惮地点赞吧,微信搜索[沉默王二]关注这个在九朝古都洛阳苟且偷生的程序员. 本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题. 回想起 ...

  2. 学习 JAVA,有什么书籍推荐?学习的方法和过程是怎样的?

    学习 JAVA,有什么书籍推荐?学习的方法和过程是怎样的? 本文内容比较长,主要包含下面几部分内容: 学习路线以及方法推荐 书单推荐 教程推荐 推荐一个学习中常看的仓库 学习/编程好习惯 面试必知 学 ...

  3. Java并发编程的艺术(推荐指数:☆☆☆☆☆☆)

    文章目录 Java并发编程的艺术(推荐指数:☆☆☆☆☆☆) 并发编程的挑战 Java并发机制的底层实现原理 Volatile的应用 实现原理 synchronized的实现原理与应用 对象头 锁详解 ...

  4. java计算机毕业设计哈尔滨旅游项目推荐平台演示录像2020MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计哈尔滨旅游项目推荐平台演示录像2020MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计哈尔滨旅游项目推荐平台演示录像2020MyBatis+系统+LW文档+ ...

  5. Java编程哪些书值得推荐及计算机语言java中得List[图]

    一.Java编程哪些书值得推荐? 书籍是人类进步的阶梯,在互联网不算发达的十年前(特指09年之前),学编程是要靠各种编程相关的书滴,大部分时间都必须沉迷于图书馆才能学好.现如今不同了,在线教育满天飞的 ...

  6. 计算机毕业设计Java个人阅读习惯个性化推荐系统研究(源码+系统+mysql数据库+Lw文档)

    计算机毕业设计Java个人阅读习惯个性化推荐系统研究(源码+系统+mysql数据库+Lw文档) 计算机毕业设计Java个人阅读习惯个性化推荐系统研究(源码+系统+mysql数据库+Lw文档) 本源码技 ...

  7. Java中的Google协议缓冲区

    总览 协议缓冲区是一种用于结构化数据的开源编码机制. 它是由Google开发的,旨在实现语言/平台中立且可扩展. 在本文中,我的目的是介绍Java平台上下文中协议缓冲区的基本用法. Protobuff ...

  8. java android长连接_基于Java Socket的自定义协议,实现Android与服务器的长连接(一)...

    一.基础知识准备 在正式给大家介绍自定义协议之前,我们先对网络传输和协议解析的相关知识点做一个基本的介绍,尽管这些知识点我们在学校里学过,但难免会有所遗忘,这里先做一个简单的介绍,以便对后文的内容理解 ...

  9. Java中使用KCP协议

    Java中使用KCP协议_何小成的成长记录-CSDN博客_java kcp Java中使用KCP协议--性能测试及应用_何小成的成长记录-CSDN博客_kcp协议 传统游戏项目一般使用TCP协议进行通 ...

  10. Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据、人工智能、机器学习项目开发

    Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户.物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据.人工智能.机器学习项目开发Mus ...

最新文章

  1. ML一:python的KNN算法
  2. mysql备份 where_MySQL备份与还原
  3. vb用adodb链接mysql找不到_VB使用ADODB操作数据库的常用方法
  4. opencv运动目标跟踪预测_基于Opencv的运动目标的检测和跟踪.pdf
  5. JAVA day06 酒店管理系统
  6. 贪吃蛇系列之七——有吃的啦
  7. css 查看更多_Cirrus(原型制作CSS框架)下载-Cirrus(原型制作CSS框架)v0.6.0免费版下载...
  8. 浅谈跨平台框架 Flutter 的优势与结构 1
  9. 机器学习之overfiting
  10. apache+php环境配置
  11. SVM-求解最大间隔分离超平面
  12. 2014全国计算机等级考试四级数据库工程师考试大纲,全国计算机等级考试四级数据库工程师考试大纲...
  13. utc时间 单位换算_国际时间换算
  14. NYOJ 1132 promise me a medal (判断两线段是否相交)
  15. 回首向来萧瑟处 也无风雨也无晴
  16. 海康、大华IP摄像机RTSP地址及格式详解
  17. kafka(1) 初识
  18. 敏感词过滤优化的解决方案
  19. Python调用OpenAI API示例
  20. 智能手环数据研究1——系统响应时延简易评估

热门文章

  1. JavaScript的优势和劣势
  2. 1.2软件测试的定义和分类
  3. XPS是什么格式?如何免费转换为word?
  4. Unity射线检测实例
  5. 计算机毕业设计JAVA图书个性化推荐系统mybatis
  6. Half-space Hyperplane
  7. Chrome 插件收集
  8. C++ 语言学习入门--类
  9. PPT里快速插入上下角标
  10. python拉格朗日插值_拉格朗日插值多项式在Python中的实现