本项目使用modbus4j-3.0.3.jar实现于PLC通讯。
实现与PLC连接并完成读写基本数据类型通讯测试不再赘述,本人参考了云逸的博客https://www.cnblogs.com/ioufev/p/10831289.html
直接进入主题,读写字符串
写入字符串
/**
     * 测试程序
     *
     * @param slaveId
     * @param offset
     * @param dataType
     * @param value
     * @return
     * @throws ModbusTransportException
     * @throws ErrorResponseException
     * @throws ModbusInitException
     */
    public static boolean writeStrToPlc(int slaveId, int startOffset, String value) throws ModbusTransportException, ErrorResponseException, ModbusInitException {
        // 获取master
        ModbusMaster tcpMaster = getMaster();
        short[] sdata = SetString(value);
        // 创建请求对象
        WriteRegistersRequest request = new WriteRegistersRequest(slaveId, startOffset, sdata);
        // 发送请求并获取响应对象
        ModbusResponse response = tcpMaster.send(request);
        if (response.isException()) {
//            log.error(response.getExceptionMessage());
            return false;
        } else {
            return true;
        }
    }
工具类方法 setString()主要进行了一下数据类型转换
public static short[] SetString(String value) {
        byte[] bytesTemp = value.getBytes(StandardCharsets.UTF_8);
        byte[] bytes;
        if (bytesTemp.length % 2 > 0) {
            bytes = Arrays.copyOf(bytesTemp, bytesTemp.length + 1);
        } else {
            bytes = bytesTemp;
        }
        return bytesToShort(bytes);
    }

/**
     * Byte数组转short数组
     *
     * @param bytes
     * @return
     */
    public static short[] bytesToShort(byte[] bytes) {
        if (bytes == null) {
            return null;
        }
        short[] shorts = new short[bytes.length / 2];
        ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().get(shorts);
        return shorts;

}

读取字符串
/**
     *
     * @param slaveId
     * @param offset
     * @param dataType
     * @return
     * @throws ModbusTransportException
     * @throws ErrorResponseException
     * @throws ModbusInitException
     */
    public static String readHoldingRegisters(int slaveId, int offset, int dataType, int num)
            throws ModbusTransportException, ErrorResponseException, ModbusInitException {
        // 03 Holding Register类型数据读取
        short[] data = new short[num];
        for (int i = 0; i < num; i++) {
            data[i] = readHoldingRegister(slaveId, offset + i, dataType).shortValue();
        }
        try {
            return GetString(data, 0, num);
        } catch (UnsupportedEncodingException ex) {
            Logger.getLogger(Modbus4jReadUtils.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

工具类方法getString()  类型转换
        /**
         * 
         * @param src
         * @param start
         * @param len
         * @return 
         */
        public static String GetString(short[] src, int start, int len) throws UnsupportedEncodingException
        {
            short[] temp = new short[len];
            for (int i = 0; i < len; i++)
            {
                temp[i] = src[i + start];
            }
            byte[] bytesTemp = shorts2Bytes(temp);
            for (int i = 0; i < bytesTemp.length; i++) {
                byte b = bytesTemp[i];
            }
            String str = new String(bytesTemp, "UTF-8");
            return str;
        }
        /**
         * 
         * @param data
         * @return 
         */
        public static byte [] shorts2Bytes(short [] data){
            byte[] byteValue = new byte[data.length * 2];
            for (int i = 0; i < data.length; i++) {
                byteValue[i * 2] = (byte) (data[i] & 0xff);
                byteValue[i * 2 + 1] = (byte) ((data[i] & 0xff00) >> 8);
            }
            return byteValue;
        }
PLC本身并不直接支持字符串类型数据。这里只能将字符串进行转换后进行存储,读的时候也是一样,通过读入一段连续的寄存器地址数据,再转成字符串

通过modbus4j读写字符串到PLC相关推荐

  1. 串口调试助手读写三菱fx3u数据_C#读写三菱Fx PLC 使用Fx 串口协议 读写Fx3U设备

    本文将使用一个Github开源的组件库技术来读写三菱 FX PLC,使用的是基于串口的实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 github地 ...

  2. Objective-C 【从文件中读写字符串(直接读写/通过NSURL读写)】

    ------------------------------------------- 从文件中读写字符串(直接读写/通过NSURL读写) #import <Foundation/Foundat ...

  3. [Java] 读写字符串数据

    package test.stream;import java.io.FileInputStream; import java.io.FileNotFoundException; import jav ...

  4. C#使用Modbus协议读写汇川PLC的M区寄存器(基本接口封装)

    C#使用Modbus-TCP协议读取汇川PLC,Modbus读写是按照MW地址来处理的 [寄存器单位是字WORD,占用两个字节,类似于C#中的ushort(UInt16)],实际测试发现字符串是按照字 ...

  5. C#使用Modbus协议读写汇川PLC的M区寄存器(测试示例),接上篇

    对汇川PLC采用Modbus-TCP进行读写寄存器测试示例 新建WinForms应用程序InovancePlcDemo,.net framework 4.5. 重命名窗体名为FormInovanceP ...

  6. C++文件读写——字符串分割

    文章目录 字符串分割 字符串分割 void String_Split(string s, string delim, vector<string> &ans) {string::s ...

  7. 本地电脑远程至工控现场一台普通PC上(没安装博途软件),实现读写与监控PLC程序

    一.前言 (1)对于电气工程师来说,在现场PC上没有安装博图软件时,或者博图版本不匹配时:如何能快速的使用笔记本远程现场PC实现监控修改并下载PLC程序是重要问题 (2)常见的是有几种做法:一是提前购 ...

  8. python三菱_python 读写三菱PLC数据,使用以太网读写Q系列,L系列,Fx系列的PLC数据...

    本文将使用一个gitHub开源的组件技术来读写三菱的plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 里面 ...

  9. java与plc 西门子 通讯,进行读写操作 采用TCP 直接连接

    java与plc 西门子 通讯,进行读写操作 采用TCP 直接连接 0x0 ​ 阅读本文章你能会使用java与西门子plc 进行通信 ​ 所有环境都为仿真模拟环境, ​ 本测试使用的是西门子plc(s ...

最新文章

  1. 一步一步Asp.Net MVC系列_权限管理总结(附MVC权限管理系统源码)
  2. 混合云关键技术能力和发展趋势
  3. python如何做一个数据库_Python创建一个新的Django项目(连接到MySQL数据库),python,新建,mysql...
  4. JavaFX UI控件教程(八)之Choice Box
  5. 如何将hive查询结果导出成txt文件
  6. jeecg下实现自动默认模糊查询
  7. 水表读数自动识别,基于DB和CRNN的方法
  8. Android Canvas简单使用
  9. MogDB与PostgreSQL分区策略语法测试
  10. elementui 表格格式化
  11. mysql返回的数据是什么格式_磁盘格式化后能恢复数据吗?先了解什么是格式化...
  12. omron欧姆龙NJ/NX程序 全自动锂电池二封机,主站NJ501-1400+威纶通触摸屏。 整机采用EtherCAT总线网络节点控制,松下A6总线控制
  13. sort和sorted的区别
  14. silk lobe资源公众号_【好设计资源库】公众号素材获取方式说明
  15. 苹果M1如何安装Rosetta
  16. 线段树进阶之lazy思想及Java实现
  17. AlphaFold2: Highly accurate protein structure prediction with AlphaFold笔记
  18. 【海码学院】web前端基础入门JavaScript之JavaScript起源和基础语法学习笔记
  19. 小码哥《恋上数据结构与算法》笔记(十五):哈希表(Hash Table)
  20. vivado快捷键设置 放大代码_【Vivado那些事】Vivado中常用的快捷键(二)其他常用快捷键...

热门文章

  1. Web层改进II-用xmlhttp 无声息提交复杂表单
  2. mysql 中 使用truncate table XXXX 的时候出现 DROP command denied to user 'xxx' for table ' YYY的问题解决
  3. 旅游网案例:旅游线路名称查询
  4. 淘宝无货源开店怎么做?淘宝无货源开店裂变教程
  5. PowerDVD(了解收藏)
  6. 《数据结构》C语言版 严蔚敏版本 学习笔记
  7. 《网页制作与网站建设从入门到精通》第一部分 入门篇
  8. Demographic Prediction. 人口统计预测相关调研
  9. TouchGTX使用教程Button实现Text文本显示变化【一】
  10. 【哪些工作会被ChatGPT取代?】我用ChatGPT全自动化生成代码进行了深度分析