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

成都网页编辑器开发seo推广效果

成都网页编辑器开发,seo推广效果,有什么做任务拿钱的网站,优惠券网站制作教程场景 Windows上ModbusTCP模拟Master与Slave工具的使用#xff1a; Windows上ModbusTCP模拟Master与Slave工具的使用-CSDN博客 Modebus TCP Modbus由MODICON公司于1979年开发#xff0c;是一种工业现场总线协议标准。 1996年施耐德公司推出基于以太网TCP/IP的Modbus协议 Windows上ModbusTCP模拟Master与Slave工具的使用-CSDN博客 Modebus TCP Modbus由MODICON公司于1979年开发是一种工业现场总线协议标准。 1996年施耐德公司推出基于以太网TCP/IP的Modbus协议ModbusTCP。 Modbus协议是一项应用层报文传输协议包括ASCII、RTU、TCP三种报文类型。 标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口采用master/slave方式通信。 Modbus的操作对象有四种 线圈、离散输入、保持寄存器、输入寄存器。 Modbus功能码 关于Java的开源库 Jamod Java Modbus实现Java Modbus库。该库由Dieter Wimberger实施。 ModbusPal ModbusPal是一个正在进行的Java项目用于创建逼真的Modbus从站模拟器。 下面介绍基于Modebus4j实现读线圈状态数据。 由于预定义的数学函数和/或Python脚本寄存器值是动态生成的。 ModbusPal依赖于RxTx进行串行通信而Jython则依赖于脚本支持。 Modbus4J Serotonin Software用Java编写的Modbus协议的高性能且易于使用的实现。 支持ASCIIRTUTCP和UDP传输作为从站或主站自动请求分区响应数据类型解析和节点扫描。 JLibModbus JLibModbus是java语言中Modbus协议的一种实现。jSSC和RXTX用于通过串行端口进行通信。 该库是一个经过积极测试和改进的项目。 注 博客霸道流氓气质_C#,架构之路,SpringBoot-CSDN博客 实现 1、基于modbus4j实现线圈状态数据的读取。 modbus4j GitHub - MangoAutomation/modbus4j: A high-performance and ease-of-use implementation of the Modbus protocol written in Java. Supports ASCII, RTU, TCP, and UDP transports as slave or master, automatic request partitioning and response data type parsing. 按照官网介绍需要在pom文件中添加repository的配置 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/repositories 添加位置 然后添加依赖 dependencygroupIdcom.infiniteautomation/groupIdartifactIdmodbus4j/artifactIdversion3.0.3/version/dependency 2、新建modbus4j工具类 package com.badao.demo.utils;import com.serotonin.modbus4j.BatchRead; import com.serotonin.modbus4j.BatchResults; import com.serotonin.modbus4j.ModbusFactory; import com.serotonin.modbus4j.ModbusMaster; 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;public class Modbus4jUtils {/*** 工厂。*/static ModbusFactory modbusFactory;static {if (modbusFactory null) {modbusFactory new ModbusFactory();}}/*** 获取master** return* throws ModbusInitException*/public static ModbusMaster getMaster(String ip,int port) 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;}/*** 读取[01 Coil Status 0x]类型 开关数据** param slaveId*            slaveId* param offset*            位置* return 读取值* throws ModbusTransportException*             异常* throws ErrorResponseException*             异常*/public static Boolean readCoilStatus(ModbusMaster master,int slaveId, int offset)throws ModbusTransportException, ErrorResponseException {// 01 Coil StatusBaseLocatorBoolean loc BaseLocator.coilStatus(slaveId, offset);Boolean value master.getValue(loc);return value;}/*** 读取[02 Input Status 1x]类型 开关数据** param slaveId* param offset* return* throws ModbusTransportException* throws ErrorResponseException*/public static Boolean readInputStatus(ModbusMaster master,int slaveId, int offset)throws ModbusTransportException, ErrorResponseException {// 02 Input StatusBaseLocatorBoolean loc BaseLocator.inputStatus(slaveId, offset);Boolean value master.getValue(loc);return value;}/*** 读取[03 Holding Register类型 2x]模拟量数据** param slaveId*            slave Id* param offset*            位置* param dataType*            数据类型,来自com.serotonin.modbus4j.code.DataType* return* throws ModbusTransportException*             异常* throws ErrorResponseException*             异常*/public static Number readHoldingRegister(ModbusMaster master,int slaveId, int offset, int dataType)throws ModbusTransportException, ErrorResponseException {// 03 Holding Register类型数据读取BaseLocatorNumber loc BaseLocator.holdingRegister(slaveId, offset, dataType);Number value master.getValue(loc);return value;}/*** 读取[04 Input Registers 3x]类型 模拟量数据** param slaveId*            slaveId* param offset*            位置* param dataType*            数据类型,来自com.serotonin.modbus4j.code.DataType* return 返回结果* throws ModbusTransportException*             异常* throws ErrorResponseException*             异常*/public static Number readInputRegisters(ModbusMaster master,int slaveId, int offset, int dataType)throws ModbusTransportException, ErrorResponseException {// 04 Input Registers类型数据读取BaseLocatorNumber loc BaseLocator.inputRegister(slaveId, offset, dataType);Number value master.getValue(loc);return value;}/*** 批量读取使用方法** throws ModbusTransportException* throws ErrorResponseException* throws ModbusInitException* return*/public static BatchResultsInteger batchRead(ModbusMaster master,BatchReadInteger batchRead) throws ModbusTransportException, ErrorResponseException, ModbusInitException {// 是否连续请求batchRead.setContiguousRequests(false);BatchResultsInteger results master.send(batchRead);return results;} } 3、使用方式 新建master ModbusMaster master Modbus4jUtils.getMaster(modebustcpIp, port); 这里的ip和端口来自配置文件 单个读取数据 Boolean aBoolean Modbus4jUtils.readCoilStatus(master, 1, 0); 这里1代表slaveId,0代表offset 批量读取数据 BatchReadInteger batch new BatchRead();ListLocator locatorList locatorConfig.getLocatorList();locatorList.forEach(locator - batch.addLocator(locator.getId(), BaseLocator.coilStatus(locator.getSlaveId(),locator.getOffset())));BatchResultsInteger batchResults Modbus4jUtils.batchRead(master, batch);Boolean valueOne (Boolean) batchResults.getValue(0);Boolean valueTwo (Boolean) batchResults.getValue(1);Boolean valueThree (Boolean) batchResults.getValue(2); 这里批量读取的配置来自配置文件 4、业务示例 在定时任务中批量读取指定slaveId和offset的线圈状态数据 import com.badao.demo.config.LocatorConfig; import com.badao.demo.entity.Locator; import com.badao.demo.utils.Modbus4jUtils; import com.serotonin.modbus4j.BatchRead; import com.serotonin.modbus4j.BatchResults; import com.serotonin.modbus4j.ModbusMaster; import com.serotonin.modbus4j.exception.ErrorResponseException; import com.serotonin.modbus4j.exception.ModbusInitException; import com.serotonin.modbus4j.exception.ModbusTransportException; import com.serotonin.modbus4j.locator.BaseLocator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import java.time.LocalDateTime; import java.util.List;Configuration EnableScheduling public class GetModbusTCPDataTask {Value(${modebustcp.ip})private String modebustcpIp;Value(${modebustcp.port})private Integer port;Autowiredprivate LocatorConfig locatorConfig;Scheduled(fixedRateString 2000)public void  getData() throws ModbusInitException {ModbusMaster master Modbus4jUtils.getMaster(modebustcpIp, port);BatchReadInteger batch new BatchRead();ListLocator locatorList locatorConfig.getLocatorList();locatorList.forEach(locator - batch.addLocator(locator.getId(), BaseLocator.coilStatus(locator.getSlaveId(),locator.getOffset())));try {//单个读取//Boolean aBoolean Modbus4jUtils.readCoilStatus(master, 1, 0);//批量读取BatchResultsInteger batchResults Modbus4jUtils.batchRead(master, batch);Boolean valueOne (Boolean) batchResults.getValue(0);Boolean valueTwo (Boolean) batchResults.getValue(1);Boolean valueThree (Boolean) batchResults.getValue(2);System.out.println(LocalDateTime.now());System.out.println(valueOne:valueOne);System.out.println(valueTwo:valueTwo);System.out.println(valueThree:valueThree);} catch (ModbusTransportException e) {e.printStackTrace();} catch (ErrorResponseException e) {e.printStackTrace();} catch (ModbusInitException e) {e.printStackTrace();}} } 5、本地测试效果 6、线上测试效果 线上使用RS485转以太网模块会将其转换成MODBUS TCP服务端端口为默认502slaveid为2 通讯测试效果 7、SpringBoot中进行ModbusTCP通讯时提示 com.serotonin.modbus4j.exception.ErrorResponseException:Illegal function 这是因为功能码不对应使用Modbus Slave Definition定义的功能码为03 Holding Register(4x),而在代码中连接后执行的是读取线圈状态的功能码 所以将功能码修改对应即可
http://www.hkea.cn/news/14529261/

相关文章:

  • 视频解析网站如何做搜索网站图怎么做会高清图片
  • 网站在线开发网站 title 被修改
  • 泉州企业做网站手机网站建设好吗
  • 网站建设etw建设网站比较好公司吗
  • 深圳前十网站建设公司成品网页大全下载
  • 网站运营部的职责8黄页网站建设
  • 网站建设的后台登录wordpress怎样电影导航
  • 青岛市建设局网站停工网站上的验证码怎么做的
  • 网站建设合同中的违约责任网站建设的ppt模板
  • 做门用什么网站好网站优化策略分析
  • 网站建设968用什么网站开发巴西客户
  • 建设网站需要支付什么插件费用吗网站建设最新
  • 行业做门户网站挣钱吗erp系统十大软件
  • 做网站电话销售说辞外卖网站制作
  • 做网站找投资人传智播客网页平面设计
  • 福州网站排名百度seo搜搜
  • jsp做就业网站seo站长工具
  • django 网站开发视频扬中网站推广价格
  • 深圳如何搭建制作网站个人网站空间准备
  • 宁波专业网站推广平台咨询物联网平台层
  • 诸暨企业网站建设dedecms 网站 经常无法连接
  • 购物网站开发过程合肥全员核酸检测
  • 杭州网站建设(推荐乐云践新)服务器网站路径问题
  • 广州技术支持:网站建设网站建设兰州
  • 有没有做网站的联系方式vps 网站上传
  • 公司网站模板建设公司公众号运营方案
  • 企业网站如何做架构图WordPress数据库搜索
  • 搜索网站做推广wordpress登录界面改哪个文件夹
  • 国内最好的网站服务器中国铁路总公司建设管理部网站
  • wordpress私人建站主题移动端响应式网站怎么做