mdc-parent/mdc-collect/nativelib/focas/Fwlib32.dllBinary files differ
mdc-parent/mdc-collect/nativelib/focas/Fwlib64.dllBinary files differ
mdc-parent/mdc-collect/nativelib/focas/fwlibe1.dllBinary files differ
mdc-parent/mdc-collect/nativelib/focas/fwlibe64.dllBinary files differ
mdc-parent/mdc-collect/natives/focas/Fwlib32.dllBinary files differ
mdc-parent/mdc-collect/pom.xml
@@ -22,7 +22,7 @@ <jedis.version>3.1.0</jedis.version> <nekohtml.version>1.9.22</nekohtml.version> <commons-pool2.version>2.6.2</commons-pool2.version> <jna.version>5.4.0</jna.version> <jna.version>5.14.0</jna.version> <poi.version>4.1.2</poi.version> <poi-ooxml.version>4.1.2</poi-ooxml.version> <poi-ooxml-schemas.version>4.1.2</poi-ooxml-schemas.version> @@ -127,7 +127,7 @@ <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>5.4.0</version> <version>${jna.version}</version> </dependency> <dependency> <groupId>net.java.dev.jna</groupId> mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/domain/MachiningData.java
@@ -35,18 +35,33 @@ private Integer spindleSpeed; // @Column(name = "spindle_override") /** * 主轴åç */ private Integer spindleOverride; // @Column(name = "spindle_load") /** * 主轴è´è½½ */ private Integer spindleLoad; // @Column(name = "feedrate_override") /** * è¿ç»åç */ private Integer feedrateOverride; // @Column(name = "feed_rate") /** * è¿ç»ç */ private Integer feedRate; // @Column(name = "rapid_feed_override") /** * å¿«éè¿ç»åç G00çåç */ private Integer rapidFeedOverride; // @Column(name = "rapid_feed") @@ -65,6 +80,9 @@ private String alarmMsg; // @Column(name = "tool_no") /** * åå ·ç¼å· */ private Integer toolNo; // @Column(name = "tool_name") mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/FocasJavaClient.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,861 @@ package com.qianwen.mdc.service.focas; import java.io.UnsupportedEncodingException; import java.lang.reflect.Field; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alibaba.fastjson.JSONObject; import com.qianwen.mdc.service.focas.types.DBTLUSE; import com.qianwen.mdc.service.focas.types.IODBPMC0; import com.qianwen.mdc.service.focas.types.LOADELM; import com.qianwen.mdc.service.focas.types.ODBACT; import com.qianwen.mdc.service.focas.types.ODBALMMSG2; import com.qianwen.mdc.service.focas.types.ODBALMMSG2_data; import com.qianwen.mdc.service.focas.types.ODBEXAXISNAME; import com.qianwen.mdc.service.focas.types.ODBEXEPRG; import com.qianwen.mdc.service.focas.types.ODBPOS; import com.qianwen.mdc.service.focas.types.ODBPRO; import com.qianwen.mdc.service.focas.types.ODBPRO8; import com.qianwen.mdc.service.focas.types.ODBSPLOAD; import com.qianwen.mdc.service.focas.types.ODBST; import com.qianwen.mdc.service.focas.types.ODBSVLOAD; import com.qianwen.mdc.service.focas.types.ODBSYS; import com.qianwen.mdc.service.focas.types.ODBUSEGRP; import com.qianwen.mdc.service.focas.types.POSELMALL; import com.qianwen.mdc.utils.MdcException; import com.sun.jna.ptr.IntByReference; import com.sun.jna.ptr.ShortByReference; public class FocasJavaClient { private String ip; private short port; private short flibHndl;// 奿 private static final Logger logger = LoggerFactory.getLogger(FocasJavaClient.class); private int timeout = 10; private short axisNum = 0; private List<String> axisNames = null; private int count = 0; private boolean connected = false; public int connect() { ShortByReference fHndl = new ShortByReference(); short ret = JNAJavaFocas.Fwlib.cnc_allclibhndl3(this.ip, this.port, this.timeout, fHndl); if (ret == FocasRet.EW_OK) { // è¿æ¥æå this.count = 0; this.connected = true; this.flibHndl = fHndl.getValue(); } else if (ret == FocasRet.EW_SOCKET) { // è¿æ¥å¤±è´¥ int i = this.count + 1; this.count = i; if (i >= 3) { this.connected = false; } throw new MdcException(); } return ret; } /** * æå¼è¿æ¥ * * @return */ public int disconnect() { short ret = JNAJavaFocas.Fwlib.cnc_freelibhndl(this.flibHndl); if (ret == FocasRet.EW_OK) { this.connected = false; } return ret; } /** * 鿰龿¥æºåº * * @return */ public int reconnect() { int ret = 0; try { disconnect(); ret = connect(); } catch (Exception e) { } return ret; } /** * 读å设å¤åå·ï¼å¦ï¼ 160i-W , 180i-W * * @return */ public String readCncType() { ODBSYS sysInfo = new ODBSYS(); short ret = JNAJavaFocas.Fwlib.cnc_sysinfo(flibHndl, sysInfo); if (ret != FocasRet.EW_OK) { return ""; } // 32ï¼ 48 // String cncTypeNum = new String(new char[] {(char)sysInfo.cnc_type[0] , // (char)sysInfo.cnc_type[1]});//ç±»åç¼å· String cncTypeNum = byteArrToString(sysInfo.cnc_type); String cncType; switch (cncTypeNum) { case "15": cncType = "Series 15/15i"; break; case "16": cncType = "Series 16/16i"; break; case "18": cncType = "Series 18/18i"; break; case "21": cncType = "Series 21/21i"; break; case "30": cncType = "Series 30i"; break; case "31": cncType = "Series 31i"; break; case "32": cncType = "Series 32i"; break; case "35": cncType = "Series 35i"; break; case " 0": cncType = "Series 0i"; break; case "PD": cncType = "Power Mate i-D"; break; case "PH": cncType = "Power Mate i-H"; break; case "PM": cncType = "Power Motion i"; break; default: cncType = "å ¶å®ç±»å"; break; } return cncType; } /** * byteæ°ç»è½¬æ¢ä¸ºå符串 * * @param bytes * @return */ String byteArrToString(byte[] bytes) { if (bytes == null) { return null; } char[] charArr = new char[bytes.length]; int i = 0; while (i < bytes.length && bytes[i] != 0) { charArr[i] = (char) bytes[i]; i++; } return new String(charArr, 0, i); } String charArrToString(char[] charArr) { if (charArr == null) { return null; } int i = 0; while (charArr[i] != 0) { i++; } return new String(charArr, 0, i); } public String readAxisName() { ShortByReference rdnum = new ShortByReference((short)32);//æå¤§32个轴 ODBEXAXISNAME dataObj = new ODBEXAXISNAME(); short ret2 = JNAJavaFocas.Fwlib.cnc_exaxisname(this.flibHndl,(short)0,rdnum,dataObj); ArrayList<String> names = new ArrayList<>(); if(ret2 == FocasRet.EW_OK) { this.count = 0; this.connected = true; Class<ODBEXAXISNAME> clazz1 = ODBEXAXISNAME.class; for(int i=0;i<rdnum.getValue();i++) { try { Field f = clazz1.getField("axname"+(i+1)); byte[] anameB = (byte[])f.get(dataObj); names.add(byteArrToString(anameB)); } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { e.printStackTrace(); } } } String anames = StringUtils.join(names, ":"); return anames; } /** * 读åç¶æ * * @return */ public ODBST readState() { ODBST stateObj = new ODBST(); short ret = JNAJavaFocas.Fwlib.cnc_statinfo(this.flibHndl, stateObj); if (ret == FocasRet.EW_OK) { this.count = 0; this.connected = true; // System.out.println(stateObj); // jsonResult.put("alarmState", stateObj.alarm); // jsonResult.put("emergency", stateObj.emergency); // 以ä¸2个å¯ä»¥ç¡®å®äºåä¹ // jsonResult.put("opState", stateObj.aut);//è¿ä¸ªåºæ¬ok // jsonResult.put("ncState", stateObj.motion);//è¿ä¸ªä¸ç¡®å® } else if (ret == -16 || ret == -8) { int i = this.count + 1; this.count = i; if (i >= 3) { this.connected = false; } throw new MdcException(); } return stateObj; } /** * è¯»åæ¥è¦ä¿¡æ¯ * @param lang * @return */ public JSONObject readAlarm(String lang) { JSONObject jsonResult = new JSONObject(); ShortByReference num = new ShortByReference((short)10); ODBALMMSG2 almmsg = new ODBALMMSG2(); short ret = JNAJavaFocas.Fwlib.cnc_rdalmmsg2(this.flibHndl,(short)-1,num,almmsg); if (ret == 0) { this.count = 0; this.connected = true; int n = num.getValue(); if (n > 0) { ArrayList<Integer> alarmNoList = new ArrayList<>(); ArrayList<Short> alarmAxisList = new ArrayList<>(); ArrayList<Short> alarmTypeList = new ArrayList<>(); ArrayList<String> alarmTxtList = new ArrayList<>(); Class<ODBALMMSG2> clazz = ODBALMMSG2.class; for (int i = 0; i < n; i++) { Field f; try { f = clazz.getField("msg"+(i+1)); ODBALMMSG2_data d = (ODBALMMSG2_data)f.get(almmsg); alarmNoList.add(d.alm_no); alarmTypeList.add(d.type); alarmAxisList.add(d.axis); alarmTxtList.add(this.byteArrToString(d.alm_msg) ); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } try { String msg = StringUtils.join(alarmTxtList,":"); if (lang.equals("Shift_JIS") || lang.equals("GBK")) { jsonResult.put("alarmTxt", new String(msg.getBytes(), lang).trim()); } else { jsonResult.put("alarmTxt", new String(msg.getBytes(), StandardCharsets.UTF_8).trim()); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } else if (ret == -16 || ret == -8) { int i2 = this.count + 1; this.count = i2; if (i2 >= 3) { this.connected = false; } throw new MdcException(); } return jsonResult; } /** * 读å主轴åç * https://csharp.hotexamples.com/zh/examples/-/Focas1.IODBPMC0/-/php-focas1.iodbpmc0-class-examples.html * * @return */ public int readSpindleOverride() { int spindleOverride = 0; IODBPMC0 dataObj = new IODBPMC0(); short ret = JNAJavaFocas.Fwlib.pmc_rdpmcrng(this.flibHndl, (short) 0, (short) 0, (short) 30, (short) 30, (short) 16, dataObj);// æ´åæ¯è¯»ä¸»è½´åççåºå®åæ° if (ret == FocasRet.EW_OK) { this.count = 0; this.connected = true; spindleOverride = dataObj.cdata[0]; ; } else if (ret == -16 || ret == -8) { int i = this.count + 1; this.count = i; if (i >= 3) { this.connected = false; } throw new MdcException(); } return spindleOverride; } /** * 读å主轴è´è½½ readSpLoad * * @return */ public int readSpLoad() { int spLoad = 0; /* * ODBSPN dataObj = new ODBSPN(); short ret = * JNAJavaFocas.Fwlib.cnc_rdspload(this.flibHndl,Focas.ALL_SPINDLES, dataObj); */ ShortByReference data_num = new ShortByReference((short) 1); ODBSPLOAD dataObj = new ODBSPLOAD(); short ret = JNAJavaFocas.Fwlib.cnc_rdspmeter(this.flibHndl, (short) 0, data_num, dataObj); if (ret == FocasRet.EW_OK) { this.count = 0; this.connected = true; // sp.spload1.spload.data spLoad = dataObj.spload1.spload.data; } else if (ret == -16 || ret == -8) { int i = this.count + 1; this.count = i; if (i >= 3) { this.connected = false; } throw new MdcException(); } return spLoad; } /** * 读åCNC主轴ç转é * * @return */ public int readActs() { int actSpeed = 0; // IntByReference actSpeed = new IntByReference(); ODBACT dataObj = new ODBACT(); short ret = JNAJavaFocas.Fwlib.cnc_acts(this.flibHndl, dataObj); if (ret == FocasRet.EW_OK) { this.count = 0; this.connected = true; actSpeed = dataObj.data; } else if (ret == -16 || ret == -8) { int i = this.count + 1; this.count = i; if (i >= 3) { this.connected = false; } throw new MdcException(); } return actSpeed; } /** * è¯»åææä¼ºæè½´è´è½½ï¼åå·åå² * @return */ public String readAxisServoload() { ShortByReference data_num = new ShortByReference((short)32); ODBSVLOAD dataObj = new ODBSVLOAD(); short ret = JNAJavaFocas.Fwlib.cnc_rdsvmeter(this.flibHndl,data_num,dataObj); ArrayList<Integer> loads = new ArrayList<>(); if (ret == 0) { this.count = 0; this.connected = true; Class<ODBSVLOAD> clazz = ODBSVLOAD.class; for (int i = 0; i < data_num.getValue(); i++) { Field f; try { f = clazz.getField("svload"+(i+1)); LOADELM loadelm = (LOADELM)f.get(dataObj); loads.add(loadelm.data); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } else if (ret == -16 || ret == -8) { int i2 = this.count + 1; this.count = i2; if (i2 >= 3) { this.connected = false; } throw new MdcException(); } return StringUtils.join(loads,":"); } /** * 读åè¿ç»åç * * @return */ public int readFeedRateOverride() { int feedRateResult = 0; IODBPMC0 dataObj = new IODBPMC0(); // https://csharp.hotexamples.com/zh/examples/-/Focas1.IODBPMC0/-/php-focas1.iodbpmc0-class-examples.html short ret = JNAJavaFocas.Fwlib.pmc_rdpmcrng(this.flibHndl, (short) 0, (short) 0, (short) 12, (short) 12, (short) 9, dataObj); if (ret == FocasRet.EW_OK) { // FeedOverRide = (100 - (dataObj.cdata[0] - 155)).ToString();//è¿ç»åç è½¬æ¢æç¾åæ¯ // 为ä»ä¹æ¯155没ææï¼è®¾å¤ä¸åä¹å¯è½ä¸æ¯155 // this.txtFeedOverRide.Text = FeedOverRide.ToString(); } if (ret == FocasRet.EW_OK) { this.count = 0; this.connected = true; feedRateResult = dataObj.cdata[0]; } else if (ret == -16 || ret == -8) { int i = this.count + 1; this.count = i; if (i >= 3) { this.connected = false; } throw new MdcException(); } return feedRateResult; } /** * 读åå®é è¿ç»åç * * @return */ public int readActf() { int actFeedRate = 0; ODBACT dataObj = new ODBACT(); short ret = JNAJavaFocas.Fwlib.cnc_actf(this.flibHndl, dataObj); if (ret == FocasRet.EW_OK) { this.count = 0; this.connected = true; actFeedRate = dataObj.data; } else if (ret == -16 || ret == -8) { int i = this.count + 1; this.count = i; if (i >= 3) { this.connected = false; } throw new MdcException(); } return actFeedRate; } /** * 读åå¿«éåçï¼ï¼ï¼è¿ä¸ªæ²¡æ¾å°èµæï¼ä»¥åç¨åºä¹æ²¡æä½¿ç¨ * * @return */ /* * public int readRapidRate() { int rapidRateResult = 0; IntByReference * rapidRate = new IntByReference(); short ret = * JNAFocas.XX.readRapidRate(this.flibHndl, rapidRate); if (ret == 0) { * this.count = 0; this.connected = true; rapidRateResult = * rapidRate.getValue(); } else if (ret == -16 || ret == -8) { int i = * this.count + 1; this.count = i; if (i >= 3) { this.connected = false; } throw * new MdcException(); } return rapidRateResult; } */ /** * æ¯å¦æ¯ONO8d(峿¯å¦Series 15i, 16/18/21, 16i/18i/21i, 0i, 30i, Power Mate i)) * * @return */ boolean isONO8D() { //TODO è¿ä¸ªæ¯å¦éè¦åççï¼ String cncType = this.readCncType(); return cncType.contains("15i") || cncType.contains("16") || cncType.contains("18"); } /** * 读åç¨åºç¼å·ï¼å æ¬å½åç¨åºç¼å·å主ç¨åºç¼å· * * @return ç¼å· */ public int readPrgNo() { int prgNo = -1; short ret = -1; boolean isOno8D = this.isONO8D(); ODBPRO8 dataObj8 = new ODBPRO8(); ODBPRO dataObj = new ODBPRO(); //isOno8D = true; if(isOno8D) { ret = JNAJavaFocas.Fwlib.cnc_rdprgnumo8(this.flibHndl, dataObj8); }else { ret = JNAJavaFocas.Fwlib.cnc_rdprgnum(this.flibHndl, dataObj); } if (ret == FocasRet.EW_OK) { this.count = 0; this.connected = true; if(isOno8D) { prgNo = dataObj8.data; }else { prgNo = dataObj.data; } } else if (ret == -16 || ret == -8) { int i = this.count + 1; this.count = i; if (i >= 3) { this.connected = false; } throw new MdcException(); } return prgNo; } /** * æåï¼m00ç¨åºæåï¼m01éæ©æ§æå wb * * @return */ public boolean isM00M01() { IntByReference state = new IntByReference(); short ret = JNAFocas.HxFocas.readM00M01State(this.flibHndl, state); if (ret == 0) { this.count = 0; this.connected = true; if (state.getValue() == 1) { return true; } return false; } else if (ret == -16 || ret == -8) { int i = this.count + 1; this.count = i; if (i >= 3) { this.connected = false; } throw new MdcException(); } else { return false; } } public boolean isPrgReady() { IntByReference state = new IntByReference(); short ret = JNAFocas.HxFocas.readPrgReadyState(this.flibHndl, state); if (ret == 0) { this.count = 0; this.connected = true; if (state.getValue() == 1) { return true; } return false; } else if (ret == -16 || ret == -8) { int i = this.count + 1; this.count = i; if (i >= 3) { this.connected = false; } throw new MdcException(); } else { return false; } } /** * è¯»åæ£å¨æ§è¡çç¨åºåç§° * * @param prgNo * @return */ public String readExePrgName() { String realPrgName = null; ODBEXEPRG dataObj = new ODBEXEPRG(); // TODO æé®é¢ï¼æ²¡ææç §ç¼å·è·å // short ret = JNAJavaFocas.Fwlib.cnc_rdproginfo(this.flibHndl, // (short)1,(short)31, dataObj); short ret = JNAJavaFocas.Fwlib.cnc_exeprgname(this.flibHndl, dataObj); if (ret == 0) { this.count = 0; this.connected = true; realPrgName = this.byteArrToString(dataObj.name); // new String(prgName).trim(); int len = realPrgName.length(); if (len >= 2) { realPrgName = realPrgName.substring(1, len - 1); } } else if (ret == -16 || ret == -8) { int i = this.count + 1; this.count = i; if (i >= 3) { this.connected = false; } throw new MdcException(); } return realPrgName; } /** * 读åå个轴çä½ç½®ä¿¡æ¯ * @return */ public JSONObject readPosition() { JSONObject jsonResult = new JSONObject(); final short type = -1; ShortByReference data_num = new ShortByReference((short)32); //æå¤§ç轴个æ°ï¼æå¤32ï¼è°ç¨åä¼è¿åå®é æ° ODBPOS dataObj = new ODBPOS(); short ret = JNAJavaFocas.Fwlib.cnc_rdposition(this.flibHndl,type,data_num,dataObj); //cnc_rdposition if (ret == FocasRet.EW_OK) { this.count = 0; this.connected = true; short num = data_num.getValue(); //absoluteSb.append(dataObj.p1.abs.data); ArrayList<Integer> absArr = new ArrayList<>(); ArrayList<Integer> abs2Arr = new ArrayList<>(); ArrayList<Integer> relArr = new ArrayList<>(); ArrayList<Integer> machArr = new ArrayList<>(); ArrayList<Integer> distArr = new ArrayList<>(); Class<ODBPOS> clazz1 = ODBPOS.class; //Class<POSELMALL> poselmallClazz = POSELMALL.class; for (short i = 0; i < num; i++) { //absArr.add(dataObj.p1.abs.data); try { Field f = clazz1.getField("p"+(i+1)); POSELMALL posm = (POSELMALL) f.get(dataObj); absArr.add(posm.abs.data); relArr.add(posm.rel.data); machArr.add(posm.mach.data); distArr.add(posm.dist.data); } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /* absoluteSb.setLength(absoluteSb.length() - 1); relativeSb.setLength(relativeSb.length() - 1); machineSb.setLength(machineSb.length() - 1); distanceSb.setLength(distanceSb.length() - 1); jsonResult.put("absolute", absoluteSb.toString()); jsonResult.put("relative", relativeSb.toString()); jsonResult.put("machine", machineSb.toString()); jsonResult.put("distance", distanceSb.toString()); */ jsonResult.put("absolute",StringUtils.join(absArr,":")); jsonResult.put("relative", StringUtils.join(relArr,":")); jsonResult.put("machine", StringUtils.join(machArr,":")); jsonResult.put("distance", StringUtils.join(distArr,":")); } else if (ret == -16 || ret == -8) { int i2 = this.count + 1; this.count = i2; if (i2 >= 3) { this.connected = false; } throw new MdcException(); } return jsonResult; } /** * 读åå½ååå ·ç¼å· * * @return */ public Integer readCurToolNo() { Integer toolNo = null; //short ret = JNAFocas.xx.readCurToolNo(this.flibHndl, toolNum); ODBUSEGRP grpDataObj = new ODBUSEGRP(); short ret = JNAJavaFocas.Fwlib.cnc_rdtlusegrp(this.flibHndl,grpDataObj); if (ret == FocasRet.EW_OK) { this.count = 0; this.connected = true; //grpDataObj.use //toolNumResult = String.valueOf(toolNum.getValue()); DBTLUSE tlDataObj = new DBTLUSE(); short toolRet = JNAJavaFocas.Fwlib.cnc_rdusetlno(this.flibHndl,(short)grpDataObj.use,(short)grpDataObj.use,(short)1,tlDataObj); if(toolRet == FocasRet.EW_OK) { toolNo = tlDataObj.data[0]; } } else if (ret == -16 || ret == -8) { int i = this.count + 1; this.count = i; if (i >= 3) { this.connected = false; } throw new MdcException(); } return toolNo; } public String getIp() { return this.ip; } public void setIp(String ip) { this.ip = ip; } public short getPort() { return this.port; } public void setPort(short port) { this.port = port; } public int getTimeout() { return this.timeout; } public void setTimeout(int timeout) { this.timeout = timeout; } public boolean isConnected() { return this.connected; } } /** * focasè¿åå¼ */ class FocasRet { /** * protocol error -17 * */ public static short EW_PROTOCOL = -17; /** * Windows socket error -16 * */ public static short EW_SOCKET = (-16); /** * DLL not exist error -15 */ //public static short EW_NODLL = (-15); /* */ //public static short EW_BUS = (-11); /* bus error */ //public static short EW_SYSTEM2 = (-10); /* system error */ //public static short EW_HSSB = (-9); /* hssb communication error */ /** * Windows library handle error -8 */ public static short EW_HANDLE = (-8); /* */ //public static short EW_VERSION = (-7); /* CNC/PMC version missmatch */ //public static short EW_UNEXP = (-6); /* abnormal error */ //public static short EW_SYSTEM = (-5); /* system error */ //public static short EW_PARITY = (-4); /* shared RAM parity error */ ///public static short EW_MMCSYS = (-3); /* emm386 or mmcsys install error */ //public static short EW_RESET = (-2); /* reset or stop occured error */ //public static short EW_BUSY = (-1); /* busy error */ /** * no problem (0) */ public static short EW_OK = 0; /** * command prepare error (1) */ //以ä¸ç¨ä¸å°ææ¶æ³¨éäº //public static short EW_FUNC = 1; /*public static short EW_NOPMC = 1; pmc not exist public static short EW_LENGTH = 2; data block length error public static short EW_NUMBER = 3; data number error public static short EW_RANGE = 3; address range error public static short EW_ATTRIB = 4; data attribute error public static short EW_TYPE = 4; data type error public static short EW_DATA = 5; data error */ /** * no option error 6 */ public static short EW_NOOPT = 6; /* public static short EW_PROT = 7; write protect error public static short EW_OVRFLOW = 8; memory overflow error public static short EW_PARAM = 9; cnc parameter not correct error public static short EW_BUFFER = 10; buffer error public static short EW_PATH = 11; path error public static short EW_MODE = 12; cnc mode error public static short EW_REJECT = 13; execution rejected error public static short EW_DTSRVR = 14; data server error public static short EW_ALARM = 15; alarm has been occurred public static short EW_STOP = 16; CNC is not running public static short EW_PASSWD = 17; protection data error * Result codes of DNC operation public static short DNC_NORMAL = (-1); normal completed public static short DNC_CANCEL = (-32768); DNC operation was canceled by CNC public static short DNC_OPENERR = (-514); file open error public static short DNC_NOFILE = (-516); file not found public static short DNC_READERR = (-517);*/ /* read error */ } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/FocasThread.java
@@ -96,6 +96,7 @@ this.mdcData.setAxisAbsolute(jsonPosition.getString("distance")); this.mdcData.setAxisServoloads(this.focasClient.readAxisServoload()); this.mdcData.setToolName(this.focasClient.readCurToolNo()); //mdcData.setToolNo(null); this.mdcData.setSpindleLoad(Integer.valueOf((int) this.focasClient.readSpLoad())); this.mdcData.setSpindleOverride(Integer.valueOf(this.focasClient.readSpRate())); int acts = this.focasClient.readActs(); mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/JNAFocas.java
@@ -9,6 +9,7 @@ public interface JNAFocas extends Library { public static final ApplicationHome ah = new ApplicationHome(JNAFocas.class); public static final String dllPath = ah.getSource().getParentFile().toString() + "\\lib\\focas\\"; //public static final String dllPath = "D:\\focas\\"; //public static final String dllPath = "lib\\focas\\"; public static final JNAFocas HxFocas = (JNAFocas) Native.load(dllPath + "HxFocasApi", JNAFocas.class); public static final JNAFocas Fwlib32 = (JNAFocas) Native.load(dllPath + "Fwlib32", JNAFocas.class); mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/JNAJavaFocas.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,208 @@ package com.qianwen.mdc.service.focas; import com.qianwen.mdc.service.focas.types.DBTLUSE; import com.qianwen.mdc.service.focas.types.IODBPMC0; import com.qianwen.mdc.service.focas.types.ODBACT; import com.qianwen.mdc.service.focas.types.ODBALMMSG2; import com.qianwen.mdc.service.focas.types.ODBEXAXISNAME; import com.qianwen.mdc.service.focas.types.ODBEXEPRG; import com.qianwen.mdc.service.focas.types.ODBPOS; import com.qianwen.mdc.service.focas.types.ODBPRO; import com.qianwen.mdc.service.focas.types.ODBPRO8; import com.qianwen.mdc.service.focas.types.ODBSPLOAD; import com.qianwen.mdc.service.focas.types.ODBSPN; import com.qianwen.mdc.service.focas.types.ODBST; import com.qianwen.mdc.service.focas.types.ODBSVLOAD; import com.qianwen.mdc.service.focas.types.ODBSYS; import com.qianwen.mdc.service.focas.types.ODBUSEGRP; import com.qianwen.mdc.utils.LibraryLoadHelper; import com.sun.jna.Library; import com.sun.jna.ptr.ShortByReference; public interface JNAJavaFocas extends Library { public static final String dllPath = "D:\\focas\\"; //public static final JNAJavaFocas Fwlib = (JNAJavaFocas) LibraryLoadHelper.(dllPath + "Fwlib32", JNAJavaFocas.class); public static final JNAJavaFocas Fwlib = (JNAJavaFocas) LibraryLoadHelper.loadNative("Fwlib"+System.getProperty("sun.arch.data.model"),"focas", JNAJavaFocas.class); static final JNAJavaFocas Fwlibe1 = (JNAJavaFocas) LibraryLoadHelper.loadNative("fwlibe"+("64".equals(System.getProperty("sun.arch.data.model"))?"64":"1"),"focas", JNAJavaFocas.class); /** * 龿¥ * @param ipAddr * @param port * @param timeout * @param flibHndl * @return */ short cnc_allclibhndl3(String ipAddr, short port, int timeout, ShortByReference flibHndl); /** * æå¼ * @param handle * @return */ short cnc_freelibhndl(short handle); /** * 读åç³»ç»ä¿¡æ¯ * @param handle è¿æ¥å¥æ * @param odbsys æ°æ®åä¼ å¯¹è±¡ * @return */ short cnc_sysinfo(short handle, ODBSYS odbsys); /** * 设å¤ç¶æå工使¨¡å¼ * @param handle è¿æ¥å¥æ * @param stateObj æ°æ®åä¼ å¯¹è±¡ * @return */ short cnc_statinfo(short handle, ODBST stateObj); /** * * @param handle * @param adr_type å°åç±»å * @param data_type æ°æ®ç±»å * @param s_number PMCå°åèµ·å§å· * @param e_number PMCå°åç»æå· * @param length è®¾å®æ°æ®é¿åº¦ * @param dataObj æ°æ®è¿å对象 * @return */ short pmc_rdpmcrng(short handle, short adr_type, short data_type, short s_number, short e_number, short length,IODBPMC0 dataObj); /** * read actual spindle speed(S) å®é 主轴é度 ,dataObj.data为é度 * @param handle * @param dataObj * @return */ short cnc_acts(short handle, ODBACT dataObj); /** * * @param FlibHndl * @param sp_no ä¸»è½´å· * @param dataObj * @return */ @Deprecated short cnc_rdspload(short FlibHndl, short sp_no, ODBSPN dataObj); /** * * @param FlibHndl library handle * @param type Specify the data type. 0 spindle load meter data ; 1:spindle motor speed data; -1:all type * @param data_num Specify the pointer to the number of data to be read. This function returns the number of data which was read actually. * @param loadmeter * @return */ public short cnc_rdspmeter(short FlibHndl, short type, ShortByReference data_num,ODBSPLOAD loadmeter); /** * 读CNC伺æè½´çå®é è¿ç»åçï¼å¹¶å°å ¶åå¨å°âOBDACTâä¸çâdataâ * @param FlibHndl * @param dataObj * @return */ public short cnc_actf(short FlibHndl, ODBACT dataObj); /** * 读åç¨åºç¼å· é¤ Series 15i, 16/18 å¤çå ¶ä»ç³»å * @param FlibHndl * @param dataObj æ°æ®è¿å对象 * @return */ public short cnc_rdprgnum(short FlibHndl,ODBPRO dataObj); /** * 读åç¨åºç¼å·ONO8D Series 15i, 16/18 ç³»å * @param FlibHndl * @param dataObj æ°æ®è¿å对象 * @return */ public short cnc_rdprgnumo8(short FlibHndl,ODBPRO8 dataObj); /** * * @param FlibHndl * @param type ç±»å [ in ] 设置è¾åºæ ¼å¼ï¼0 : binary;1 : ASCII * @param length é¿åº¦ [ in ] 12 : binary 31 : ASCII * @param dataObj è¿åæ°æ®ç对象å¼ç¨ * @return */ // public short cnc_rdproginfo(short FlibHndl, short type, short length,ODBNC_2 dataObj); /** * 读æ£å¨è¿è¡çç¨åºä¿¡æ¯ * @param FlibHndl * @param dataObj * @return */ public short cnc_exeprgname(short FlibHndl, ODBEXEPRG dataObj); /** * 读åç§åç»å· ,æ£å¨ä½¿ç¨ï¼å½åéæ©ç * @param FlibHndl * @param dataObj * @return */ public short cnc_rdtlusegrp(short FlibHndl, ODBUSEGRP dataObj); /** * 读åºç¹å®åç»ä¸æ£å¨ä½¿ç¨çåå ·çåå ·ä½¿ç¨é¡ºåºå·ã峿¾ç¤ºç¶æå¤å¨âå¯ç¨ï¼ä½¿ç¨ä¸ï¼âçåå ·ç使ç¨é¡ºåºå· * @param FlibHndl * @param s_grp å¼å§ç»å· * @param e_grp ç»æç»å· * @param length é¿åº¦ï¼ODBTLUSEç±»ç大å°ï¼ * @param dataObj æ°æ®è¿å对象 * @return */ public short cnc_rdusetlno(short FlibHndl, short s_grp, short e_grp, short length, DBTLUSE dataObj); /** * * @param FlibHndl * @param type Specify the data type. 0 : absolute position 1 : machine position 2 : relative position 3 : distance to go -1 : all type * @param data_num Specify the pointer to the number of data to be read. This function returns the number of data which was read actually. * @param dataObj è¿åæ°æ®å¯¹è±¡ * @return */ public short cnc_rdposition(short FlibHndl, short type, ShortByReference data_num,ODBPOS dataObj); /** * 读伺æã主轴å * @param FlibHndl * @param type type ,0:Controlled axis name; 1:Spindle name * @param num in & outï¼ æå®è¯»åæ°é/å®é è¯»åæ°é * @param dataObj æ°æ®è¿å对象 * @return */ public short cnc_exaxisname(short FlibHndl,short type,ShortByReference num, ODBEXAXISNAME dataObj); /** * * @param FlibHndl * @param data_num æ°æ®ä¸ªæ°inæå¤ï¼out å®é ä¸ªæ° * @param dataObj æ°æ®å¯¹è±¡ * @return */ public short cnc_rdsvmeter(short FlibHndl,ShortByReference data_num,ODBSVLOAD dataObj); /** * * @param FlibHndl * @param type -1å ¨é¨ï¼å ¶ä»ï¼https://www.inventcom.net/fanuc-focas-library/misc/cnc_rdalmmsg2 * @param num æ»æ°æå¤§ * @param almmsg * @return */ public short cnc_rdalmmsg2(short FlibHndl,short type, ShortByReference num, ODBALMMSG2 almmsg); // short connectServer(String ipAddr, short port, int timeout, ShortByReference flibHndl); // short disconnectServer(short flibHndl); } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/DBTLUSE.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; public class DBTLUSE extends Structure{ /** * æ¶å */ public static class ByReference extends DBTLUSE implements Structure.ByReference { } public static class ByValue extends DBTLUSE implements Structure.ByValue { } public DBTLUSE() { data = new int[5]; } public short s_grp; /* start group number */ public short dummy; /* dummy */ public short e_grp; /* end group number */ //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)] public int[] data; @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "s_grp", "dummy", "e_grp", "data"}); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/Focas.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,10 @@ package com.qianwen.mdc.service.focas.types; /** * 常éå®ä¹ */ public class Focas { public static final short ALL_AXES = -1; public static final short ALL_SPINDLES = -1; } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/IODBPMC0.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,39 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; public class IODBPMC0 extends Structure{ /** * æ¶å */ public static class ByReference extends IODBPMC0 implements Structure.ByReference { } public static class ByValue extends IODBPMC0 implements Structure.ByValue { } public IODBPMC0() { cdata = new byte[5]; } //[FieldOffset(0)] public short type_a; /* PMC address type */ //[FieldOffset(2)] public short type_d; /* PMC data type */ //[FieldOffset(4)] public short datano_s; /* start PMC address */ //[FieldOffset(6)] public short datano_e; /* end PMC address */ // [FieldOffset(8), //MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)] public byte[] cdata; /* PMC data */ /* In case that the number of data is 5 */ @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "type_a", "type_d", "datano_s", "datano_e", "cdata"}); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/LOADELM.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; public class LOADELM extends Structure{ public int data; /* load meter */ public short dec; /* decimal position */ public short unit; /* unit */ public byte name; /* name of data */ public byte suff1; /* suffix */ public byte suff2; /* suffix */ public byte reserve; /* reserve */ public static class ByReference extends LOADELM implements Structure.ByReference { } public static class ByValue extends LOADELM implements Structure.ByValue { } @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "data", "dec", "unit", "name", "suff1", "suff2", "reserve"}); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/ODBACT.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; /* cnc_actf:read actual axis feedrate(F) */ /* cnc_acts:read actual spindle speed(S) */ public class ODBACT extends Structure{ /** * æ¶å */ public static class ByReference extends ODBACT implements Structure.ByReference { } public static class ByValue extends ODBACT implements Structure.ByValue { } public ODBACT() { dummy = new short[2]; } //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public short[] dummy; /* dummy */ public int data; /* actual feed / actual spindle */ @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "dummy", "data" }); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/ODBALMMSG2.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; public class ODBALMMSG2 extends Structure{ /* * æ¶å */ public static class ByReference extends ODBALMMSG2 implements Structure.ByReference { } public static class ByValue extends ODBALMMSG2 implements Structure.ByValue { } public ODBALMMSG2_data msg1 = new ODBALMMSG2_data(); public ODBALMMSG2_data msg2 = new ODBALMMSG2_data(); public ODBALMMSG2_data msg3 = new ODBALMMSG2_data(); public ODBALMMSG2_data msg4 = new ODBALMMSG2_data(); public ODBALMMSG2_data msg5 = new ODBALMMSG2_data(); public ODBALMMSG2_data msg6 = new ODBALMMSG2_data(); public ODBALMMSG2_data msg7 = new ODBALMMSG2_data(); public ODBALMMSG2_data msg8 = new ODBALMMSG2_data(); public ODBALMMSG2_data msg9 = new ODBALMMSG2_data(); public ODBALMMSG2_data msg10 = new ODBALMMSG2_data(); @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "msg1", "msg2", "msg3", "msg4", "msg5", "msg6", "msg7", "msg8", "msg9", "msg10" }); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/ODBALMMSG2_data.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,31 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; public class ODBALMMSG2_data extends Structure{ /** * æ¶å */ public static class ByReference extends ODBACT implements Structure.ByReference { } public static class ByValue extends ODBACT implements Structure.ByValue { } public int alm_no; public short type; public short axis; public short dummy; public short msg_len; //[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] public byte[] alm_msg = new byte[64]; @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "alm_no", "type", "axis" , "dummy" , "msg_len" , "alm_msg" }); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/ODBEXAXISNAME.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,92 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; /** * 读伺æã主轴åçè¿åç»æ */ public class ODBEXAXISNAME extends Structure{ /* * æ¶å */ public static class ByReference extends ODBEXAXISNAME implements Structure.ByReference { } public static class ByValue extends ODBEXAXISNAME implements Structure.ByValue { } public ODBEXAXISNAME() { //dummy = new short[2]; } public byte[] axname1 = new byte[4]; public byte[] axname2 = new byte[4]; public String axname3 = new String(); public String axname4 = new String(); public String axname5 = new String(); public String axname6 = new String(); public String axname7 = new String(); public String axname8 = new String(); public String axname9 = new String(); public String axname10 = new String(); public String axname11 = new String(); public String axname12 = new String(); public String axname13 = new String(); public String axname14 = new String(); public String axname15 = new String(); public String axname16 = new String(); public String axname17 = new String(); public String axname18 = new String(); public String axname19 = new String(); public String axname20 = new String(); public String axname21 = new String(); public String axname22 = new String(); public String axname23 = new String(); public String axname24 = new String(); public String axname25 = new String(); public String axname26 = new String(); public String axname27 = new String(); public String axname28 = new String(); public String axname29 = new String(); public String axname30 = new String(); public String axname31 = new String(); public String axname32 = new String(); @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "axname1", "axname2", "axname3", "axname4", "axname5", "axname6", "axname7", "axname8", "axname9", "axname10", "axname11", "axname12", "axname13", "axname14", "axname15", "axname16", "axname17", "axname18", "axname19", "axname20", "axname21", "axname22", "axname23", "axname24", "axname25", "axname26", "axname27", "axname28", "axname29", "axname30", "axname31", "axname32" }); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/ODBEXEPRG.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,33 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; /** * å½åæ§è¡ç¨åºçä¿¡æ¯è¿å对象 */ public class ODBEXEPRG extends Structure { /** * æ¶å */ public static class ByReference extends ODBEXEPRG implements Structure.ByReference { } public static class ByValue extends ODBEXEPRG implements Structure.ByValue { } public ODBEXEPRG() { name = new byte[36]; } // [MarshalAs(UnmanagedType.ByValArray, SizeConst = 36)] public byte[] name; /* running program name */ public int o_num; /* running program number */ @Override protected List<String> getFieldOrder() { return Arrays.asList(new String[] { "name", "o_num" }); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/ODBNC_2.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,35 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; /** * 读ç¨åºä¿¡æ¯ */ public class ODBNC_2 extends Structure{ /** * æ¶å */ public static class ByReference extends ODBNC_2 implements Structure.ByReference { } public static class ByValue extends ODBNC_2 implements Structure.ByValue { } public ODBNC_2() { asc = new byte[31]; //asc = new char[31]; } //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 31)] public byte[] asc; /* ASCII string type */ @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "asc"}); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/ODBPOS.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,52 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; /** * ä½ç½®ä¿¡æ¯è¿åç»æ */ public class ODBPOS extends Structure{ /** * æ¶å */ public static class ByReference extends ODBPOS implements Structure.ByReference { } public static class ByValue extends ODBPOS implements Structure.ByValue { } public POSELMALL p1=new POSELMALL(); public POSELMALL p2=new POSELMALL(); public POSELMALL p3=new POSELMALL(); public POSELMALL p4=new POSELMALL(); public POSELMALL p5=new POSELMALL(); public POSELMALL p6=new POSELMALL(); public POSELMALL p7=new POSELMALL(); public POSELMALL p8=new POSELMALL(); public POSELMALL p9=new POSELMALL(); public POSELMALL p10=new POSELMALL(); public POSELMALL p11=new POSELMALL(); public POSELMALL p12=new POSELMALL(); public POSELMALL p13=new POSELMALL(); public POSELMALL p14=new POSELMALL(); public POSELMALL p15=new POSELMALL(); public POSELMALL p16=new POSELMALL(); public POSELMALL p17=new POSELMALL(); public POSELMALL p18=new POSELMALL(); public POSELMALL p19=new POSELMALL(); public POSELMALL p20=new POSELMALL(); public POSELMALL p21=new POSELMALL(); public POSELMALL p22=new POSELMALL(); public POSELMALL p23=new POSELMALL(); public POSELMALL p24=new POSELMALL(); @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "p1","p2","p3","p4","p5","p6","p7","p8","p9","p10","p11","p12","p13","p14","p15","p16","p17","p18","p19","p20","p21","p22","p23","p24"}); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/ODBPRO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,41 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; /** * cnc_rdprgnum:read program number under execution * APIææ¡£ï¼ONO8D=falseï¼æ²¡æå®ä¹ï¼ æè ONO8D=0ï¼ææä¸ºï¼ä¸æ¯ Series 15i, 16/18åå·ãdata,mdataå°±æ¯4ä½ï¼å®ä¹ä¸ºshortç±»å; * å¦åå°±æ¯ONO8D=trueæè 1ï¼data,mdataå®ä¹ä¸ºint,ï¼æ¬ç±»æ¯4ä½ï¼8使°æ®ä½¿ç¨ODBPRO8 * */ public class ODBPRO extends Structure{ /** * æ¶å */ public static class ByReference extends ODBPRO implements Structure.ByReference { } public static class ByValue extends ODBPRO implements Structure.ByValue { } public ODBPRO() { dummy = new short[2]; } //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public short[] dummy; /** * running program numberï¼åç¨åºç¼å·ï¼æ²¡æåç¨åºæ¶å主ç¨åºç¼å·ç¸å */ public short data; /** * main program numberï¼ä¸»ç¨åºç¼å· */ public short mdata; @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "dummy", "data","mdata" }); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/ODBPRO8.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,41 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; /** * cnc_rdprgnum:read program number under execution * APIææ¡£ï¼ONO8D=falseï¼æ²¡æå®ä¹ï¼ æè ONO8D=0ï¼ææä¸ºï¼ä¸æ¯ Series 15i, 16/18åå·ãdata,mdataå°±æ¯4ä½ï¼å®ä¹ä¸ºshortç±»å; * å¦åå°±æ¯ONO8D=trueæè 1ï¼data,mdataå®ä¹ä¸ºint,ï¼æ¬ç±»æ¯8ä½ï¼4使°æ®ä½¿ç¨ODBPRO * */ public class ODBPRO8 extends Structure{ /** * æ¶å */ public static class ByReference extends ODBPRO8 implements Structure.ByReference { } public static class ByValue extends ODBPRO8 implements Structure.ByValue { } public ODBPRO8() { dummy = new short[2]; } //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public short[] dummy; /** * running program numberï¼åç¨åºç¼å·ï¼æ²¡æåç¨åºæ¶å主ç¨åºç¼å·ç¸å */ public int data; /** * main program numberï¼ä¸»ç¨åºç¼å· */ public int mdata; @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "dummy", "data","mdata" }); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/ODBSPLOAD.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; /** * 读主轴è´è½½ï¼ï¼ï¼,åºè¯¥æ¯è¿ä¸ª */ public class ODBSPLOAD extends Structure{ /** * æ¶å */ public static class ByReference extends ODBSPLOAD implements Structure.ByReference { } public static class ByValue extends ODBSPLOAD implements Structure.ByValue { } public ODBSPLOAD() { spload1 = new ODBSPLOAD_data(); /* spindle load */ spload2 = new ODBSPLOAD_data(); /* spindle load */ spload3 = new ODBSPLOAD_data(); /* spindle load */ spload4 = new ODBSPLOAD_data();/* spindle load */ } public ODBSPLOAD_data spload1; /* spindle load */ public ODBSPLOAD_data spload2; /* spindle load */ public ODBSPLOAD_data spload3; /* spindle load */ public ODBSPLOAD_data spload4; /* spindle load */ @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "spload1", "spload2", "spload3", "spload4"}); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/ODBSPLOAD_data.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; public class ODBSPLOAD_data extends Structure{ public LOADELM spload = new LOADELM(); /* spindle load meter */ public LOADELM spspeed = new LOADELM(); /* spindle speed */ public static class ByReference extends ODBSPLOAD_data implements Structure.ByReference { } public static class ByValue extends ODBSPLOAD_data implements Structure.ByValue { } @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "spload", "spspeed"}); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/ODBSPN.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,35 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; /** * 读主轴è´è½½ï¼ï¼ï¼ï¼ä¸ç¨è¿ä¸ªäºï¼ææ¶ä¿ç */ @Deprecated public class ODBSPN extends Structure{ /** * æ¶å */ public static class ByReference extends ODBSPN implements Structure.ByReference { } public static class ByValue extends ODBSPN implements Structure.ByValue { } public ODBSPN() { data = new short[4]; } public short datano; /* dummy */ public short type; /* axis number */ //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public short[] data; /* preset data */ @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "datano", "type", "data"}); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/ODBST.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,36 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; /** * 设å¤ç¶æå工使¨¡å¼çè¿åç»æ */ public class ODBST extends Structure{ /** * æ¶å */ public static class ByReference extends ODBST implements Structure.ByReference { } public static class ByValue extends ODBST implements Structure.ByValue { } public short dummy; /* dummy */ public short tmmode; /* T/M mode */ public short aut; /* selected automatic mode */ public short run; /* running status */ public short motion; /* axis, dwell status */ public short mstb; /* m, s, t, b status */ public short emergency; /* emergency stop status */ public short alarm; /* alarm status */ public short edit; /* editting status */ @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "dummy", "tmmode", "aut", "run", "motion", "mstb", "emergency","alarm","edit" }); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/ODBSVLOAD.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,54 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; /** * 读伺æè½´è´è½½çè¿å对象 */ public class ODBSVLOAD extends Structure{ /** * æ¶å */ public static class ByReference extends ODBSVLOAD implements Structure.ByReference { } public static class ByValue extends ODBSVLOAD implements Structure.ByValue { } public ODBSVLOAD() { } public LOADELM svload1 = new LOADELM(); /* servo load meter */ public LOADELM svload2 = new LOADELM(); /* servo load meter */ public LOADELM svload3 = new LOADELM(); /* servo load meter */ public LOADELM svload4 = new LOADELM(); /* servo load meter */ public LOADELM svload5 = new LOADELM(); /* servo load meter */ public LOADELM svload6 = new LOADELM(); /* servo load meter */ public LOADELM svload7 = new LOADELM(); /* servo load meter */ public LOADELM svload8 = new LOADELM(); /* servo load meter */ public LOADELM svload9 = new LOADELM(); /* servo load meter */ public LOADELM svload10= new LOADELM(); /* servo load meter */ public LOADELM svload11= new LOADELM(); /* servo load meter */ public LOADELM svload12= new LOADELM(); /* servo load meter */ public LOADELM svload13= new LOADELM(); /* servo load meter */ public LOADELM svload14= new LOADELM(); /* servo load meter */ public LOADELM svload15= new LOADELM(); /* servo load meter */ public LOADELM svload16= new LOADELM(); /* servo load meter */ public LOADELM svload17= new LOADELM(); /* servo load meter */ public LOADELM svload18= new LOADELM(); /* servo load meter */ public LOADELM svload19= new LOADELM(); /* servo load meter */ public LOADELM svload20= new LOADELM(); /* servo load meter */ public LOADELM svload21= new LOADELM(); /* servo load meter */ public LOADELM svload22= new LOADELM(); /* servo load meter */ public LOADELM svload23= new LOADELM(); /* servo load meter */ public LOADELM svload24= new LOADELM(); /* servo load meter */ @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "svload1", "svload2", "svload3", "svload4","svload5","svload6","svload7","svload8","svload9","svload10","svload11","svload12","svload13","svload14","svload15","svload16","svload17","svload18","svload19","svload20","svload21","svload22","svload23","svload24"}); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/ODBSYS.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,60 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.builder.ToStringBuilder; import com.sun.jna.Structure; /** * ç³»ç»ä¿¡æ¯ç»æ */ public class ODBSYS extends Structure { /** * æ¶å */ public static class ByReference extends ODBSYS implements Structure.ByReference { } public static class ByValue extends ODBSYS implements Structure.ByValue { } public ODBSYS() { cnc_type = new byte[2]; mt_type = new byte[2]; series = new byte[4]; version = new byte[4]; axes = new byte[2]; } public short addinfo; public short max_axis; /** * å2ä¸ºæ¯æºå¨ç±»åç¼ç ï¼ */ // [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] cnc_type; // [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] mt_type; // [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public byte[] series; // [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public byte[] version; // [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] axes; @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "addinfo", "max_axis", "cnc_type", "mt_type", "series", "version", "axes" }); } @Override public String toString() { return ToStringBuilder.reflectionToString(this); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/ODBUSEGRP.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; /** * åç»è¯»åä¿¡æ¯è¿åç»æ */ public class ODBUSEGRP extends Structure{ /** * æ¶å */ public static class ByReference extends ODBUSEGRP implements Structure.ByReference { } public static class ByValue extends ODBUSEGRP implements Structure.ByValue { } public int next; /* next use group number */ public int use; /* using group number */ public int slct; /* selecting group number */ public int opt_next; /* next use optional group number */ public int opt_use; /* using optional group number */ public int opt_slct; /* selecting optional group number */ @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "next", "use", "slct", "opt_next", "opt_use", "opt_slct"}); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/POSELM.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,30 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; public class POSELM extends Structure{ /** * æ¶å */ public static class ByReference extends POSELM implements Structure.ByReference { } public static class ByValue extends POSELM implements Structure.ByValue { } public int data; /* position data */ public short dec; /* place of decimal point of position data */ public short unit; /* unit of position data */ public short disp; /* status of display */ public char name; /* axis name */ public char suff; /* axis name preffix */ @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "data","dec","unit","disp","name","suff"}); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/service/focas/types/POSELMALL.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,39 @@ package com.qianwen.mdc.service.focas.types; import java.util.Arrays; import java.util.List; import com.sun.jna.Structure; public class POSELMALL extends Structure{ /** * æ¶å */ public static class ByReference extends POSELM implements Structure.ByReference { } public static class ByValue extends POSELM implements Structure.ByValue { } /** * ç»å¯¹ä½ç½® */ public POSELM abs = new POSELM(); /** * æºæ¢°ä½ç½® */ public POSELM mach = new POSELM(); /** * ç¸å¯¹ä½ç½® */ public POSELM rel = new POSELM(); /** * å©ä½è·ç¦» */ public POSELM dist = new POSELM(); @Override protected List<String> getFieldOrder() { return Arrays .asList(new String[] { "abs","mach","rel","dist"}); } } mdc-parent/mdc-collect/src/main/java/com/qianwen/mdc/utils/LibraryLoadHelper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,67 @@ package com.qianwen.mdc.utils; import java.io.BufferedInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import com.sun.jna.Library; import com.sun.jna.Native; public class LibraryLoadHelper { static String localPath = "nativelib";//focas public synchronized static <T extends Library> T loadNative(String nativeName,String subdir,Class<T> clazz) { String systemType = System.getProperty("os.name"); String fileExt = (systemType.toLowerCase().indexOf("win") != -1) ? ".dll" : ".so"; File path = new File("."); //å°ææå¨æé¾æ¥åºdll/soæä»¶é½æ¾å¨ä¸ä¸ªä¸´æ¶æä»¶å¤¹ä¸ï¼ç¶åè¿è¡å è½½ //è¿æ¯åºä¸ºé¡¹ç®ä¸ºå¯æ§è¡jaræä»¶çæ¶åä¸è½å¾æ¹ä¾¿çæ«æé颿件 //æ¤ç®å½æ¾ç½®å¨ä¸é¡¹ç®åç®å½ä¸çnativesæä»¶å¤¹ä¸ String sysUserTempDir = path.getAbsoluteFile().getParent() + File.separator + localPath+ File.separator+subdir; System.out.println("------>>native lib临æ¶åæ¾ç®å½ : " + sysUserTempDir); String fileName = nativeName + fileExt; InputStream in = null; //BufferedInputStream reader = null; FileOutputStream fos = null; File tempFile = new File(sysUserTempDir + File.separator + fileName); if(!tempFile.getParentFile().exists()) tempFile.getParentFile().mkdirs() ; if (!tempFile.exists()) { try { //读åæä»¶å½¢æè¾å ¥æµ in = LibraryLoadHelper.class.getClassLoader().getResourceAsStream(localPath+"/"+ subdir+"/"+ fileName); fos = new FileOutputStream(tempFile); IOUtils.copy(in, fos); } catch (IOException e) { e.printStackTrace(); } finally { try { IOUtils.close(in); IOUtils.close(fos); } catch (IOException e) { e.printStackTrace(); } } } String loadPath = StringUtils.removeEnd(tempFile.getPath(), fileExt); System.out.println("------>> å è½½nativeæä»¶ :" + loadPath + "æå!!"); return (T)Native.load(loadPath,clazz); } } mdc-parent/mdc-collect/src/main/resources/lib/focas/Fwlib64.dllBinary files differ
mdc-parent/mdc-collect/src/main/resources/lib/focas/fwlibe64.dllBinary files differ
mdc-parent/mdc-collect/src/main/resources/nativelib/focas/Fwlib32.dllBinary files differ
mdc-parent/mdc-collect/src/main/resources/nativelib/focas/Fwlib64.dllBinary files differ
mdc-parent/mdc-collect/src/main/resources/nativelib/focas/HxFocasApi.dllBinary files differ
mdc-parent/mdc-collect/src/main/resources/nativelib/focas/HxFocasApi.libBinary files differ
mdc-parent/mdc-collect/src/main/resources/nativelib/focas/fwlibe1.dllBinary files differ
mdc-parent/mdc-collect/src/main/resources/nativelib/focas/fwlibe64.dllBinary files differ
mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/focas/FocasClientTest.java
@@ -2,28 +2,31 @@ import org.junit.jupiter.api.Test; import com.alibaba.fastjson.JSONObject; import com.sun.jna.Native; import com.sun.jna.ptr.ShortByReference; public class FocasClientTest { public static final String dllPath = "D:\\mdc\\lib\\focas\\"; //public static final MyJNAFocas HxFocas = (MyJNAFocas) Native.load(dllPath + "HxFocasApi", JNAFocas.class); public static final MyJNAFocas Fwlib32 = (MyJNAFocas) Native.load(dllPath + "Fwlib64", MyJNAFocas.class); public static String IP = "192.168.1.8"; public static short port = 8193; @Test public void testConn() { public void testReadState() { ShortByReference flibHndl = new ShortByReference(); //short result = Fwlib32.connectServer("localhost", (short)8193, 5000, flibHndl); //short ret = Fwlib32.disconnectServer(flibHndl.getValue()); /* FocasClient c = new FocasClient(); c.setIp("localhost"); c.setPort((short)8193);//é»è®¤ç«¯å£ int cresult = c.connect(); System.out.println(cresult); c.disconnect(); */ c.setIp(IP); c.setPort(port); try { int result = c.connect(); JSONObject stateObj = c.readState(); //System.out.print("result="+result); System.out.print(stateObj); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { c.disconnect(); } } } mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/focas/FocasJavaClientTest.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,246 @@ package com.qianwen.mdc.service.focas; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.qianwen.mdc.service.focas.types.ODBST; import com.sun.jna.Platform; import com.sun.jna.ptr.ShortByReference; public class FocasJavaClientTest { public static String IP = "192.168.1.8"; public static short port = 8193; FocasJavaClient client = new FocasJavaClient(); @BeforeEach public void setUp() { //CLibrary INSTANCE = (CLibrary) Native.load(Platform.isWindows() ? "libtest" : "test", CLibrary.class); client.setIp(IP); client.setPort(port); int ret = client.connect(); System.out.println("connret="+ret); } @AfterEach public void tearDown() { client.disconnect(); } @Test public void testConn() { ShortByReference flibHndl = new ShortByReference(); //int r = MyJNAFocas.MathLib.add(9, 20); //System.out.println(r); //MyJNAFocas.HxFocas.connectServer("localhost", (short)8193, 5000, flibHndl); try { short result = JNAJavaFocas.Fwlib.cnc_allclibhndl3(IP, port, 10, flibHndl); System.out.print(result); short ret = JNAJavaFocas.Fwlib.cnc_freelibhndl(flibHndl.getValue()); System.out.print("ret="+ret); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //@Test public void testReadCncType1() { FocasJavaClient c = new FocasJavaClient(); c.setIp(IP); c.setPort(port); c.setTimeout(5); c.connect(); String ty = c.readCncType(); System.out.println(ty); c.disconnect(); } String byteArrToString(byte[] bytes) { if(bytes == null) { return null; } char[] charArr = new char[bytes.length]; int i = 0; while(bytes[i] != 0 && i<bytes.length) { charArr[i] = (char)bytes[i]; i++; } return new String(charArr,0,i); } /** * èªæµæ¹æ³ */ /* @Test public void testReadCncType() { ShortByReference flibHndl = new ShortByReference(); try { short result = JNAJavaFocas.Fwlib.cnc_allclibhndl3(IP, port, 10, flibHndl); ODBSYS sysInfo = new ODBSYS(); short val = JNAJavaFocas.Fwlib.cnc_sysinfo(flibHndl.getValue(), sysInfo); String se = "d";//new String(getBytes(sysInfo.cnc_type)).trim(); //32ï¼ 48 String cncTypeNum = this.byteArrToString(sysInfo.cnc_type);//ç±»åç¼å· String CNCType; switch (cncTypeNum) { case "15": CNCType = "Series 15/15i"; break; case "16": CNCType = "Series 16/16i"; break; case "18": CNCType = "Series 18/18i"; break; case "21": CNCType = "Series 21/21i"; break; case "30": CNCType = "Series 30i"; break; case "31": CNCType = "Series 31i"; break; case "32": CNCType = "Series 32i"; break; case "35": CNCType = "Series 35i"; break; case " 0": CNCType = "Series 0i"; break; case "PD": CNCType = "Power Mate i-D"; break; case "PH": CNCType = "Power Mate i-H"; break; case "PM": CNCType = "Power Motion i"; break; default: CNCType = "å ¶å®ç±»å"; break; } String seriesStr = this.byteArrToString(sysInfo.series);//ç±»åç¼å· System.out.println("val="+val+",data="+CNCType); System.out.println("seriesStr="+seriesStr); System.out.println("version="+this.byteArrToString(sysInfo.version)); System.out.println("mttype="+this.byteArrToString(sysInfo.mt_type)); System.out.println("axes="+this.byteArrToString(sysInfo.axes)); short ret = JNAJavaFocas.Fwlib.cnc_freelibhndl(flibHndl.getValue()); } catch (Exception e) { e.printStackTrace(); } } */ @Test public void testReadState() { ODBST obj = client.readState(); System.out.println(obj); } @Test public void testReadSpindleOverride() { int r = client.readSpindleOverride(); System.out.println(r); } @Test public void readActs() { int actSpeed = client.readActs(); System.out.println(actSpeed); } @Test public void testReadSpLoad() { float spLoad = client.readSpLoad(); System.out.println(spLoad); } @Test public void testReadActf() { float actf = client.readActf(); System.out.println(actf); } @Test public void testReadPrgNo() { int prgNo = client.readPrgNo(); System.out.println(prgNo); } @Test public void testReadRealPrgName() { String prg= client.readExePrgName(); System.out.println("å½åæ§è¡ç¨åº="+prg); } @Test public void testReadCurToolNo() { Integer tool= client.readCurToolNo(); System.out.println("tool="+tool); } @Test public void testReadAxisName() { client.readAxisName(); } @Test public void testReadPosition() { client.readPosition(); //System.out.println("tool="+tool); } @Test public void testReadAxisServoload() { client.readAxisServoload(); //System.out.println("tool="+tool); } @Test public void testReadAlarm() { client.readAlarm("GBK"); //System.out.println("tool="+tool); } String byteArrToString2(byte[] bytes) { if (bytes == null) { return null; } char[] charArr = new char[bytes.length]; int i = 0; while (i < bytes.length && bytes[i] != 0) { charArr[i] = (char) bytes[i]; i++; } return new String(charArr, 0, i); } //@Test public void testByteToString() { byte[] bs = new byte[] {32,48}; String a = byteArrToString2(bs); //System.out.println("tool="+tool); } } mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/focas/MyDll.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,11 @@ package com.qianwen.mdc.service.focas; import com.sun.jna.Library; import com.sun.jna.Native; public interface MyDll extends Library{ public static final MyDll MathLib = (MyDll) Native.load("D:\\MathLibrary", MyDll.class); int add(int a, int b); } mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/focas/MyDllTest.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ package com.qianwen.mdc.service.focas; import org.junit.jupiter.api.Test; public class MyDllTest { @Test public void testAdd() { int r = MyDll.MathLib.add(9, 20); System.out.println(r); } } mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/focas/MyJNAFocas.java
@@ -2,16 +2,76 @@ import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.ptr.IntByReference; import com.sun.jna.ptr.ShortByReference; public interface MyJNAFocas extends Library { public static final String dllPath = "lib\\focas\\"; //public static final JNAFocas HxFocas = (JNAFocas) Native.load(dllPath + "HxFocasApi", JNAFocas.class); public static final JNAFocas Fwlib32 = (JNAFocas) Native.load(dllPath + "Fwlib32", JNAFocas.class); //public static final JNAFocas Fwlibe1 = (JNAFocas) Native.load(dllPath + "fwlibe1", JNAFocas.class); public static final String dllPath = "D:\\focas\\"; public static final MyJNAFocas HxFocas = (MyJNAFocas) Native.load(dllPath + "HxFocasApi", MyJNAFocas.class); public static final MyJNAFocas Fwlib32 = (MyJNAFocas) Native.load(dllPath + "Fwlib32", MyJNAFocas.class); public static final MyJNAFocas Fwlibe1 = (MyJNAFocas) Native.load(dllPath + "fwlibe1", MyJNAFocas.class); short connectServer(String ipAddr, short port, int timeout, ShortByReference flibHndl); short disconnectServer(short flibHndl); short readCncType(short flibHndl, byte[] cncType); short readAxisName(short flibHndl, ShortByReference axisNum, byte[] axisName); short readNcState(short flibHndl, ShortByReference status); short readOpState(short flibHndl, ShortByReference status); short readState(short flibHndl, ShortByReference ncState, ShortByReference opState, ShortByReference alarmState, ShortByReference emergency); short readAlarm(short flibHndl, ShortByReference alarmCount, int[] alarmNo, short[] alarmType, short[] alarmAxis, byte[] alarmMsg); short readSpRate(short flibHndl, IntByReference spRate); short readSpLoad(short flibHndl, IntByReference spLoad); short readSpSpeedSet(short flibHndl, IntByReference spSpeedSet); short readActs(short flibHndl, IntByReference acts); short readServoLoad(short flibHndl, ShortByReference axisNum, int[] servoLoad); short readFeedRate(short flibHndl, IntByReference feedRate); short readFeedSet(short flibHndl, IntByReference feedSet); short readActf(short flibHndl, IntByReference actf); short readRapidRate(short flibHndl, IntByReference rapidRate); short readPrgNo(short flibHndl, ShortByReference mainPrgNo, ShortByReference curPrgNo); short readSubPrg(short flibHndl, byte[] prgName, IntByReference prgNo); short readSeqNo(short flibHndl, IntByReference seqNo); short readExecPrg(short flibHndl, ShortByReference length, byte[] execPrg); short readM00M01State(short flibHndl, IntByReference state); short readPrgReadyState(short flibHndl, IntByReference state); short readRealPrgName(short flibHndl, int prgNo, byte[] prgName); short readPosition(short flibHndl, short axisNum, float[] absolute, float[] relative, float[] machine, float[] distance); short readCurToolNo(short flibHndl, IntByReference toolNo); short readOpenTime(short flibHndl, IntByReference time); short readCycleTime(short flibHndl, IntByReference time); short readCutTime(short flibHndl, IntByReference time); short readOperateTime(short flibHndl, IntByReference time); short readPartsCount(short flibHndl, IntByReference partsCount); short readPartsTotal(short flibHndl, IntByReference partsTotal); } mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/service/focas/MyJNAFocasTest.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,138 @@ package com.qianwen.mdc.service.focas; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; import org.junit.jupiter.api.Test; import com.qianwen.mdc.service.focas.types.ODBSYS; import com.sun.jna.Native; import com.sun.jna.ptr.ShortByReference; public class MyJNAFocasTest { public static String IP = "192.168.1.8"; public static short port = 8193; @Test public void testConn() { ShortByReference flibHndl = new ShortByReference(); //int r = MyJNAFocas.MathLib.add(9, 20); //System.out.println(r); //MyJNAFocas.HxFocas.connectServer("localhost", (short)8193, 5000, flibHndl); try { short result = JNAJavaFocas.Fwlib.cnc_allclibhndl3(IP, port, 10, flibHndl); System.out.print(result); short ret = JNAJavaFocas.Fwlib.cnc_freelibhndl(flibHndl.getValue()); System.out.print("ret="+ret); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //@Test public void testReadCncType1() { FocasJavaClient c = new FocasJavaClient(); c.setIp(IP); c.setPort(port); c.setTimeout(5); c.connect(); String ty = c.readCncType(); System.out.println(ty); c.disconnect(); } String byteArrToString(byte[] bytes) { if(bytes == null) { return null; } char[] charArr = new char[bytes.length]; int i = 0; while(bytes[0] != 0 && i<bytes.length) { charArr[i] = (char)bytes[i]; i++; } return new String(charArr,0,i); } /** * èªæµæ¹æ³ */ @Test public void testReadCncType() { ShortByReference flibHndl = new ShortByReference(); try { short result = JNAJavaFocas.Fwlib.cnc_allclibhndl3(IP, port, 10, flibHndl); ODBSYS sysInfo = new ODBSYS(); short val = JNAJavaFocas.Fwlib.cnc_sysinfo(flibHndl.getValue(), sysInfo); String se = "d";//new String(getBytes(sysInfo.cnc_type)).trim(); //32ï¼ 48 String cncTypeNum = this.byteArrToString(sysInfo.cnc_type);//ç±»åç¼å· String CNCType; switch (cncTypeNum) { case "15": CNCType = "Series 15/15i"; break; case "16": CNCType = "Series 16/16i"; break; case "18": CNCType = "Series 18/18i"; break; case "21": CNCType = "Series 21/21i"; break; case "30": CNCType = "Series 30i"; break; case "31": CNCType = "Series 31i"; break; case "32": CNCType = "Series 32i"; break; case "35": CNCType = "Series 35i"; break; case " 0": CNCType = "Series 0i"; break; case "PD": CNCType = "Power Mate i-D"; break; case "PH": CNCType = "Power Mate i-H"; break; case "PM": CNCType = "Power Motion i"; break; default: CNCType = "å ¶å®ç±»å"; break; } String seriesStr = this.byteArrToString(sysInfo.series);//ç±»åç¼å· System.out.println("val="+val+",data="+CNCType); System.out.println("seriesStr="+seriesStr); System.out.println("version="+this.byteArrToString(sysInfo.version)); System.out.println("mttype="+this.byteArrToString(sysInfo.mt_type)); System.out.println("axes="+this.byteArrToString(sysInfo.axes)); short ret = JNAJavaFocas.Fwlib.cnc_freelibhndl(flibHndl.getValue()); } catch (Exception e) { e.printStackTrace(); } } } mdc-parent/mdc-collect/src/test/java/com/qianwen/mdc/utils/LibraryLoadHelperTest.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.qianwen.mdc.utils; import org.junit.jupiter.api.Test; import com.qianwen.mdc.service.focas.JNAJavaFocas; public class LibraryLoadHelperTest { @Test public void testJdkbits() { JNAJavaFocas Fwlib = (JNAJavaFocas) LibraryLoadHelper.loadNative("Fwlib"+System.getProperty("sun.arch.data.model"),"focas", JNAJavaFocas.class); System.out.println(Fwlib); } }