java写s7和plc通讯

news2024/9/24 15:41:03

pom.xml

  <dependency>
            <groupId>com.github.s7connector</groupId>
            <artifactId>s7connector</artifactId>
            <version>2.1</version>
 </dependency>

maven下载不了的,下载包,评论或者私自内免费给
DB212 类:
String类型的我的占用25个字节,要看实际情况
在这里插入图片描述

package com.alnan.entity;


import com.github.s7connector.api.annotation.S7Variable;
import com.github.s7connector.impl.utils.S7Type;
import lombok.Data;

import java.io.Serializable;

@Data
public class DB212 implements Serializable {

    @S7Variable(type = S7Type.STRING,byteOffset = 32,bitOffset = 0, size = 25)
    public int PW_plateId;

    @S7Variable(type = S7Type.WORD,byteOffset = 88,bitOffset = 0)
    public int PW_plateLength;

    @S7Variable(type = S7Type.WORD,byteOffset = 92,bitOffset = 0)
    public int PW_plateWidth;

    @S7Variable(type = S7Type.WORD,byteOffset = 208,bitOffset = 0)
    public int PW_send;

    @S7Variable(type = S7Type.WORD,byteOffset = 212,bitOffset = 0)
    public int ACT_PW_1;

    @S7Variable(type = S7Type.WORD,byteOffset = 216,bitOffset = 0)
    public int ACT_PW_2;

    @S7Variable(type = S7Type.WORD,byteOffset = 260,bitOffset = 0)
    public int ACT_HY_UP_1;

    @S7Variable(type = S7Type.WORD,byteOffset = 264,bitOffset = 0)
    public int ACT_HY_DOWN_1;

    @S7Variable(type = S7Type.WORD,byteOffset = 276,bitOffset = 0)
    public int ACT_HY_UP_2;

    @S7Variable(type = S7Type.WORD,byteOffset = 280,bitOffset = 0)
    public int ACT_HY_DOWN_2;

    @S7Variable(type = S7Type.WORD,byteOffset = 292,bitOffset = 0)
    public int ACT_HY_UP_3;

    @S7Variable(type = S7Type.WORD,byteOffset = 296,bitOffset = 0)
    public int ACT_HY_DOWN_3;

    @S7Variable(type = S7Type.WORD,byteOffset = 308,bitOffset = 0)
    public int ACT_HY_UP_4;

    @S7Variable(type = S7Type.WORD,byteOffset = 312,bitOffset = 0)
    public int ACT_HY_DOWN_4;

    @S7Variable(type = S7Type.WORD,byteOffset = 324,bitOffset = 0)
    public int ACT_HY_UP_5;

    @S7Variable(type = S7Type.WORD,byteOffset = 328,bitOffset = 0)
    public int ACT_HY_DOWN_5;

    @S7Variable(type = S7Type.WORD,byteOffset = 340,bitOffset = 0)
    public int ACT_LC_UP_1;

    @S7Variable(type = S7Type.WORD,byteOffset = 344,bitOffset = 0)
    public int ACT_LC_DOWN_1;

    @S7Variable(type = S7Type.WORD,byteOffset = 356,bitOffset = 0)
    public int ACT_LC_UP_2;

    @S7Variable(type = S7Type.WORD,byteOffset = 360,bitOffset = 0)
    public int ACT_LC_DOWN_2;

}

应用:

 //一级发数据
            S7Connector s7Connector = S7ConnectorFactory.buildTCPConnector()
                    .withHost("192.168.100.10")//ip
                    .withPort(102)
                    .withTimeout(1000) //连接超时时间
                    .withRack(0)
                    .withSlot(1)
                    .build();


            s7Connector.write(DaveArea.DB, 212, 32, pzString(plateNo));//212是PLC地址,32是从第多少字节开始写入,
            s7Connector.write(DaveArea.DB,212,88, ByteBuffer.allocate(4).putInt(Integer.valueOf(length)).array());
            s7Connector.write(DaveArea.DB,212,92, ByteBuffer.allocate(4).putInt(Integer.valueOf(width)).array());
            s7Connector.write(DaveArea.DB,212,208, ByteBuffer.allocate(4).putInt(1).array());
            System.out.println(s7Serializer.dispense(DB212.class,212,0));
            s7Connector.close();



 public byte[] pzString(String out_string){
        //        写入字符串
        //第一个参数:DaveArea.DB 表示读取PLC的地址区域为DB
        //第二个参数:DB块地址,若plc中是DB1000,则填1000
        //第三个参数:偏移量
        //第四个参数:写入的数据 二进制数组byte[]  ,总长度为10的话,有效数据只能是10-8,第一位代表总长,第二位,代表有效数据字节
        int writeStrLength = 25;//地址块大小
        byte[] writeBytes = new byte[writeStrLength];
        writeBytes[0] = (byte) writeStrLength;//写入本字符串块总宽度
        out_string = out_string.trim();//清除掉两边的空串
        int availableEffectCharLength = 0;//有效字符数控制
        if (out_string.length() > writeStrLength - 2) {//>writeStrLength-2 截断到最大有效数据位
            availableEffectCharLength = writeStrLength - 2;

        } else {//<=writeStrLength-2
            availableEffectCharLength = out_string.length();
        }
        writeBytes[1] = (byte) availableEffectCharLength;//写入有效字节数
        byte[] strBytes = out_string.getBytes(StandardCharsets.US_ASCII);
        for (int i = 0; i < availableEffectCharLength; i++) {
            writeBytes[i + 2] = strBytes[i];
        }
      return writeBytes;
    }

基本上能用起来了
具体细节:

https://blog.csdn.net/qq_51383028/article/details/140549849

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

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

相关文章

AI老照片修复神器,Anole下载介绍

最近AI老照片修复上色&#xff0c;再一次火出圈&#xff0c;一些社交平台关于此话题内容流量满满&#xff0c;尤其是在小红书和抖音火的不得了&#xff0c;本期文章就来给大家分享下AI修复老照片的方式方法 本文主要介绍使用Anole修复老照片的方法&#xff0c;只需输入一张黑白…

响应式CSS 媒体查询——WEB开发系列39

CSS媒体查询&#xff08;Media Queries&#xff09;是响应式设计中的核心技术之一&#xff0c;帮助我们在不同设备上展示不同的样式。通过媒体查询&#xff0c;开发者可以检测用户设备的特性&#xff0c;如屏幕宽度、高度、分辨率、方向等&#xff0c;针对性地调整网页布局。 一…

「数组」十大排序:精讲与分析(C++)

概述 截止目前&#xff0c;我们已经讲解并分析了十种最常见的排序算法&#xff0c;下附对应文章链接和全体Code。 链接 「数组」冒泡排序|选择排序|插入排序 / 及优化方案&#xff08;C&#xff09; 「数组」归并排序 / if语句优化|小区间插入优化&#xff08;C&#xff09…

使用Jlink给AT32下载程序

点击下载之后选择target device&#xff0c;这里我使用的是AT32F403ACGT7&#xff0c;M4内核&#xff0c;就选择Cortex-M4. 如果已经选过了&#xff0c;但不知道选没选对&#xff0c;就把ini文件删除即可再次进行选择。 我这里使用SW接线方式&#xff0c;选好后立马识别出来了…

Java【集合】

一、集合的概述 集合建立在数组基础上&#xff0c;主要位于java.util包中&#xff0c;用来存储Java类对象&#xff0c;并且可以实现各种数据结构。 集合大小可以改变&#xff0c;可以存放不同数据类型数据。集合不能存放基本类型数据&#xff0c;只能存放引用数据类型数据。集…

浅谈树型结构——树

文章目录 一、什么是树&#xff1f;二、树的特点三、树的概念四、树的表示形式五、树的应用 一、什么是树&#xff1f; 树是一种 非线性 的数据结构&#xff0c;是树型结构。是一个由n个有限结点组成的一个具有层次关系的集合&#xff0c;这种集合因为看起来像一颗倒挂的树&am…

测试-Gatling 与性能测试

Gatling 与性能测试详解 一、什么是性能测试&#xff1f; 性能测试是一种软件测试类型&#xff0c;旨在评估系统在负载下的响应时间、吞吐量和资源利用率等性能指标。通过性能测试&#xff0c;开发者和运维团队能够识别出系统的瓶颈、优化系统性能&#xff0c;并确保其在实际…

鸿蒙之Hello Word 遇坑总结 mac系统 不能预览 提示 Only files in a module can be previewed 解决办法

顺时代&#xff0c; 应潮流 &#xff01;鸿蒙崛起不可阻挡&#xff0c; 鸿蒙开发大有可为&#xff0c; 万丈高楼平地起&#xff0c;学编程的第一步当然是Hello World起&#xff0c;请看 第一步是下载 编辑器&#xff0c;直接官网 文档中心下载对应的系统版本安装&#xff0c;…

用nginx-rtmp-win32-master及ffmpeg模拟rtmp视频流

效果 使用nginx-rtmp-win32-master搭建RTMP服务 双击exe就可以了。切记整个目录不能有中文 README.md ,启用后本地的RTM路径: rtmp://192.168.1.186/live/xxx ffmpeg将地本地视频推RMTP F:\rtsp\ffmpeg-7.0.2-essentials_build\bin>ffmpeg -re -i F:\rtsp\123.mp4 -c c…

Java设计模式—面向对象设计原则(六) ----->合成复用原则(CRP) (完整详解,附有代码+案例)

文章目录 3.6 合成复用原则(CRP)3.6.1 概述3.6.2 案列 3.6 合成复用原则(CRP) 合成复用原则(CRP)&#xff1a;Composite Reuse Principle&#xff0c;CRP 又叫&#xff1a; 组合/聚合复用原则&#xff08;Composition/Aggregate Reuse Principle&#xff0c;CARP&#xff09;…

FastAPI 应用安全加固:HTTPSRedirectMiddleware 中间件全解析

在当今的网络环境中&#xff0c;数据安全变得越来越重要。HTTPS 作为一种安全协议&#xff0c;它通过加密传输数据来保护用户信息免受窃取和篡改。在 FastAPI 应用中&#xff0c;确保所有的 HTTP 请求都通过 HTTPS 进行是至关重要的。 中间件在 FastAPI 中用于处理请求前后的…

探索 Electron:助力文档操作应用快速落地

Electron是一个开源的桌面应用程序开发框架&#xff0c;它允许开发者使用Web技术&#xff08;如 HTML、CSS 和 JavaScript&#xff09;构建跨平台的桌面应用程序&#xff0c;它的出现极大地简化了桌面应用程序的开发流程&#xff0c;让更多的开发者能够利用已有的 Web 开发技能…

智慧农业数据集(一)

目录 葡萄叶片病虫害害数据集 茄子果实病虫害数据集 81类水果数据集 小麦叶片病虫害数据集 番茄叶片病害数据集 草莓叶片病虫害数据集 水稻叶片病虫害数据集 菠萝成熟度数据集 10类水果数据集 葡萄叶片病虫害害数据集 数据集下载链接&#xff1a;葡萄叶片病虫害数据集…

几分钟学会搭建一个自己的外卖霸王餐系统

大家好&#xff0c;我是鲸天科技千千&#xff0c;大家都知道我是做小程序开发的&#xff0c;平时会给大家分享一些互联网相关的创业项目&#xff0c;感兴趣的可以跟我关注一下。 搭建一个首先就是要搭建一个自己的霸王餐小程序&#xff0c;我们自己的工作就是把这个小程序推广…

H5 CSS布局样式定位position

1. H5 H5 CSS布局样式定位position 布局是html中非常重要的一部分&#xff0c;而定位在页面布局中也是使用频率很高的方法&#xff0c;本章节为定位在布局中的使用技巧和注意事项。   position定位有4个属性&#xff0c;分别是static(默认&#xff09;&#xff0c;absolute&a…

6芯7芯可旋转电连接器航空插头

概述 可旋转电航空插头是一种能够在旋转或相对运动的部件间稳定传输电气信号或电源的装置&#xff0c;广泛应用于航空航天、自动化设备、医疗设备等多个领域。它的核心在于精密的接触系统&#xff0c;由旋转端和固定端两部分组成&#xff0c;通过金属触点或导电环实现电气连接。…

pyflink 安装和测试

FPY Warning! 安装 apache-Flink # pip install apache-Flink -i https://pypi.tuna.tsinghua.edu.cn/simple/ Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple/ Collecting apache-FlinkDownloading https://pypi.tuna.tsinghua.edu.cn/packages/7f/a3/ad502…

华为CNA VRM搭建(使用vmware worfstartion搭建)

创建虚拟机&#xff1a; 自定义→高级 选择硬件兼容性&#xff1a;默认安装版本&#xff0c;如果未来想要将此虚拟机安装到其他电脑&#xff0c;其他电脑版本过低&#xff0c;此时可以向下兼容&#xff0c;这里我们默认版本 稍后安装操作系统&#xff1a; CNA采用Euler OS系统…

合肥鲸天科技的外卖会员卡系统有人做过吗?赚钱吗?

我们先来了解一下这个合肥鲸天科技&#xff0c;通过我在网上找到的资料和企业查询&#xff0c;这家公司还是很有实力的&#xff0c;合肥鲸天科技有限公司也是欢迎有合作的人到公司来进行一个考察和合作其他一些项目的。 外卖会员卡简介绍&#xff1a; 这个外卖会员卡&#xf…

先框架后历元还是先历元后框架?

最近测绘同行高总发现了一个问题&#xff0c;《CH/T 2014-2016 大地测量控制点坐标转换技术规范》中”5.1.4.1 a) 不同ITRF间框架转换参数的历元归算“中历元不明确&#xff0c;不知是观测历元还是目标历元。他和一些同行用一些数据测试验证后认为观测历元更为贴合实际。 ​编…