多久回头i 2023-03-24 11:40 采纳率: 75%
浏览 41
已结题

java 如何发送接收Omron Fins协议

java 如何发送接收Omron Fins协议
目前GITHUB 我找到了发送FIns协议 但是我如果用传统的Socket接收 解析有误

  • 写回答

2条回答 默认 最新

  • 关注

    Omron FINS协议是一种基于TCP/IP的协议,它用于与Omron PLC进行通信。在Java中,可以使用Java Socket API来实现与Omron PLC的通信。
    发送FINS协议可以通过以下代码实现:

    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.Socket;
    public class SendFins {
        public static void main(String[] args) throws IOException {
            // 连接PLC
            Socket socket = new Socket("10.10.10.10", 9600);
            OutputStream outputStream = socket.getOutputStream();
            // FINS头
            byte[] finsHeader = new byte[] { (byte) 0x80, 0x00, 0x02, 0x00, 0x00, 0x0C };
            // FINS命令
            byte[] finsCommand = new byte[] { 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00 };
            // 发送FINS命令
            outputStream.write(finsHeader);
            outputStream.write(finsCommand);
            // 关闭连接
            outputStream.close();
            socket.close();
        }
    }
    
    
    

    其中,需要将10.10.10.10替换为实际的PLC的IP地址,9600替换为实际的端口号。
    接收FINS协议需要对接收到的字节数组进行解析,可以使用Omron的FINS协议库来实现。以下是一个使用Omron的FINS协议库来接收FINS协议的示例代码:

    import omron.fins.*; // 导入Omron的FINS协议库
    import java.net.ServerSocket;
    import java.net.Socket;
    public class ReceiveFins {
        public static void main(String[] args) throws Exception {
            // 创建Socket服务端
            ServerSocket serverSocket = new ServerSocket(9600);
            Socket socket = serverSocket.accept();
            // 创建FINS协议对象
            Fins fins = new Fins();
            // 读取FINS头
            byte[] finsHeader = new byte[8];
            socket.getInputStream().read(finsHeader);
            // 解析FINS头
            FinsHeader header = fins.parseFinsHeader(finsHeader);
            // 读取FINS命令
            byte[] finsCommand = new byte[header.getLength()];
            socket.getInputStream().read(finsCommand);
            // 解析FINS命令
            FinsIoMemoryAreaReadResponse response = (FinsIoMemoryAreaReadResponse) fins.parseCommand(finsCommand);
            // 输出读取到的数据
            System.out.println(response.getData()[0]);
            // 关闭连接
            socket.close();
            serverSocket.close();
        }
    }
    
    

    在运行接收FINS协议的代码之前,需要先运行发送FINS协议的代码,以向PLC发送数据。在运行接收FINS协议的代码时,需要将9600替换为实际的端口号。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 已采纳回答 3月30日
  • 创建了问题 3月24日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度