当前位置: 首页 > news >正文

站长网站推广西宁seo网站建设

站长网站推广,西宁seo网站建设,长春网站建设 找源晟,烟台网站建设ytwzjs1.需求样例 举例5#xff1a;浮点数参数读取#xff08;读取温度测量值#xff09;查看参数列表#xff0c;温度测量值地址为320#xff0c;根据Modbus协议#xff0c;读取参数地址转换为16进制为#xff1a;00H A0H#xff0c;读取长度为2个字#xff1a;00H 02H。 …1.需求样例 举例5浮点数参数读取读取温度测量值查看参数列表温度测量值地址为320根据Modbus协议读取参数地址转换为16进制为00H A0H读取长度为2个字00H 02H。 16进制发送读取命令如下00 00 00 00 00 06 01 03 00 A0 00 02(复制使用时去掉中间空格以16进制发送)00 00 00 00 00 06 01Modbus命令头用户直接复制不能更改03读取寄存器功能代码00 A0读取参数寄存器地址16进制代码00 02读取寄存器地址长度接收到数据格式如下00 00 00 00 00 07 01 03 04 42 48 02 C8 00 00 00 00 00 07 01Modbus返回命令头03读取寄存器功能代码04返回数据长度四个字节42 48 02 C8寄存器数据值我们将此16进制数转换为浮点数值为50.002716。注具体转换方法可以常见附件转换程序算法。2.实现功能 通过Java与Modbus-TCP/IP网络通讯实现举例5中的功能 3.功能代码 1 package com.nwpusct.csal.controller.tcpconnect; import java.io.*; import java.math.BigInteger; import java.net.Socket;import com.serotonin.modbus4j.exception.ErrorResponseException; import com.serotonin.modbus4j.exception.ModbusInitException; import com.serotonin.modbus4j.exception.ModbusTransportException; import org.apache.commons.lang.math.NumberUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import javax.xml.bind.DatatypeConverter;import static org.apache.poi.util.HexDump.toHex;/*** 类描述TODO** author HBO* date 2023-08-22 09:21**/ public class SocketUtils {private static final Logger LOGGER LoggerFactory.getLogger(SocketUtils.class);private static Socket socket null;private static String archivesCenterAPIIP 127.0.0.1;private static String archivesCenterAPIPort 502;public static boolean connection() {if (socket ! null) {return true;}try {socket new Socket(archivesCenterAPIIP, NumberUtils.toInt(archivesCenterAPIPort));return true;} catch (Exception e) {LOGGER.error(connection error, e);return false;}}public static void stop() {try {if (socket ! null) {socket.close();socket null;}} catch (Exception e) {LOGGER.error(connection error, e);}}/*** 发送数据** param cmd* 需要发送的数据(十六进制的字符串形式)* return 接受到的数据(十六进制的字符串形式)*/public static String sendCmd(String cmd) {if (!connection() || socket null) {return error;}try {OutputStream out socket.getOutputStream();byte[] hexStrToByteArrs hexStrToByteArrs(cmd);if (hexStrToByteArrs null) {return error;}out.write(hexStrToByteArrs);InputStream in socket.getInputStream();byte[] buf new byte[1024];int len in.read(buf);stop();return bytesToHexString(buf) ;} catch (IOException e) {LOGGER.error(sendCmd error, e);return error;}}/*** 将十六进制的字符串转换成字节数组** param hexString* return*/public static byte[] hexStrToByteArrs(String hexString) {if (StringUtils.isEmpty(hexString)) {return null;}hexString hexString.replaceAll( , );int len hexString.length();int index 0;byte[] bytes new byte[len / 2];while (index len) {String sub hexString.substring(index, index 2);bytes[index / 2] (byte) Integer.parseInt(sub, 16);index 2;}return bytes;}/*** 数组转换成十六进制字符串** param* return HexString*/public static final String bytesToHexString(byte[] bArray) {StringBuffer sb new StringBuffer(bArray.length);String sTemp;for (int i 0; i bArray.length; i) {sTemp Integer.toHexString(0xFF bArray[i]);if (sTemp.length() 2)sb.append(0);sb.append(sTemp.toUpperCase());// 在这里故意追加一个逗号便于最后的区分sb.append( );}return sb.toString();}/** 将16进制数字解码成字符串,适用于所有字符包括中文*/public static String decode(String bytes) {String hexString 0123456789ABCDEF;ByteArrayOutputStream baos new ByteArrayOutputStream(bytes.length() / 2);// 将每2位16进制整数组装成一个字节for (int i 0; i bytes.length(); i 2)baos.write((hexString.indexOf(bytes.charAt(i)) 4 | hexString.indexOf(bytes.charAt(i 1))));return new String(baos.toByteArray());}/*** 16进制数转换为浮点数值** param str 16进制数据 424802C8 50.002716* throws IOException* throws ModbusInitException* throws ModbusTransportException* throws ErrorResponseException*/public static Float intBitsToFloat(String str) {BigInteger b new BigInteger(str, 16);float value Float.intBitsToFloat(b.intValue());return value;}public static void main(String[] args) throws UnsupportedEncodingException {//34.6°String str sendCmd(00 00 00 00 00 06 01 03 00 04 00 02); // String str00 00 00 00 00 06 01 03 00 02 00 02;String x str.replaceAll(\\s*, );String s str.split( )[8];String substring x.substring(18, Integer.parseInt(s) * 2 18);System.out.println(substring);System.out.println(intBitsToFloat(substring));}} 2 package com.nwpusct.csal.controller.tcpconnect;import com.nwpusct.csal.common.util.RestResult; import com.nwpusct.csal.common.util.RestResultUtil; import com.serotonin.modbus4j.ModbusFactory; import com.serotonin.modbus4j.ModbusMaster; import com.serotonin.modbus4j.code.DataType; import com.serotonin.modbus4j.exception.ErrorResponseException; import com.serotonin.modbus4j.exception.ModbusInitException; import com.serotonin.modbus4j.exception.ModbusTransportException; import com.serotonin.modbus4j.ip.IpParameters; import com.serotonin.modbus4j.locator.BaseLocator; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*;/*** 类描述TODO* 监测高低温箱温度** author HBO* date 2023-08-21 09:34**/ CrossOrigin RestController Api(tags {监测高低温箱温度}) RequestMapping(value /modbus) public class ModbusController {Value(value ${high.ip})public String ip;//从站IPValue(value ${high.port})public int port;//modbus端口Value(value ${low.ip})public String lowIp;Value(value ${low.port})public int lowPort;/*** 工厂。*/static ModbusFactory modbusFactory;static {if (modbusFactory null) {modbusFactory new ModbusFactory();}}GetMapping(value /readModbusHigh)ApiOperation(value 高温箱)public RestResultObject readModbusHigh() {//第二中方式try {Number number readHoldingRegisterH(1, 320, DataType.FOUR_BYTE_FLOAT);return RestResultUtil.genSuccessResult(number);} catch (Exception e) {return RestResultUtil.genSuccessResult(null);}}/*** 获取master 高温箱** return* throws ModbusInitException*/public ModbusMaster getMasterH() throws ModbusInitException {IpParameters params new IpParameters();params.setHost(ip);params.setPort(port);//// modbusFactory.createRtuMaster(wapper); //RTU 协议// modbusFactory.createUdpMaster(params);//UDP 协议// modbusFactory.createAsciiMaster(wrapper);//ASCII 协议ModbusMaster master modbusFactory.createTcpMaster(params, false);// TCP 协议master.init();return master;}/*** 读取[03 Holding Register类型 2x]模拟量数据 高温箱** param slaveId slave Id* param offset 位置 序列号* param dataType 数据类型,来自com.serotonin.modbus4j.code.DataType* return* throws ModbusTransportException 异常* throws ErrorResponseException 异常* throws ModbusInitException 异常*/public Number readHoldingRegisterH(int slaveId, int offset, int dataType)throws ModbusTransportException, ErrorResponseException, ModbusInitException {// 03 Holding Register类型数据读取BaseLocatorNumber loc BaseLocator.holdingRegister(slaveId, offset, dataType);Number value getMasterH().getValue(loc);return value;}GetMapping(value /readModbusLow)ApiOperation(value 高低温箱)public RestResultObject readModbusLow() {try {Number number readHoldingRegisterL(1, 320, DataType.FOUR_BYTE_FLOAT);return RestResultUtil.genSuccessResult(number);} catch (Exception e) {return RestResultUtil.genSuccessResult(null);}}/*** 获取master 高低温箱** return* throws ModbusInitException*/public ModbusMaster getMasterL() throws ModbusInitException {IpParameters params new IpParameters();params.setHost(lowIp);params.setPort(lowPort);ModbusMaster master modbusFactory.createTcpMaster(params, false);// TCP 协议master.init();return master;}/*** 读取[03 Holding Register类型 2x]模拟量数据 高低温箱** param slaveId slave Id* param offset 位置 序列号* param dataType 数据类型,来自com.serotonin.modbus4j.code.DataType* return* throws ModbusTransportException 异常* throws ErrorResponseException 异常* throws ModbusInitException 异常*/public Number readHoldingRegisterL(int slaveId, int offset, int dataType)throws ModbusTransportException, ErrorResponseException, ModbusInitException {// 03 Holding Register类型数据读取BaseLocatorNumber loc BaseLocator.holdingRegister(slaveId, offset, dataType);Number value getMasterL().getValue(loc);return value;} } 4.maven引入依赖包 dependenciesdependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.9/version/dependency/dependencies!-- 若想引用modbus4j需要引入下列repository id:ias-snapshots id:ias-releases 两个 使用默认仓库下载不要使用阿里云仓库--repositoriesrepositoryreleasesenabledfalse/enabled/releasessnapshotsenabledtrue/enabled/snapshotsidias-snapshots/idnameInfinite Automation Snapshot Repository/nameurlhttps://maven.mangoautomation.net/repository/ias-snapshot//url/repositoryrepositoryreleasesenabledtrue/enabled/releasessnapshotsenabledfalse/enabled/snapshotsidias-releases/idnameInfinite Automation Release Repository/nameurlhttps://maven.mangoautomation.net/repository/ias-release//url/repository/repositories5.测试模拟工具私信关注博主
http://www.hkea.cn/news/14437427/

相关文章:

  • 网站建设初期的工作计划设计网站平台
  • 网站建设与制作dw8教程线上推广好做吗
  • 用dw6做网站首页wordpress 类目插件
  • 网站和网站的app太原做网站找谁
  • 做淘宝详情页的素材网站wordpress的登录地址
  • 网站首页设计总结大连网站建设吗
  • 网站项目的流程网站建设的要求及标准
  • 爱站网络挖掘词成都软件网站开发
  • wordpress下载站用什么模板报价单模板电子版下载
  • 广州定制网站建设方案书公司简介怎样写
  • 阜蒙县自治区建设学校网站美图秀秀网页版入口
  • 服装公司网站建设开题报告网站建设内容保障制度
  • 思途旅游网站建设系统国际版网站可以在国内做推广吗
  • 上海网站建设百家号个人网站 备案 攻略
  • 购买空间安装wordpressseo管家
  • 风讯网站内容管理系统 天堂资源官网在线资源
  • 看风格的网站查找做影评的工作网站
  • 本地wordpress预览seo查询工具源码
  • 建设企业网站方法网站开发mvc架构
  • 做cpa用什么类型的网站好如何申请一个自己的网站
  • 课程网站建设目标任务佛山seo联系方式
  • 官方网站建设的目的网络营销的主要传播渠道是什么
  • 百度网站自然排名优化网站设置支付宝在线支付
  • dw网站站点建立后怎么做怎么在微信上卖东西
  • 网站备案都需要什么有没有做美食的网站
  • 网站广告代码怎么添加策划电子商务网站建设规划书
  • 济南 制作网站 公司哪家好滁州网络推广公司
  • ajax网站网页制作与设计表白设计
  • 比较有名的设计网站建设银行北京招聘网站
  • 厦门建设网站建站做商城网站用什么框架