已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java ModBus操作实例实例说明: 主要用于JAVA 对ModBus以及串口的通讯操作1, Test类用于接收数采仪数据,然后核对其CRC校验是否正确,不正确便丢弃,不作任何操作,正确就查找其设备号对应哪个站点,以及其检测指标。然后到DB中查找实时检测值,若未有实时数据可用本实例中的随机数代替,然后保存发送数据到数据库中。得到值后通过CRC16得到其校验码组成其要发送的字节,发送完毕。2, 主要涉及到的类有3个DB.java 用户得到实时数据,保存发送数据到数据库中Test.java 用户接收数采仪值,通过com串口发送到数采仪ModBus的CRC16校验法数采仪是参照国际HJ/T212-2005CRC.javal类代码如下:public class CRC16 static final String HEXES = 0123456789ABCDEF;byte uchCRCHi = (byte) 0xFF;byte uchCRCLo = (byte) 0xFF;private static byte auchCRCHi = 0x00, (byte) 0xC1, (byte) 0x81,(byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00,(byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0,(byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81,(byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40,(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01,(byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1,(byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81,(byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,(byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01,(byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0,(byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81,(byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,(byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00,(byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0,(byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81,(byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00,(byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1,(byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80,(byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,(byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01,(byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1,(byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81,(byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00,(byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1,(byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80,(byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40,(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01,(byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1,(byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81,(byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00,(byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0,(byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81,(byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40,(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00,(byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0,(byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80,(byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40,(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00,(byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1,(byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80,(byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,(byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00,(byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0,(byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81,(byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00,(byte) 0xC1, (byte) 0x81, (byte) 0x40 ;private static byte auchCRCLo = (byte) 0x00, (byte) 0xC0, (byte) 0xC1,(byte) 0x01, (byte) 0xC3, (byte) 0x03, (byte) 0x02, (byte) 0xC2,(byte) 0xC6, (byte) 0x06, (byte) 0x07, (byte) 0xC7, (byte) 0x05,(byte) 0xC5, (byte) 0xC4, (byte) 0x04, (byte) 0xCC, (byte) 0x0C,(byte) 0x0D, (byte) 0xCD, (byte) 0x0F, (byte) 0xCF, (byte) 0xCE,(byte) 0x0E, (byte) 0x0A, (byte) 0xCA, (byte) 0xCB, (byte) 0x0B,(byte) 0xC9, (byte) 0x09, (byte) 0x08, (byte) 0xC8, (byte) 0xD8,(byte) 0x18, (byte) 0x19, (byte) 0xD9, (byte) 0x1B, (byte) 0xDB,(byte) 0xDA, (byte) 0x1A, (byte) 0x1E, (byte) 0xDE, (byte) 0xDF,(byte) 0x1F, (byte) 0xDD, (byte) 0x1D, (byte) 0x1C, (byte) 0xDC,(byte) 0x14, (byte) 0xD4, (byte) 0xD5, (byte) 0x15, (byte) 0xD7,(byte) 0x17, (byte) 0x16, (byte) 0xD6, (byte) 0xD2, (byte) 0x12,(byte) 0x13, (byte) 0xD3, (byte) 0x11, (byte) 0xD1, (byte) 0xD0,(byte) 0x10, (byte) 0xF0, (byte) 0x30, (byte) 0x31, (byte) 0xF1,(byte) 0x33, (byte) 0xF3, (byte) 0xF2, (byte) 0x32, (byte) 0x36,(byte) 0xF6, (byte) 0xF7, (byte) 0x37, (byte) 0xF5, (byte) 0x35,(byte) 0x34, (byte) 0xF4, (byte) 0x3C, (byte) 0xFC, (byte) 0xFD,(byte) 0x3D, (byte) 0xFF, (byte) 0x3F, (byte) 0x3E, (byte) 0xFE,(byte) 0xFA, (byte) 0x3A, (byte) 0x3B, (byte) 0xFB, (byte) 0x39,(byte) 0xF9, (byte) 0xF8, (byte) 0x38, (byte) 0x28, (byte) 0xE8,(byte) 0xE9, (byte) 0x29, (byte) 0xEB, (byte) 0x2B, (byte) 0x2A,(byte) 0xEA, (byte) 0xEE, (byte) 0x2E, (byte) 0x2F, (byte) 0xEF,(byte) 0x2D, (byte) 0xED, (byte) 0xEC, (byte) 0x2C, (byte) 0xE4,(byte) 0x24, (byte) 0x25, (byte) 0xE5, (byte) 0x27, (byte) 0xE7,(byte) 0xE6, (byte) 0x26, (byte) 0x22, (byte) 0xE2, (byte) 0xE3,(byte) 0x23, (byte) 0xE1, (byte) 0x21, (byte) 0x20, (byte) 0xE0,(byte) 0xA0, (byte) 0x60, (byte) 0x61, (byte) 0xA1, (byte) 0x63,(byte) 0xA3, (byte) 0xA2, (byte) 0x62, (byte) 0x66, (byte) 0xA6,(byte) 0xA7, (byte) 0x67, (byte) 0xA5, (byte) 0x65, (byte) 0x64,(byte) 0xA4, (byte) 0x6C, (byte) 0xAC, (byte) 0xAD, (byte) 0x6D,(byte) 0xAF, (byte) 0x6F, (byte) 0x6E, (byte) 0xAE, (byte) 0xAA,(byte) 0x6A, (byte) 0x6B, (byte) 0xAB, (byte) 0x69, (byte) 0xA9,(byte) 0xA8, (byte) 0x68, (byte) 0x78, (byte) 0xB8, (byte) 0xB9,(byte) 0x79, (byte) 0xBB, (byte) 0x7B, (byte) 0x7A, (byte) 0xBA,(byte) 0xBE, (byte) 0x7E, (byte) 0x7F, (byte) 0xBF, (byte) 0x7D,(byte) 0xBD, (byte) 0xBC, (byte) 0x7C, (byte) 0xB4, (byte) 0x74,(byte) 0x75, (byte) 0xB5, (byte) 0x77, (byte) 0xB7, (byte) 0xB6,(byte) 0x76, (byte) 0x72, (byte) 0xB2, (byte) 0xB3, (byte) 0x73,(byte) 0xB1, (byte) 0x71, (byte) 0x70, (byte) 0xB0, (byte) 0x50,(byte) 0x90, (byte) 0x91, (byte) 0x51, (byte) 0x93, (byte) 0x53,(byte) 0x52, (byte) 0x92, (byte) 0x96, (byte) 0x56, (byte) 0x57,(byte) 0x97, (byte) 0x55, (byte) 0x95, (byte) 0x94, (byte) 0x54,(byte) 0x9C, (byte) 0x5C, (byte) 0x5D, (byte) 0x9D, (byte) 0x5F,(byte) 0x9F, (byte) 0x9E, (byte) 0x5E, (byte) 0x5A, (byte) 0x9A,(byte) 0x9B, (byte) 0x5B, (byte) 0x99, (byte) 0x59, (byte) 0x58,(byte) 0x98, (byte) 0x88, (byte) 0x48, (byte) 0x49, (byte) 0x89,(byte) 0x4B, (byte) 0x8B, (byte) 0x8A, (byte) 0x4A, (byte) 0x4E,(byte) 0x8E, (byte) 0x8F, (byte) 0x4F, (byte) 0x8D, (byte) 0x4D,(byte) 0x4C, (byte) 0x8C, (byte) 0x44, (byte) 0x84, (byte) 0x85,(byte) 0x45, (byte) 0x87, (byte) 0x47, (byte) 0x46, (byte) 0x86,(byte) 0x82, (byte) 0x42, (byte) 0x43, (byte) 0x83, (byte) 0x41,(byte) 0x81, (byte) 0x80, (byte) 0x40 ;public int value;public CRC16() value = 0;public void update(byte puchMsg, int usDataLen) int uIndex;/ int i = 0;for (int i = 0; i usDataLen; i+) uIndex = (uchCRCHi puchMsgi) & 0xff;uchCRCHi = (byte) (uchCRCLo auchCRCHiuIndex);uchCRCLo = auchCRCLouIndex;value = (int) uchCRCHi) 8 | (int) uchCRCLo) & 0xff) & 0xffff;return;public void reset() value = 0;uchCRCHi = (byte) 0xff;uchCRCLo = (byte) 0xff;public int getValue() return value;private static byte uniteBytes(byte src0, byte src1) byte _b0 = Byte.decode(0x + new String(new byte src0 ).byteValue();_b0 = (byte) (_b0 4);byte _b1 = Byte.decode(0x + new String(new byte src1 ).byteValue();byte ret = (byte) (_b0 _b1);return ret;private static byte HexString2Buf(String src) int len = src.length();byte ret = new bytelen / 2+2;byte tmp = src.getBytes();for (int i = 0; i 8);return bb;public static boolean checkBuf(byte bb)CRC16 crc16 = new CRC16();crc16.update(bb, bb.length-2);int ri = crc16.getValue();if(bbbb.length-1=(byte)(ri&0xff) & bbbb.length-2=(byte) (0xff00 & ri) 8)return true;return false;public static String getBufHexStr(byte raw) if ( raw = null ) return null; final StringBuilder hex = new StringBuilder( 2 * raw.length ); for ( final byte b : raw ) hex.append(HEXES.charAt(b & 0xF0) 4) .append(HEXES.charAt(b & 0x0F); return hex.toString().toLowerCase();/* * 得到CRC验证 * param tt * return */public static String getCrc(String tem)/String tem=;/for(int i=0;itt.length;i+)/tem+=tti;/System.out.println(这是传入的值+tti);/byte sbuf = CRC16.getSendBuf(tem);System.out.println(这是得到的crc+CRC16.getBufHexStr(sbuf);return CRC16.getBufHexStr(sbuf).substring(12, 16).toLowerCase();/*得到要发送的数据 * param args */public static String getSendData(String tt) String tem=;for(int i=0;itt.length;i+)tem+=tti;byte sbuf = CRC16.getSendBuf(tem);return CRC16.getBufHexStr(sbuf);public static byte getSendBuf2(String tt)String tem=;for(int i=0;i 8);return bb;public static void main(String args) / TODO Auto-generated method stub/0103040a3d3fb739a1-sendB/010304b8523ffeef32-sendBbyte sbuf = CRC16.getSendBuf(0103040a3d3fb7);System.out.println(CRC16.getBufHexStr(sbuf); Test代码如下:package oldTest;import java.io.Flushable;import java.io.InputStream;import java.io.OutputStream;import java.util.Enumeration;import java.util.Random;import m.CommPortIdentifier;import m.SerialPort;public class Test static Enumeration portList;static CommPortIdentifier portId;static SerialPort serialPort;static OutputStream outputStream;static InputStream inputStream;static String nodeIdx=;static String crc=;public static StringBuffer open()throws Exception CommPortIdentifier commportidentifier = CommPortIdentifier.getPortIdentifier(COM1);serialPort = (SerialPort) commportidentifier.open(scy app, 80);outputStream = serialPort.getOutputStream();inputStream = serialPort.getInputStream();InputStream input = serialPort.getInputStream();while (true) StringBuffer content = new StringBuffer();int i = 0; String tag = ; String crcCode1 = ; String inputString = new String6; String crcCode2 = ; String tempString = ; serialPort.setInputBufferSize(8); while (i 8) if (i 6) tempString = Integer.toHexString(input.read();if (tempString.length() 2) tempString = 0 + tempString;inputStringi = tempString;/ inputString0;得到站点名称nodeIdx = inputString0;/ inputString2 + inputString3;得到检测指标tag = inputString2 + inputString3;content.append(tempString);System.out.println(=这是数据段+content); else if (i = 6) / 得到Crc值的前两位crcCode1 = Integer.toHexString(input.read();if (crcCode1.length() 2) crcCode1 = 0 + crcCode1;if (i = 7) / 得到Crc值的后两位crcCode2 = Integer.toHexString(input.read();if (crcCode2.length() 2) crcCode2 = 0 + crcCode2;crc=crcCode1+crcCode2;System.out.println(=这是crc+crc);i+;if (CRC16.getCrc(content.toString().equals(crc) / System.out.println(crcCode1 + crcCode2 + 得到的数据段正确/ + CRC16.getCrc(inputString);String nodeName = ;if (nodeIdx.equals(01) nodeName = 监测站点1;checkNode(tag, nodeName); else System.out.println(这也许是监测站点2的站点);nodeName = 监测站点2;checkNode(tag, nodeName); else System.out.println(crc + 得到的数据段不正确+ CRC16.getCrc(content.toString();public static void main(String args) try open(); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();public static void checkNode(String tag, String nodeName) if (tag.equals(012c) / System.out.println(这是说明要查悬浮物);sendData(nodeName, 悬浮物); else if (tag.equals(0064) / System.out.println(这是说明要查PH值);sendData(nodeName, PH值); else if (tag.equals(0b54) / System.out.println(这是说明要查氨氮);sendData(nodeName, 氨氮); else if (tag.equals(0d48) sendData(nodeName, 污水总量); else if (tag.equals(0000) sendData(nodeName, 污水总量); else if (tag.equals(01f4) sendData(nodeName, COD); else / System.out.println(tag + 这个tag不知道是啥);public static int getRandom(int min, int max) Random random = new Random();int s = random.nextInt(max) % (max - min + 1) + min;return s;public static int getRandomEnd() int max = 99;int min = 01;Random random = new Random();int s = random.nextInt(max) % (max - min + 1) + min;return s;public static float getFloatNum(int min, int max) return Float.valueOf(getRandom(min, max) + . + getRandomEnd();public static void sendData(String nodeName, String tagName) DB db = new DB();try Float ff = 0f;/ff = db.onSelect(nodeName, tagName);ff=getFloatNum(1,99);java.text.NumberFormat formater = java.text.DecimalFormat.getInstance();String totalTemp = new String7;if (nodeName.equals(检测站点1) totalTemp0 = 01;/ if(tagName.equals(COD)/ ff=15f;/ else/ ff=11f;/ else totalTemp0 = 02;formater.setMaximumFractionDigits(2);formater.setMinimumFractionDigits(2);ff = Float.valueOf(formater.format(ff);System.out.println(查询完毕, + tagName + 值为: + ff);int fi = Float.floatToRawIntBits(ff);String num = Integer.toHexString(fi).toString();if (!num.equals(0) totalTemp1 = 03;totalTemp2 = 04;totalTemp4 = num.substring(6, 8);totalTemp3 = num.substring(4, 6);totalTemp6 = num.substring(2, 4);totalTemp5 = num.substring(0, 2); else totalTemp1 = 03;totalTemp2 = 04;totalTemp4 = 00;totalTemp3 = 00;totalTemp6 = 00;totalTemp5 = 00;byte sendB = CRC16.getSendBuf2(totalTemp);outputStream.write(sendB);outputStream.flush();outputStream.close();System.out.println(发送完毕); catch (Exception e) e.printStackTrace(); finally db.close(); DB类如下:package oldTest;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Calendar;import java.util.Random;public class DB private Connection con;private Statement sta;private ResultSet res;private String driverName = com.microsoft.jdbc.sqlserver.SQLServerDriver; / 加载JDBC驱动private String dbURL = jdbc:sqlserver:/localhost:1433; DatabaseName=MonitoringSystem; / 连接服务器和数据库sampleprivate String userName = sa; / 默认用户名private String userPwd = ; / 密码public DB() try Class.forName(dri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年辽宁锦州水兴实业有限公司计划招录20人笔试备考试题及答案详解
- 2026年农业发展银行(河北省分行)校园招聘笔试参考题库及答案详解
- 2026陕西西安微电子技术研究所招聘笔试参考题库及答案详解
- 2026年泉州南安市特殊教育学校秋季招聘教职工若干人笔试备考题库及答案详解
- 2026年安徽科立华化工有限公司招聘19名笔试模拟试题及答案详解
- 法律事务委托协议2026版
- 2026新疆博润投资控股集团有限公司第一批面向社会招(竞)聘9人(补招)笔试备考试题及答案详解
- 2026年河南省驻马店市招聘乡村振兴村级协理员700人笔试备考试题及答案详解
- 南部县农业农村局遴选2026年农业技术指导员农业机械指导员笔试备考题库及答案详解
- 2026重庆市中医骨科医院第三批编外聘用人员招聘6人笔试模拟试题及答案详解
- 2025年高考历史一轮复习“近代中国革命史”核心考点梳理
- 处方书写规范培训课件
- 四川乐山市中区2025届高三下学期联合考试语文试题含解析
- 临床用血储备计划制度
- 2024年中国辅酶Q10胶囊行业投资分析、市场运行态势、未来前景预测报告
- 急救医疗管理系统(紫云)
- NB-T31111-2017风电机组高电压穿越测试规程
- 公园设施维修投标方案
- 2023年重庆市永川区社区工作者招聘考试真题
- 2023年湖北天门市事业单位招考聘用157人笔试题库含答案解析
- 中考古诗文必考篇目(50篇)
评论
0/150
提交评论