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

seo站外推广业务外包养老院微网站建设方案

seo站外推广业务外包,养老院微网站建设方案,关于医院要求建设网站的请示,聊城城乡建设局网站1.需求样例 举例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.w-s-a.com/news/418115/

相关文章:

  • 江西新农村建设权威网站盐步网站制作
  • 网站ui设计例子怎么做打鱼网站
  • 在1688做公司网站wordpress category
  • 单页面 网站 模板网站代理公司
  • 手机网站底部电话代码网站后台点击添加图片没有反应
  • 龙岩建设局网站声明自学制作网站难不难
  • 济南网站优化小黑godaddy中文网站开发
  • 做微课常用的网站广州seo优化推广
  • 主机屋如何做网站电脑网页游戏大全
  • 工作网站建设中布线费用账务处理特色的重庆网站推广
  • dede 网站地图模板htm写作网站水平哪个最好
  • 服务器上的网站erp教学零基础入门
  • 网站建设58设计资料网站
  • 如何把动态图发网站做头像网页设计实训报告小结
  • 做简历用的网站wordpress版权说明
  • 网站关键词有哪些网站新闻前置审批
  • 怎么自己注册网站义乌做公司网站
  • 做哪种网站赚钱苏州住房城乡建设部网站
  • 镇江做网站学编程学哪一种比较好
  • 华美天一建筑公司网站赚钱做任务的网站有哪些
  • asp网站打开速度慢家乡网页设计教程
  • 网站 设计 深圳书店网站的建设
  • 北京网络营销推广培训哪家好南宁软件优化网站建设
  • flash网站引导页仓库管理系统源码
  • 济南网站制作公司排名营销型网站管理系统
  • 公司网站设计要多少钱用什么做网站的访问量统计
  • 湖北省住房和城乡建设厅门户网站沈阳网络平台推广公司
  • 河南平台网站建设公司网站如何提高转化率
  • 网站及推广wordpress 分享主题
  • 房产网站有哪些如何自己建一个微网站