springboot 通过博途获取plc点位的数据代码实现

 更新时间:2023年08月18日 11:48:29   作者:小果子^_^  
这篇文章主要介绍了springboot 通过博途获取plc点位的数据的代码实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

springboot 通过博途获取plc点位的数据

1.maven依赖

<dependency>
    <groupId>com.github.dathlin</groupId>
    <artifactId>HslCommunication</artifactId>
    <version>3.6.0</version>
</dependency>

这个版本尽量是新版本,不然有的返回的值对应的类型不存在

2.代码实现

public void sendHttpRequest() {
     System.out.println("==================================执行命令==================================" + System.currentTimeMillis());
     List<SysPlcIpEntity> ipList = plcIpDao.getIpList();
     if (ipList != null && ipList.size() > 0) {
         for (SysPlcIpEntity plcIp:ipList) {
             SiemensS7Net siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, plcIp.getIpAddress());
             siemensS7Net.SetPersistentConnection( );
             // 根据ip查询对应的命令
             List<SysPlcMlEntity> plcMlList = plcMlDao.getListByIpId(plcIp.getId());
             if (plcMlList != null && plcMlList.size() > 0) {
                 for (int i = 0; i < plcMlList.size(); i++) {
                     if (plcMlList.get(i).getMlContent().contains("DBW")) {
                         OperateResultExOne<Short> dbwVal = siemensS7Net.ReadInt16(plcMlList.get(i).getMlContent());
                         if (dbwVal.IsSuccess){
                             plcMlList.get(i).setMlValue(String.valueOf(dbwVal.Content));
                         }
                     } else if (plcMlList.get(i).getMlContent().contains("DBD")){
                         OperateResultExOne<Float> dbdVal = siemensS7Net.ReadFloat(plcMlList.get(i).getMlContent());
                         if (dbdVal.IsSuccess) {
                             plcMlList.get(i).setMlValue(String.valueOf(dbdVal.Content));
                         }
                     } else if (plcMlList.get(i).getMlContent().contains("DBX")) {
                         OperateResultExOne<Boolean> dbxVal = siemensS7Net.ReadBool(plcMlList.get(i).getMlContent());
                         if (dbxVal.IsSuccess) {
                             plcMlList.get(i).setMlValue(String.valueOf(dbxVal.Content));
                         }
                     }
                 }
                 plcMlDao.batchUpdateMlList(plcMlList);
             }
         }
     }
     System.out.println("==================================结束命令==================================" + System.currentTimeMillis());
    }

因为需求,DBW是整型,DBD是浮点数,DBX是布尔值DBW/D/X后面对应的是偏移量,

3. 测试方法

public static void main(String[] args) {
  // DB5.DBX8.5
  SiemensS7Net siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, "192.168.1.105");
  siemensS7Net.SetPersistentConnection( );
  //DBD
  OperateResultExOne<float[]> read = siemensS7Net.ReadFloat( "DB3.DBD10", (short) 4);
  if (read.IsSuccess) {
      for (float f: read.Content) {
          System.out.println("dbd:" + f);
      }
  }
  //DBW
  Short content = siemensS7Net.ReadInt16("DB3.DBW0").Content;
  System.out.println("content" + content);
  OperateResultExOne<Short> long_array = siemensS7Net.ReadInt16("DB3.DBW0");
  if (long_array.IsSuccess){
      System.out.println("dbw:" + long_array.Content);
  }
  // DBX
 /* OperateResultExOne<boolean[]> operateResultExOne = siemensS7Net.ReadBool("DB5.0.1", (short) 4);
  if (operateResultExOne.IsSuccess) {
      for (Boolean boo:operateResultExOne.Content) {
          System.out.println("------------"+boo);
      }
  } else {
      System.out.println("错误信息:"+operateResultExOne.ErrorCode + "=====" + operateResultExOne.Message);
  }*/
}

(short)对应的值是获取几位,因为需求,没办法一起获取,所以我是单个获取的

在这里插入图片描述

到此这篇关于springboot 通过博途获取plc点位的数据的文章就介绍到这了,更多相关springboot 获取plc点位数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JAVA编程实现随机生成指定长度的密码功能【大小写和数字组合】

    JAVA编程实现随机生成指定长度的密码功能【大小写和数字组合】

    这篇文章主要介绍了JAVA编程实现随机生成指定长度的密码功能,可生成带有大小写和数字组合的随机字符串,需要的朋友可以参考下
    2017-07-07
  • Java synchronized与死锁深入探究

    Java synchronized与死锁深入探究

    这篇文章主要介绍了Java synchronized与死锁,Java中提供了synchronized关键字,将可能引发安全问题的代码包裹在synchronized代码块中,表示这些代码需要进行线程同步
    2023-01-01
  • 如何把Spring Cloud Data Flow部署在Kubernetes上

    如何把Spring Cloud Data Flow部署在Kubernetes上

    这篇文章主要介绍了把Spring Cloud Data Flow部署在Kubernetes上,再跑个任务试试,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java 添加、替换、删除PDF中的图片的示例代码

    Java 添加、替换、删除PDF中的图片的示例代码

    这篇文章主要介绍了Java 添加、替换、删除PDF中的图片,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • SpringBoot中使用Redis Stream实现消息监听示例

    SpringBoot中使用Redis Stream实现消息监听示例

    本文主要介绍了SpringBoot中使用Redis Stream实现消息监听示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Java中的可重入锁ReentrantLock简析

    Java中的可重入锁ReentrantLock简析

    这篇文章主要介绍了Java中的可重入锁ReentrantLock简析,可重入是指同一个线程如果首次获得了这把锁,那么因为它是这把锁的拥有者,因此有权利再次获取这把锁如果是不可重入锁,那么第二次获得锁时,自己也会被锁挡住,需要的朋友可以参考下
    2023-12-12
  • Java必会的Synchronized底层原理剖析

    Java必会的Synchronized底层原理剖析

    synchronized作为Java程序员最常用同步工具,很多人却对它的用法和实现原理一知半解,以至于还有不少人认为synchronized是重量级锁,性能较差,尽量少用。但不可否认的是synchronized依然是并发首选工具,本文就来详细讲讲
    2022-10-10
  • 如何解决Field name doesn‘t have a default value报错问题

    如何解决Field name doesn‘t have a defau

    这篇文章主要介绍了如何解决Field name doesn‘t have a default value报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Java链表中添加元素的原理与实现方法详解

    Java链表中添加元素的原理与实现方法详解

    这篇文章主要介绍了Java链表中添加元素的原理与实现方法,结合实例形式详细分析了Java实现链表中添加元素的相关原理、操作技巧与注意事项,需要的朋友可以参考下
    2020-03-03
  • 解决Spring Boot应用打包后文件访问问题

    解决Spring Boot应用打包后文件访问问题

    在Spring Boot项目的开发过程中,一个常见的挑战是如何有效地访问和操作资源文件,本文就来介绍一下解决Spring Boot应用打包后文件访问问题,感兴趣的可以了解一下
    2024-01-01

最新评论