Modbus java slave app
文章实现 Modbus slave app , 用 serial rtu 传输, 代码只实现监听功能(本人测试可行), 要实现写功能,可研究一下代码中 updateProcessImage 方法。完整代码(先阅读 README.md ) :http://git.oschina.net/jlpostbox/demo-modbus
public static void main(String[] args) throws Exception { String commPortId = "COM2";
int baudRate = 9600;
int flowControlIn = 0;
int flowControlOut = 0;
int dataBits = 8;
int stopBits = 1;
int parity = 0; SerialPortWrapperImpl wrapper = new SerialPortWrapperImpl(commPortId, baudRate, flowControlIn, flowControlOut, dataBits, stopBits, parity);
ModbusFactory modbusFactory = new ModbusFactory(); final ModbusSlaveSet listener = modbusFactory.createRtuSlave(wrapper); // Add a few slave process images to the listener.
listener.addProcessImage(getModscanProcessImage(1)); new Thread(new Runnable() {
@Override
public void run() {
try {
listener.start();
}
catch (ModbusInitException e) {
e.printStackTrace();
}
}
}).start(); }static class BasicProcessImageListener implements ProcessImageListener {
@Override
public void holdingRegisterWrite(int offset, short oldValue, short newValue) { System.out.println("HR at " + offset + " was set from " + oldValue + " to " + newValue);
}
} static BasicProcessImage getModscanProcessImage(int slaveId) {
//创建10个可读写的数字类型,与主机对应
BasicProcessImage processImage = new BasicProcessImage(slaveId);
processImage.setInvalidAddressValue(Short.MIN_VALUE);
processImage.setHoldingRegister(0,(short) 8);
processImage.setHoldingRegister(1,(short) 8);
processImage.setHoldingRegister(2,(short) 8);
processImage.setHoldingRegister(3,(short) 8);
processImage.setHoldingRegister(4,(short) 8);
processImage.setHoldingRegister(5,(short) 8);
processImage.setHoldingRegister(6,(short) 8);
processImage.setHoldingRegister(7,(short) 8);
processImage.setHoldingRegister(8,(short) 8);
processImage.setHoldingRegister(9,(short) 8);
// Add an image listener.
processImage.addListener(new BasicProcessImageListener());
return processImage;
}
开发中遇到一个问题,short的取值是 -32768~32767 , 而对方发过来的是 0~65535 , 这样当发过来是32757~65535,java这边收到的是 -32768~ -1 , 我们就得利用Java位运算符,完成Unsigned转换
public int getUnsignedByte (byte data){ //将data字节型数据转换为0~255 (0xFF 即BYTE)。
return data&0x0FF;
}
public int getUnsignedByte (short data){ //将data字节型数据转换为0~65535 (0xFFFF 即 WORD)。
return data&0x0FFFF;
}
public long getUnsignedIntt (int data){ //将int数据转换为0~4294967295 (0xFFFFFFFF即DWORD)。
return data&0x0FFFFFFFFl;
}
Modbus java slave app的更多相关文章
- Java版本APP接口安全设计
Java版本APP接口安全设计 安全设计分为两种: 1.传输安全. 2. 会话安全. 1.传输安全 怎么保证接口经过网络传输不被抓包获取? 1.如果只是使用对称性算法,破解APP拿到加密密钥就可以解密 ...
- 8人/天,小记一次 JAVA(APP后台) 项目改造 .NET 过程(后台代码已完整开源于 Github)
Github: https://github.com/iccb1013/Jade.Net 我们只消耗了8人/天的时间,完成了全部工作,基于我们 Jade.Net 的开源后台代码,任何小规模的后台管理系 ...
- Modbus库开发笔记:Modbus ASCII Slave开发
与Modbus RTU在串行链路上分为Slave和Master一样,Modbus ASCII也分为Slave和Master,这一节我们就来开发Slave.对于Modbus ASCII从站来说,需要实现 ...
- Modbus库开发笔记之五:Modbus RTU Slave开发
Modbus在串行链路上分为Slave和Master,这一节我们就来开发Slave.对于Modbus RTU从站来说,需要实现的功能其实与Modbus TCP的服务器端是一样的.其操作过程也是一样的. ...
- 基于VS Code创建Java command-line app
由于国产化的原因,公司由.NET转向了Java阵营,之后会不定期分享一些技术转型中的体会.所谓Java的command-line app其实就是.NET项目中的Console Application, ...
- 在Azure Cloud Service中部署Java Web App(1)
Microsoft Azure是一个开放的,灵活的云平台,除了对自家的.Net平台有良好的支持外,对于各种开源的软件,语言,工具,框架都有着良好的支持,比如Java,Php,Python等等,你可以使 ...
- 在Azure Cloud Service中部署Java Web App(2)
接上文. 9.在进行发布之前,需要对我们的订阅做一些设置,因为默认情况下,Azure的service end指向的是Azure global的站点,如果我们要将服务发布在Azure的中国站点,需要做下 ...
- java支付宝app支付-代码实现
1.我们需要在支付宝商户平台配置好,取到四个参数如下(这是支付宝官方配置地址):https://www.cnblogs.com/fuzongle/p/10217144.html 合作身份者ID:123 ...
- java版app自动化测试初始化模板
项目目录介绍 目录结构如下: (包含:驱动的基础配置.全局异常处理.异常截图.报告自动生成.app常用操作方法封装.常用工具类封装) 各包分层关系 basepage包负责存放app公共操作方法.And ...
随机推荐
- [Windows] Prism 8.0 入门(上):Prism.Core
1. Prism 简介 Prism 是一个用于构建松耦合.可维护和可测试的 XAML 应用的框架,它支持所有还活着的基于 XAML 的平台,包括 WPF.Xamarin Forms.WinUI 和 U ...
- PyQt(Python+Qt)学习随笔:QDateTimeEdit日期时间编辑部件
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 Designer输入部件中,Date/Time E ...
- buu学习记录(上)
前言:菜鸡误入buu,差点被打吐.不过学到了好多东西. 题目名称: (1)随便注 (2)高明的黑客 (3)CheckIn (4)Hack World (5)SSRF Me (6)piapiapia ( ...
- 团队展示——Part I
1. 团队简介 队名:非专业团队
- javascript:void(0)用法和常见问题
javascript:void(0)的用法 下面的代码创建了一个超级链接,当用户以后不会发生任何事.当用户链接时,void(0) 计算为 0,但 Javascript 上没有任何效果. <a H ...
- eureka配置说明
以下配置来源于jar中的源码,采用标准两个空格作为缩进 eureka.yml spring: application: name: APPLICATION_NAME # 应用名,在eureka上注册为 ...
- 你来说一下springboot的启动时的一个自动装配过程吧
前言 继续总结吧,没有面试就继续夯实自己的基础,前阵子的在面试过程中遇到的各种问题陆陆续续都会总结出来分享给大家,这次要说的也是面试中被问到的一个高频的问题,我当时其实没答好,因为很早之前是看到spr ...
- typora软件使用指南
Markdown学习 标题: 三级标题 四级标题 字体 hello,world! hello,world! hello,world! hello,world! 引用 选择狂神说java,走向人生巅峰 ...
- JavaSE14-集合·其一
1.Collection集合 1.1 集合体系结构 集合 (接口)Collection:单列 (接口)List:可重复 (实现类)ArrayList (实现类)LinkedList (接口)Set:不 ...
- Java IO流 FileOutputStream、FileInputStream的用法
FileOutputStream.FileInputStream的使用 FileOutputStream是OutputStream的继承类,它的主要功能就是向磁盘上写文件.FileOutputStre ...