CN109918062A - 基于Java语言的modbus协议解析方法 - Google Patents
基于Java语言的modbus协议解析方法 Download PDFInfo
- Publication number
- CN109918062A CN109918062A CN201910155478.4A CN201910155478A CN109918062A CN 109918062 A CN109918062 A CN 109918062A CN 201910155478 A CN201910155478 A CN 201910155478A CN 109918062 A CN109918062 A CN 109918062A
- Authority
- CN
- China
- Prior art keywords
- denoted
- data
- obtains
- value
- analytic method
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Abstract
本发明提供了一种基于Java语言的modbus协议解析方法,设置设备的设备属性值,连接设备与从机;从从机中获取原始数据;将获取的原始数据按照设备属性值进行分类,再根据设备属性值类型分别采用线圈解析方法或离散量线圈解析方法或寄存器解析方法进行解析;解析后获得的数据存入nosql类型的redis数据库中,保存数据线程按照频率定时搜查redis的数据,然后存入MySQL数据进行最终保存;同时利用websocket传入页面,进行实时显示。该方法对16进制数字进行解析后将转为10进制数字,提高了代码可读性,可简洁的显示给用户进行观察;使开发者专注于真实数据的处理而不用在底层与设备交互过程花费过多精力。
Description
技术领域
本发明涉及modbus领域,具体涉及基于Java语言的modbus协议解析方法。
背景技术
modbus协议是一种通用的工业标准,其广泛用于控制器之间的通信互联。当在一modbus网络上通信时,每个控制器需要知道该网络中与其通信的所有控制器的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用modbus协议发出。如今Java版的modbus数据解析,大多代码繁琐,冗余增多,可读性不高,给开发人员、维护人员造成极大的困扰,且数据解析之后依然为16进制数字,无法友好的进行显示给用户进行观察。
发明内容
本发明所要解决的技术问题是针对上述现有技术存在的不足,而提供一种去冗存精的基于Java语言的modbus协议解析方法。本发明采用的技术方案是:
基于Java语言的modbus协议解析方法,步骤为:
S1设置设备的设备属性值,连接设备与从机;
S2从从机中获取原始数据;
S3将获取的原始数据按照设备属性值进行分类,再根据设备属性值类型分别采用线圈解析方法或离散量线圈解析方法或寄存器解析方法进行解析;
S4解析后获得的数据存入nosql类型的redis数据库中,保存数据线程按照频率定时搜查redis的数据,然后存入MySQL数据进行最终保存;同时利用websocket传入页面,进行实时显示。
优选的,线圈解析方法的步骤为:
S31-1将获取的原始数据的长度记作size,同时定义一个外部总变量记作totalResult,将得到设备类型的长度记作length;
S31-2用所述size除以8后取余并记作result;
S31-3将result的自身数字作为循环的次数,每次循环完成截取原始数据的操作,起始下标为当前循环的次数乘以8加1,结束下标为当前循环的次数先加1的和再乘以8,截取后的字符串进行倒序操作,然后totalResult追加此字符串;
S31-4截取totalResult,从length的下标减1到length的下标,得到数据结果finalResult;
离散量线圈解析方法的步骤为:
S32-1将设备类型长度记作size,同时定义一个外部总变量记作totalResult;
S32-2在totalResult后面追加原始数据的倒序排列的字符串;
S32-3截取totalResult,起始下标为size减1,结束下标为size,得到数据结果finalResult;
寄存器解析方法的步骤为:
S33-1获取原始数据记作value,将得到寄存器的最大AD值记作maxAD,最小AD值记作minAD;
得到配置好的最大真实值记作maxActualValue,最小真实值记作minActualValue;得到配置好的最大模拟量输入值记作maxAnalogValue,最小模拟量输入值记作minAnalogValue;得到幅度值记作bValue;
S33-2用maxAnalogValue减去minAnalogValue的差,去除以maxAD减去minAD的差,得到余数k2;用maxActualValue减去minActualValue的差,去除以maxAnalogValue减去minAnalogValue的差,得到余数k1;K1转负数,然后乘以minAnalogValue,得到b1;K2乘以value加上bValue,然后结果乘以k1得到k3;K3加上b1,减去minActualValue的绝对值得到最终结果realValue;
优选的,寄存器解析方法的步骤中所述的定时搜查redis的频率为2~10秒。
与现有技术方案相比,本发明技术方案的有益效果是:
1.通过本发明的解析方法对16进制数字进行解析后将转为10进制的数字,提高了代码的可读性,可简洁的进行显示给用户进行观察;可以使开发者专注于真实数据的处理过程,而不用在底层的与设备的交互过程再花费过多精力。
2.提高了读取数据的稳定性,理论上可以应对十万个设备连接状况;提高了读取数据的速度,可以在大批量设备的连接下做到2S以内数据的实时传递。
3.本发明适用于所有设备模型,包括较冷门的光纤、沉降、烟感等。
4.检测时间及时、准确,不会出现连接断开后没有被检测到的现象。
5.经过一些配置,可以对数据偏移或者超限进行告警,提醒等操作。
附图说明
图1展示了基于Java语言的modbus协议解析方法的流程示意图。
具体实施方式
下面结合附图,对本发明作详细说明:
本发明基于Java语言的modbus协议解析方法,详细过程如下:
S1设置设备的设备属性值,连接设备与从机;
S2从从机中获取原始数据;
S3将获取的原始数据按照设备属性值进行分类,再根据设备属性值类型分别采用线圈解析方法或离散量线圈解析方法或寄存器解析方法进行解析;其中设备属性值与下列3种解析方法一一对应,有可能会出现单个设备包含多个设备属性的情况;(例如:水泵设备,包含开关与运行状态两个设备属性,其中开关采用线圈解析方法,运行状态采用离散量线圈解析方法)
如果设备属性值对应的是线圈解析方法,那么解析方法的步骤为:
S31-1将获取的原始数据的长度记作size,同时定义一个外部总变量记作totalResult,将得到设备类型的长度记作length;(例如:原始数据为000000001,所以size=9,totalResult在此定义还无具体值,length=1)
S31-2用所述size除以8后取余并记作result;(例如:result=9/8=1)
S31-3将result的自身数字作为循环的次数,每次循环完成截取原始数据的操作,起始下标为当前循环的次数乘以8加1,结束下标为当前循环的次数先加1的和再乘以8,截取后的字符串进行倒序操作,然后totalResult追加此字符串;(例如:result为1,所以循环一次,截取000000001,起始下标为0*8+1,结束下标为(0+1)*8,截取完毕为00000001,倒序操作后为10000000,totalResult追加此字符串,totalResult=10000000)
S31-4截取totalResult,从length的坐标减1到length的坐标,得到数据结果finalResult(例如:totalResult=10000000,起始下标为1-1=0,结束坐标为1,finalResult=1);
如果设备属性值对应的是离散量线圈,那么解析方法的步骤为:
S32-1将设备类型的长度记作size,同时定义一个外部总变量记作totalResult(例如:size1=1,totalResult在此定义还无具体值)
S32-2在totalResult后面追加原始数据的倒序排列的字符串(例如:原始数据为000000001,倒序后为100000000,totalResult追加此字符串,totalResult=100000000);
S32-3截取totalResult,从size减一的下标到size的下标,得到数据结果finalResult(例如:totalResult=100000000,起始下标为1-1=0,结束坐标为1,finalResult=1);
如果设备属性值对应的是寄存器解析方法,那么解析方法的步骤为:
S33-1获取原始数据记作value(例如value=22222);将得到的寄存器的最大AD值记作maxAD,最小AD值记作minAD(例如:maxAD=20000,minAD=4000);得到配置好的最大真实值记作maxActual,最小真实值记作minActualValue(例如:ValuemaxActualValue=30,minAnalogValue=0);得到配置好的最大模拟量输入值记作maxAnalogValue,最小模拟量输入值记作minAnalogValue(例如:maxAnalogValue=20,minAnalogValue=4);得到幅度值记作bValue(例如:bValue=0);
S33-2用maxAnalogValue减去minAnalogValue的差,去除以maxAD减去minAD的差,得到余数k2(例如:k2=(20-4)/(20000-4000)=0.001);用maxActualValue减去minActualValue的差,去除以maxAnalogValue减去minAnalogValue的差,得到余数k1(例如:K1=(30-0)/(20-4)=1.875);K1转负数,然后乘以minAnalogValue,得到b1(例如:B1=-1.875*4=-7.5);K2乘以value加上bValue,然后结果乘以k1得到k3(例如:K3=(0.001*22222+0)*1.875=41.66);K3加上b1,减去minActualValue的绝对值得到最终结果realValue(例如:realValue=41.66+(-7.5)-0=34.16);
S4解析后获得的数据存入nosql类型的redis数据库中,保存数据线程按照频率定时搜查redis的数据,然后存入MySQL数据进行最终保存;同时利用websocket传入页面,进行实时显示。(例如:当线圈类型或离散量线圈的数据为1,页面中的对应设备开关即为开启状态,当数据为0,开关即为关闭状态,注:线圈类型既可以查看开关状态,又可以主动开启或者关闭开关,离散量线圈只能查看,无法控制状态,在此不做赘述;当寄存器的数据为34.16,如果此设备为水位检测仪,页面就会显示水位:34.16cm)
进一步的,寄存器解析方法的步骤中所述的定时搜查redis的频率为2~10秒。
Claims (3)
1.基于Java语言的modbus协议解析方法,其特征在于:步骤为:
S1设置设备的设备属性值,连接设备与从机;
S2从从机中获取原始数据;
S3将获取的原始数据按照设备属性值进行分类,再根据设备属性值类型分别采用线圈解析方法或离散量线圈解析方法或寄存器解析方法进行解析;
S4解析后获得的数据存入nosql类型的redis数据库中,保存数据线程按照频率定时搜查redis的数据,然后存入MySQL数据进行最终保存;同时利用websocket传入页面,进行实时显示。
2.如权利要求1所述的modbus协议解析方法,其特征在于:
所述的线圈解析方法步骤为:
S31-1将获取的原始数据的长度记作size,同时定义一个外部总变量记作totalResult,将得到设备类型的长度记作length;
S31-2用所述size除以8后取余并记作result;
S31-3将result的自身数字作为循环的次数,每次循环完成截取原始数据的操作,起始下标为当前循环的次数乘以8加1,结束下标为当前循环的次数先加1的和再乘以8,截取后的字符串进行倒序操作,然后totalResult追加此字符串;
S31-4截取totalResult,从length减一的下标到length的坐标,得到数据结果finalResult;
所述的离散量线圈解析方法步骤为:
S32-1将设备类型的长度记作size,同时定义一个外部总变量记作totalResult;
S32-2在totalResult后面追加原始数据的倒序排列的字符串;
S32-3截取totalResult,起始下标为size减1,结束下标为size,得到数据结果finalResult;
所述的寄存器解析方法步骤为:
S33-1获取原始数据记作value,将得到寄存器的最大AD值记作maxAD,最小AD值记作minAD;
得到配置好的最大真实值记作maxActualValue,最小真实值记作minActualValue;得到配置好的最大模拟量输入值记作maxAnalogValue,最小模拟量输入值记作minAnalogValue;得到幅度值记作bValue;
S33-2用maxAnalogValue减去minAnalogValue的差,去除以maxAD减去minAD的差,得到余数k2;用maxActualValue减去minActualValue的差,去除以maxAnalogValue减去minAnalogValue的差,得到余数k1;K1转负数,然后乘以minAnalogValue,得到b1;K2乘以value加上bValue,然后结果乘以k1得到k3;K3加上b1,减去minActualValue的绝对值得到最终结果realValue。
3.如权利要求1或2所述的modbus协议解析方法,其特征在于:寄存器解析方法的步骤中所述的定时搜查redis的频率为2~10秒。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910155478.4A CN109918062A (zh) | 2019-03-01 | 2019-03-01 | 基于Java语言的modbus协议解析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910155478.4A CN109918062A (zh) | 2019-03-01 | 2019-03-01 | 基于Java语言的modbus协议解析方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109918062A true CN109918062A (zh) | 2019-06-21 |
Family
ID=66962916
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910155478.4A Withdrawn CN109918062A (zh) | 2019-03-01 | 2019-03-01 | 基于Java语言的modbus协议解析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109918062A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103792928A (zh) * | 2014-02-24 | 2014-05-14 | 东南大学 | 一种基于Modbus的工业现场数据采集分析系统 |
CN107277011A (zh) * | 2017-06-16 | 2017-10-20 | 深圳市盛路物联通讯技术有限公司 | 终端设备的数据分类方法及装置 |
CN109120477A (zh) * | 2018-08-16 | 2019-01-01 | 广东芬尼克兹节能设备有限公司 | 基于modbus协议的动态解析方法、装置、服务器及存储介质 |
-
2019
- 2019-03-01 CN CN201910155478.4A patent/CN109918062A/zh not_active Withdrawn
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103792928A (zh) * | 2014-02-24 | 2014-05-14 | 东南大学 | 一种基于Modbus的工业现场数据采集分析系统 |
CN107277011A (zh) * | 2017-06-16 | 2017-10-20 | 深圳市盛路物联通讯技术有限公司 | 终端设备的数据分类方法及装置 |
CN109120477A (zh) * | 2018-08-16 | 2019-01-01 | 广东芬尼克兹节能设备有限公司 | 基于modbus协议的动态解析方法、装置、服务器及存储介质 |
Non-Patent Citations (1)
Title |
---|
朱小超等: "基于Modbus协议的上位机与单片机通信的实现与仿真", 《仪表技术与传感器》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Zhang et al. | On complexity and optimization of expensive queries in complex event processing | |
CN109918370B (zh) | 一种基于web的可配置表单应用前端的开发方法及系统 | |
CN106327324B (zh) | 一种网络行为特征的快速计算方法和系统 | |
CN102682090A (zh) | 一种基于聚合词树的敏感词匹配处理系统及方法 | |
CN110399533A (zh) | 资金流向查询方法及装置 | |
CN113590776A (zh) | 基于知识图谱的文本处理方法、装置、电子设备及介质 | |
CN105302730A (zh) | 一种检测计算模型的方法、测试服务器及业务平台 | |
CN114911465A (zh) | 算子的生成方法、装置、设备以及存储介质 | |
CN114416685A (zh) | 日志处理方法、系统和存储介质 | |
CN109918062A (zh) | 基于Java语言的modbus协议解析方法 | |
CN113342946B (zh) | 客服机器人的模型训练方法、装置、电子设备及介质 | |
CN108268365A (zh) | 异常任务注入方法、装置和系统 | |
CN106611176B (zh) | 异常中文字符串的识别方法及装置 | |
CN109885485A (zh) | 交易冲突检测方法和装置 | |
CN110532267A (zh) | 字段的确定方法、装置、存储介质及电子装置 | |
CN115080607A (zh) | 一种结构化查询语句的优化方法、装置、设备及存储介质 | |
US20120166465A1 (en) | Query transformation | |
CN109408577A (zh) | Oracle数据库json解析方法、系统、装置及可存储介质 | |
CN110019045A (zh) | 日志落地方法及装置 | |
CN110795456A (zh) | 图谱的查询方法、装置、计算机设备以及存储介质 | |
CN110109672A (zh) | 一种表达式的解析处理方法及装置 | |
CN108959508A (zh) | Sql数据生成方法及装置 | |
CN108519965A (zh) | 数据解析方法及装置 | |
CN109559139A (zh) | 一种物品对象的处理方法、装置、介质及电子设备 | |
US20210326514A1 (en) | Method for generating interpretation text, electronic device and storage medium |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20190621 |
|
WW01 | Invention patent application withdrawn after publication |