.vscode/launch.json
@@ -6,6 +6,20 @@ "configurations": [ { "type": "java", "name": "ModuleA", "request": "launch", "mainClass": "com.example.springboot.component.ModuleA", "projectName": "springboot-vue3" }, { "type": "java", "name": "ModuleB", "request": "launch", "mainClass": "com.example.springboot.component.ModuleB", "projectName": "springboot-vue3" }, { "type": "java", "name": "MyGenerator", "request": "launch", "mainClass": "MyGenerator", CanadaMes-ui/src/lang/locales/en-US.json
@@ -1,6 +1,6 @@ { "Clear":"Clear", "ip":"192.168.10.21", "ip":"localhost", "systemTitle": "Login System", "usernamePlaceholder": "Please enter username", "passwordPlaceholder": "Please enter password", @@ -293,7 +293,7 @@ "Space (Pieces)":"Space (Pieces)", "This glass is already in the cage":"This glass is already in the cage", "Enter the Order No":"Enter the Order No", "OrderInfo":"OrderInfo", "Order Info":"Order Info", "Query":"Query", "permission update":"permission update", "query was successful":"query was successful", @@ -361,6 +361,7 @@ "Please enter the correct glassID":"Please enter the correct glassID", "Switch":"Switch", "This frame has glass that is currently outing":"This frame has glass that is currently outing", "The slot is disabled":"The slot is disabled", "ServoManualone": { "A01 所在格子": "A01 Current Grid", "数量": "Quantity", CanadaMes-ui/src/lang/locales/zh-CN.json
@@ -1,6 +1,6 @@ { "Clear":"清除", "ip":"192.168.10.21", "ip":"localhost", "systemTitle": "登录系统", "usernamePlaceholder": "请输入用户名", "passwordPlaceholder": "请输入密码", @@ -284,7 +284,7 @@ "Space (Pieces)": "空间(片数)", "This glass is already in the cage": "笼子里已有此玻璃", "Enter the Order No": "请输入订单id", "OrderInfo": "订单信息", "Order Info": "订单信息", "Query": "查询", "permission update": "权限编辑", "query was successful": "查询成功", @@ -354,6 +354,7 @@ "Please enter the correct glassID":"请输入正确的玻璃ID", "Switch":"切换", "This frame has glass that is currently outing":"此铝框有正在出片的玻璃", "The slot is disabled":"格子被禁用", "langparameter": { "conveyor Velocity(Auto FAST)": "D01-D06 皮带输送自动快速", "conveyor Velocity(Auto SLOW)": "D01-D06 皮带输送自动慢速", CanadaMes-ui/src/views/home/index.vue
@@ -256,7 +256,7 @@ :class="ManuallyInfeedGlass == true ? 'hide' : ''"> {{ $t('Manually Infeed Glass') }}</el-button> <el-button type="primary" @click="showform2()" :disabled="OrderInfo" :class="OrderInfo == true ? 'hide' : ''">{{ $t('OrderInfo') :class="OrderInfo == true ? 'hide' : ''">{{ $t('Order Info') }}</el-button> <el-button type="primary" @click="showform6()" :disabled="OutingQueue" :class="OutingQueue == true ? 'hide' : ''"> @@ -588,7 +588,7 @@ </el-dialog> <el-dialog :visible.sync="dialogFormVisible4" :title="$t('OrderInfo')" top="5vh"> <el-dialog :visible.sync="dialogFormVisible4" :title="$t('Order Info')" top="5vh"> <el-input style="width:15%;" :placeholder="$t('Enter the Order No')" v-model="orderid"></el-input> <el-button type="primary" @click="selectglassinfo()">{{ $t('Query') }}</el-button> <el-table :data="GlassInfo.slice((currentPage - 1) * pagesize, currentPage * pagesize) @@ -743,17 +743,9 @@ <el-button type="primary" @click="isAllowQueueState()" :disabled="!this.isAllowReordering">{{ this.isAllowQueue == true ? $t('Stop') : $t('Start') }}</el-button> <!-- {{ $t('Sorting State') }}: {{ this.isAllowReordering == true ? $t('Not Allow') : $t('Allow') }} <el-button type="primary" @click="isAllowReorderings()" :disabled="this.isAllowQueue">{{ this.isAllowReordering == true ? $t('Allow') : $t('Not Allow') }}</el-button> --> <!-- <el-input style="width:15%;" :placeholder="$t('Enter the Frame No')" v-model="framebarcode"></el-input> --> <el-button type="primary" @click="showform7()">{{ $t('Add') }}</el-button> <label style="background-color:yellow;font-size: 23px;" for=""> {{ isQueueWarning == true ? $t('The cage is disabled') : "" }} {{ isQueueWarning == true ? $t('The slot is disabled') : "" }} </label> <div style="display:flex;"> <div style="width:70%;"> @@ -1025,7 +1017,7 @@ const specialChars = /[^\w\s]/g; this.CurrrentGlassId = obj.CurrrentGlassId[0].replace(specialChars, ""); } //查询当前铝框信息 this.CurrentFrame = obj.CurrentFrame; @@ -1051,7 +1043,6 @@ this.InsertQueueGlass(1); } } // if (obj.alarmmg[0].length > 0) { @@ -1124,8 +1115,9 @@ if (obj.form3 != null && obj.form3 != "" && obj.state[0] == 0) { this.loadglassheight1 = 70; if (this.form5.glassId != obj.form3[0].glassId) { if (this.form5.glassId != obj.form3[0].glassId&&this.ManuallyInfeedGlass==false) { this.showform3(); } this.form5 = obj.form3[0]; this.glassid1 = ""; @@ -1516,6 +1508,7 @@ if (res.data.message == 200) { this.$message.success(this.$t('Operation successful')); this.dialogFormVisible = false; this.glassid=""; } else if (res.data.message == 400) { this.$message.error(this.$t('The glass size is not within the range')); springboot-vue3/effective-pom.xml
New file Diff too large springboot-vue3/src/main/java/com/example/springboot/component/ModuleA.java
File was deleted springboot-vue3/src/main/java/com/example/springboot/component/ModuleB.java
File was deleted springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java
@@ -1,11 +1,12 @@ package com.example.springboot.component; import java.sql.SQLException; import java.time.LocalDateTime; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import com.example.springboot.service.JdbcConnections; import com.example.springboot.service.SpianService; import com.example.springboot.service.SpianServiceNew; import com.example.springboot.entity.north_glass_buffer1; import com.example.springboot.mapper.AlarmMapper; import com.example.springboot.mapper.SpianMapper; @@ -18,7 +19,7 @@ private JdbcConnections jdbcConnections; private SpianMapper spianMapper; private SpianService spianService; private SpianServiceNew spianServiceNew; int aaa; @Override @@ -32,23 +33,26 @@ // \\ TODO Auto-generated catch block e.printStackTrace(); } // if (S7control.getinstance().CheckConnected() == false) { spianService = WebSocketServer.applicationContext.getBean(SpianService.class); spianMapper = WebSocketServer.applicationContext.getBean(SpianMapper.class); spianServiceNew = WebSocketServer.applicationContext.getBean(SpianServiceNew.class); jdbcConnections = WebSocketServer.applicationContext.getBean(JdbcConnections.class); // 根据玻璃id获取订单号,单独数据源 // try { // north_glass_buffer1 glass = jdbcConnections.selectGlass(112); // // System.out.println(glass.getOrderId()); // spianService.selectAll(jdbcConnections.SelectGlassByGlassIdOrderIdFrameId("X12345610102GV","","")); // } catch (SQLException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // // TODO Auto-generated catch block // e.printStackTrace(); // } spianService.selectout2("X12345610102GV"); // 出片任务//////////////////////////////// spianServiceNew.selectout2("X21942613103GV"); //spianService.selectout2("X21942613103GV"); List<Short> outlist = S7control.getinstance().ReadWord("DB106.20", 1); // 出片车状态 List<Short> outlist1 = S7control.getinstance().ReadWord("DB105.18", 1); // 出片任务是否启动 @@ -156,8 +160,17 @@ int questate = spianMapper.Selectquecount(queueid1.toString());// 判断扫码位是否有玻璃已确认 // queueid1.toString().isEmpty() north_glass_buffer1 glass1 = spianMapper.selectGlass(queueid1.toString());// D01的玻璃信息 north_glass_buffer1 glass2 = spianMapper.selectGlass(queueid2.toString());// D02玻璃信息 // north_glass_buffer1 glass1 = spianMapper.selectGlass(queueid1.toString());// D01的玻璃信息 // north_glass_buffer1 glass2 = spianMapper.selectGlass(queueid2.toString());// D02玻璃信息 north_glass_buffer1 glass1=null; north_glass_buffer1 glass2=null; try { glass1 = jdbcConnections.SelectGlassByGlassIdOrderIdFrameId(queueid1.toString(),"","");// D01玻璃信息 glass2 = jdbcConnections.SelectGlassByGlassIdOrderIdFrameId(queueid2.toString(),"","");// D02玻璃信息 } catch (SQLException e) { e.printStackTrace(); } // 当扫码位玻璃id为空时 宽度为0 if (queueid1 != null && questate == 0) { // 写入D01的数据到上片队列表 springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
@@ -37,7 +37,7 @@ public static Boolean isAllowQueue = true; public static Boolean isAllowReordering = true; // 出片队列警告 public static Boolean isQueueWarning = false; public static Boolean isQueueWarning = true; // 铝框id public static String FrameNo = ""; // 是否需要手动确认玻璃 @@ -63,7 +63,10 @@ JSONObject jsonObject = new JSONObject(); try { Thread.sleep(1000); // 注入mapper String s1=S7controlalbia.getinstance().readStrings("DB14.38"); String s2=S7controlalbia.getinstance().readStrings("DB14.40"); // 注入mapper homeMapper = WebSocketServer.applicationContext.getBean(HomeMapper.class); spianMapper = WebSocketServer.applicationContext.getBean(SpianMapper.class); spianService = WebSocketServer.applicationContext.getBean(SpianService.class); @@ -126,170 +129,169 @@ // String E01id = new String( S7controlLK.getinstance().ReadByte("DB17.0",16)); // String J01id = new String( S7controlLK.getinstance().ReadByte("DB17.22",14)); // if (S7control.getinstance().CheckConnected() == true) { if (S7control.getinstance().CheckConnected() == true) { // 铝框线交互 if (S7controlLK.getinstance().CheckConnected() == true) { if (CurrentFrame != null) { S7controlLK.getinstance().writeStrings(CurrentFrame.getBarCode(), "DB17.0"); } String E01id = S7controlLK.getinstance().readStrings("DB17.0"); String J01id = S7controlLK.getinstance().readStrings("DB17.22"); // 铝框线交互 if (S7controlLK.getinstance().CheckConnected() == true) { if (CurrentFrame != null) { S7controlLK.getinstance().writeStrings(CurrentFrame.getBarCode(), "DB17.0"); List<Short> liststates = S7controlLK.getinstance().ReadWord("DB17.38", 1); List<Short> liststate = S7controlLK.getinstance().ReadWord("DB17.20", 1); Short framerequest = liststate.get(0); if (framerequest == 1) { // 铝框id String position; try { position = dbserve.SelectPositionByFrameBarcode(J01id); } catch (SQLException e) { // TODO Auto-generated catch block position = "0"; e.printStackTrace(); } Short send; if (position.equals("0")) { send = 0; } else { send = 1; } S7controlLK.getinstance().WriteWord("DB17.38", (short) send); } } String E01id = S7controlLK.getinstance().readStrings("DB17.0"); String J01id = S7controlLK.getinstance().readStrings("DB17.22"); List<Short> liststates = S7controlLK.getinstance().ReadWord("DB17.38", 1); List<Short> liststate = S7controlLK.getinstance().ReadWord("DB17.20", 1); Short framerequest = liststate.get(0); if (framerequest == 1) { // 铝框id String position; // 获取当前扫码方式 List<Boolean> Scanningmethods = S7control.getinstance().ReadBits("DB101.11.4", 1); if (Scanningmethods != null) { for (Boolean Scanningmethod : Scanningmethods) { jsonObject.append("Scanningmethod", Scanningmethod); } } // 获取当前扫码枪玻璃id String CurrrentGlassId = spianService.queGlassid("DB103.256", 14).toString(); jsonObject.append("CurrrentGlassId", CurrrentGlassId); // 获取D01-D06,A01,A02,B01,B02状态 List<Short> DeviceList = S7control.getinstance().ReadWord("DB103.0", 10); jsonObject.append("DeviceList", DeviceList); // 获取D01-D06,A01,A02,B01,B02玻璃id List<String> GlassIdList = new ArrayList<String>(); GlassIdList.add(spianService.queGlassid("DB103.44", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.58", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.184", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.212", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.128", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.142", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.156", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.72", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.86", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.100", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.114", 14).toString()); jsonObject.append("GlassIdList", GlassIdList); // 获取Plc进片车与出片车位置 List<String> addressList = new ArrayList<String>(); addressList.add("DB106.12"); addressList.add("DB106.0"); List<Short> paramlist = S7control.getinstance().ReadWord(addressList); if (paramlist != null) { jsonObject.append("params", paramlist); } // // 获取进片车状态 // List<Short> datas1ListState = S7control.getinstance().ReadWord("DB106.8", // 1);// 获取进片车状态 // if (datas1ListState != null) { // boolean exist1 = datas1ListState.contains((short) 0); // jsonObject.append("zhuangtai", exist1); // } // // 获取进片玻璃信息 // List<Short> inglassInfo = S7control.getinstance().ReadWord("DB106.24", 1); // if (inglassInfo != null) { // if (inglassInfo.size() > 0) { // jsonObject.append("loadglassheight", inglassInfo.get(0) * 70); // } // } // // 获取铝框idDB106.DBW64,添加到出片队列 // String frameno="X21763329601FB"; String frameno = spianService.queGlassid("DB103.270", 14).toString(); if (!frameno.equals(Plchome.FrameNo)) { Plchome.FrameNo = frameno; try { position = dbserve.SelectPositionByFrameBarcode(J01id); Short num = 0; List<north_glass_buffer1> north_glass_buffer1s = north_Glass_Buffer1Service .SelectAluminumFrameInfoById(Plchome.FrameNo); for (north_glass_buffer1 north_glass_buffer1 : north_glass_buffer1s) { if (north_glass_buffer1.getstorageCage() == null) { break; } num++; } if (num == north_glass_buffer1s.size()) { north_Glass_Buffer1Service.AddOutSliceS(Plchome.FrameNo); } else { Plchome.AluminumFrame = north_glass_buffer1s; } } catch (SQLException e) { // TODO Auto-generated catch block position = "0"; e.printStackTrace(); } Short send; if (position.equals("0")) { send = 0; } if (AluminumFrame != null) { jsonObject.append("AluminumFrame", AluminumFrame); } // 复位倒计时 // 地址104.9.6 List<Boolean> countdown = S7control.getinstance().ReadBits("DB104.9.6", 1); for (Boolean countdowns : countdown) { jsonObject.append("countdown", countdowns); } // jsonObject.append("countdown", true); // 复位完成信号 List<Boolean> resetss = S7control.getinstance().ReadBits("DB103.284", 1); for (Boolean reset : resetss) { jsonObject.append("reset", reset); } // 是否急停 List<Boolean> emergencystops = S7control.getinstance().ReadBits("DB104.5.1", 1); for (Boolean emergencystop : emergencystops) { jsonObject.append("emergencystop", emergencystop); } // 获取进片请求状态 List<Short> D01Request = S7control.getinstance().ReadWord("DB106.24", 1); boolean D01RequestState = D01Request.contains((short) 1); jsonObject.append("D01RequestState", D01RequestState); // 获取进片发送状态 List<Short> D01respnse = S7control.getinstance().ReadWord("DB106.16", 1); boolean D01ResponseState = D01respnse.contains((short) 1); // jsonObject.append("D01RequestState", D01RequestState); // 自动进片 isConfirm = true; if (isConfirm == true && form3.getglassId() != null && form3.getglassId() != "") { if ((form3.getglassheight() < 380 || form3.getglasswidth() < 390 || form3.getglassheight() > 1810 || form3.getglasswidth() > 2760) || (form3.getglassheight() < 390 || form3.getglasswidth() < 380 || form3.getglassheight() > 2760 || form3.getglasswidth() > 1810)) { FeedState = true; jsonObject.append("FeedState", FeedState); FeedState = false; } else { send = 1; } S7controlLK.getinstance().WriteWord("DB17.38", (short) send); } } // 获取当前扫码方式 List<Boolean> Scanningmethods = S7control.getinstance().ReadBits("DB101.11.4", 1); if (Scanningmethods != null) { for (Boolean Scanningmethod : Scanningmethods) { jsonObject.append("Scanningmethod", Scanningmethod); } } // 获取当前扫码枪玻璃id String CurrrentGlassId = spianService.queGlassid("DB103.256", 14).toString(); jsonObject.append("CurrrentGlassId", CurrrentGlassId); // 获取D01-D06,A01,A02,B01,B02状态 List<Short> DeviceList = S7control.getinstance().ReadWord("DB103.0", 10); jsonObject.append("DeviceList", DeviceList); // 获取D01-D06,A01,A02,B01,B02玻璃id List<String> GlassIdList = new ArrayList<String>(); GlassIdList.add(spianService.queGlassid("DB103.44", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.58", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.184", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.212", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.128", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.142", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.156", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.72", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.86", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.100", 14).toString()); GlassIdList.add(spianService.queGlassid("DB103.114", 14).toString()); jsonObject.append("GlassIdList", GlassIdList); // 获取Plc进片车与出片车位置 List<String> addressList = new ArrayList<String>(); addressList.add("DB106.12"); addressList.add("DB106.0"); List<Short> paramlist = S7control.getinstance().ReadWord(addressList); if (paramlist != null) { jsonObject.append("params", paramlist); } // // 获取进片车状态 // List<Short> datas1ListState = S7control.getinstance().ReadWord("DB106.8", // 1);// 获取进片车状态 // if (datas1ListState != null) { // boolean exist1 = datas1ListState.contains((short) 0); // jsonObject.append("zhuangtai", exist1); // } // // 获取进片玻璃信息 // List<Short> inglassInfo = S7control.getinstance().ReadWord("DB106.24", 1); // if (inglassInfo != null) { // if (inglassInfo.size() > 0) { // jsonObject.append("loadglassheight", inglassInfo.get(0) * 70); // } // } // // 获取铝框idDB106.DBW64,添加到出片队列 // String frameno="X21763329601FB"; String frameno = spianService.queGlassid("DB103.270", 14).toString(); if (!frameno.equals(Plchome.FrameNo)) { Plchome.FrameNo = frameno; try { Short num = 0; List<north_glass_buffer1> north_glass_buffer1s = north_Glass_Buffer1Service .SelectAluminumFrameInfoById(Plchome.FrameNo); for (north_glass_buffer1 north_glass_buffer1 : north_glass_buffer1s) { if (north_glass_buffer1.getstorageCage() == null) { break; if (D01RequestState == true && D01ResponseState != true) { storageCageService.InsertQueueGlassId((short) 1, form3); } num++; } if (num == north_glass_buffer1s.size()) { north_Glass_Buffer1Service.AddOutSliceS(Plchome.FrameNo); } else { Plchome.AluminumFrame = north_glass_buffer1s; } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (AluminumFrame != null) { jsonObject.append("AluminumFrame", AluminumFrame); } // 复位倒计时 // 地址104.9.6 List<Boolean> countdown = S7control.getinstance().ReadBits("DB104.9.6", 1); for (Boolean countdowns : countdown) { jsonObject.append("countdown", countdowns); } // jsonObject.append("countdown", true); // 复位完成信号 List<Boolean> resetss = S7control.getinstance().ReadBits("DB103.284", 1); for (Boolean reset : resetss) { jsonObject.append("reset", reset); } // 是否急停 List<Boolean> emergencystops = S7control.getinstance().ReadBits("DB104.5.1", 1); for (Boolean emergencystop : emergencystops) { jsonObject.append("emergencystop", emergencystop); } // 获取进片请求状态 List<Short> D01Request = S7control.getinstance().ReadWord("DB106.24", 1); boolean D01RequestState = D01Request.contains((short) 1); jsonObject.append("D01RequestState", D01RequestState); // 获取进片发送状态 List<Short> D01respnse = S7control.getinstance().ReadWord("DB106.16", 1); boolean D01ResponseState = D01respnse.contains((short) 1); // jsonObject.append("D01RequestState", D01RequestState); // 自动进片 isConfirm=true; if (isConfirm == true && form3.getglassId() != null && form3.getglassId() != "") { if ((form3.getglassheight() < 380 || form3.getglasswidth() < 390 || form3.getglassheight() > 1810 || form3.getglasswidth() > 2760) || (form3.getglassheight() < 390 || form3.getglasswidth() < 380 || form3.getglassheight() > 2760 || form3.getglasswidth() > 1810)) { FeedState = true; jsonObject.append("FeedState", FeedState); FeedState = false; } else { if (D01RequestState == true && D01ResponseState != true) { storageCageService.InsertQueueGlassId((short) 1, form3); } } } // } } } catch (InterruptedException e) { e.printStackTrace(); springboot-vue3/src/main/java/com/example/springboot/component/S7controlalbia.java
New file @@ -0,0 +1,456 @@ package com.example.springboot.component; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.charset.StandardCharsets; import java.sql.Time; import java.util.ArrayList; import java.util.List; import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType; import com.github.xingshuangs.iot.protocol.s7.service.MultiAddressWrite; import com.github.xingshuangs.iot.protocol.s7.service.S7PLC; import com.google.common.primitives.Bytes; import org.apache.ibatis.jdbc.Null; public class S7controlalbia { S7PLC s7PLC; // PLC通讯类实例 private EPlcType plcType = EPlcType.S1500; // 西门子PLC类型 private String ip = "192.168.10.1"; // plc ip地址 private int port = 65; // plc 端口号 private static volatile S7controlalbia instance = null; private S7controlalbia() { if (s7PLC == null) s7PLC = new S7PLC(plcType, ip, port, 0, 0); } // 单例模式 获取类的唯一实例 public static S7controlalbia getinstance() { if (instance == null) { synchronized (S7controlalbia.class) { if (instance == null) instance = new S7controlalbia(); } } return instance; } /** * 关闭西门子s7通讯连接 */ public void CloseS7client() { if (s7PLC == null) s7PLC.close(); s7PLC.checkConnected(); } /** * s7通讯连接状态 */ public boolean CheckConnected() { return s7PLC.checkConnected(); } /** * 按指定的地址 写入一个word * * @param address 地址 * @param data word的值 */ public void WriteWord(String address, short data) { if (s7PLC == null) { return; } s7PLC.writeInt16(address, data); } /** * 从某地址连续 写入多个word * * @param address 地址 * @param datas word的值 */ public void WriteWord(String address, List<Short> datas) { if (s7PLC == null) return; // s7PLC.write(address, data); List<String> addresslist = GetAddressList(address, datas.size(), 16); MultiAddressWrite addressWrite = new MultiAddressWrite(); for (int i = 0; i < datas.size(); i++) { addressWrite.addInt16(addresslist.get(i), datas.get(i)); } s7PLC.writeMultiData(addressWrite); } /** * 按指定的地址 写入多个word * * @param address 地址 * @param datas word的值 */ /** * 按指定的地址 写入一个Bit * * @param address 地址 * @param data Bit的值 */ public void WriteBit(String address, Boolean data) { if (s7PLC == null) return; s7PLC.writeBoolean(address, data); } /** * 按指定的地址 写入多个bit * * @param address 地址 * @param datas bit的值 */ public void WriteBit(List<String> address, List<Boolean> datas) { if (s7PLC == null) return; // s7PLC.write(address, data); MultiAddressWrite addressWrite = new MultiAddressWrite(); for (int i = 0; i < address.size(); i++) { addressWrite.addBoolean(address.get(i), datas.get(i)); } s7PLC.writeMultiData(addressWrite); } /** * 从某地址连续 写入多个bit * * @param address 地址 * @param datas word的值 */ public void WriteBit(String address, List<Boolean> datas) { if (s7PLC == null) return; // s7PLC.write(address, data); List<String> addresslist = GetAddressList(address, datas.size(), 1); MultiAddressWrite addressWrite = new MultiAddressWrite(); for (int i = 0; i < datas.size(); i++) { addressWrite.addBoolean(addresslist.get(i), datas.get(i)); } s7PLC.writeMultiData(addressWrite); } /** * 按指定的地址 写入多个byte * * @param address 地址 * @param datas byte的值 */ public void WriteByte(String address, byte[] datas) { if (s7PLC == null) return; // s7PLC.write(address, data); s7PLC.writeByte(address, datas); } /** * 按指定的地址 读取word结果集 * * @param address 地址 * @return 结果 */ public List<Short> ReadWord(List<String> address) { if (s7PLC == null) return null; try { return s7PLC.readInt16(address); } catch (Exception e) { System.out.println("读取 " + address + " 失败:" + e.getMessage()); return null; } } private int getIndexFromAddress(String address) { // 可以解析出地址中的数字部分,并转换为整数 return 0; } private String getAddressFromIndex(int index) { // 整数转换为地址格式的字符串 return ""; } /** * 按指定的地址 读取word结果集 * * @param address 地址 * @param count 连续读多少个word * @return 结果 */ public List<Short> ReadWord(String address, int count) { if (s7PLC == null) return null; List<String> addresslist = GetAddressList(address, count, 16); try { return s7PLC.readInt16(addresslist); } catch (Exception e) { System.out.println("读取 " + address + " 失败:" + e.getMessage()); return null; } } /** * 按指定的地址 读取byte结果集 * * @param address 地址 * @param count 连续读多少个byte * @return 结果 */ public byte[] ReadByte(String address, int count) { if (s7PLC == null) return null; // List<String> addresslist = GetAddressList(address, count, 16); try { return s7PLC.readByte(address, count); } catch (Exception e) { // 处理异常 System.out.println("读取 " + address + " 失败:" + e.getMessage()); return null; } } /** * 按指定的地址 按bit位 0 flase 1 true 读取结果 * * @param addresslist 地址集 * @return Boolean结果 */ public List<Boolean> ReadBits(List<String> addresslist) { if (s7PLC == null) return null; return s7PLC.readBoolean(addresslist); } // 读取不连续地址bit public List<Boolean> readBits(List<String> addressList) { if (s7PLC == null || addressList.isEmpty()) { return null; } List<Boolean> values = new ArrayList<>(); for (String address : addressList) { try { boolean value = s7PLC.readBoolean(address); values.add(value); } catch (Exception e) { // 处理异常 System.out.println("读取 " + address + " 失败:" + e.getMessage()); } } return values; } // 读取String public List<String> readStrings(List<String> addressList) { if (s7PLC == null) { return null; } List<String> result = new ArrayList<>(); for (String address : addressList) { try { byte[] bytes = s7PLC.readByte(address, 14); if (bytes != null) { String str = new String(bytes, StandardCharsets.UTF_8); result.add(str); } } catch (Exception e) { System.out.println("读取 " + address + " 失败:" + e.getMessage()); result.add(null); } } return result; } public List<String> readStringsandword(List<String> addressList) { if (s7PLC == null) { return null; } List<String> result = new ArrayList<>(); for (String address : addressList) { try { if (address.contains("-")) { address = address.substring(0, address.indexOf("-")); byte[] bytes = s7PLC.readByte(address, 14); if (bytes != null) { String str = new String(bytes, StandardCharsets.UTF_8); result.add(str); } } else { Short value = s7PLC.readInt16(address); result.add(value.toString()); } } catch (Exception e) { System.out.println("读取 " + address + " 失败:" + e.getMessage()); result.add(null); } } return result; } // 不连续地址写入Word public void WriteWord(List<String> address, List<Short> datas) { if (s7PLC == null) return; for (int i = 0; i < address.size(); i++) { String addr = address.get(i); short data = datas.get(i); if (addr.contains("-")) { outmesid(String.valueOf(data), addr); // 单独处理带破折号的地址 } else { s7PLC.writeInt16(addr, data); // 将数据写入单个地址 } } } // 字符串写入 public void outmesid(String data, String addr) { // System.out.println("outmesid: " + data); List<Byte> glassidlist = new ArrayList<>(); String[] parts = addr.split("-"); if (parts.length == 2) { addr = parts[0]; // 只保留 "-" 前面的部分 } for (char iditem : data.toCharArray()) { glassidlist.add(Byte.valueOf(String.valueOf(iditem))); } byte[] bytes = Bytes.toArray(glassidlist); S7controlalbia.getinstance().WriteByte(addr, bytes); } // 读取不连续word public List<Short> readWords(List<String> addresses) { if (s7PLC == null) { return null; } List<Short> data = new ArrayList<>(); for (String address : addresses) { try { // 单个地址 Short value = s7PLC.readInt16(address); data.add(value); } catch (Exception e) { System.out.println("读取 " + address + " 失败:" + e.getMessage()); } } return data; } // 读取时间 public Long readtime(String address) { if (s7PLC == null) return null; try { return s7PLC.readTime(address); } catch (Exception e) { System.out.println("读取 " + address + " 失败:" + e.getMessage()); return null; } } public void writetime(String address, long datas) { if (s7PLC == null) return; s7PLC.writeTime(address, datas); // 将数据写入单个地址 } private int extractAddressNumber(String address) { String numberStr = address.replaceAll("\\D+", ""); // 使用正则表达式提取数字部分 return Integer.parseInt(numberStr); } /** * 从指定的地址开始 连续按bit位读取 * * @param address 地址 * @param count 长度 * @return Boolean结果 */ public List<Boolean> ReadBits(String address, int count) { if (s7PLC == null) return null; List<String> addresslist = GetAddressList(address, count, 1); try { return s7PLC.readBoolean(addresslist); } catch (Exception e) { System.out.println("读取 " + address + " 失败:" + e.getMessage()); return null; } }; private List<String> GetAddressList(String address, int count, int addedbit) { List<String> addresslist = new ArrayList<String>(); String[] stringdatas = address.trim().split("\\."); if (stringdatas.length < 2 || !address.startsWith("DB")) return null; int dbwindex = 0; int bitindex = 0; if (stringdatas.length == 2) { dbwindex = Integer.parseInt(stringdatas[1]); } else if (stringdatas.length == 3) { dbwindex = Integer.parseInt(stringdatas[1]); bitindex = Integer.parseInt(stringdatas[2]); } else return null; addresslist.add(address); for (int i = 0; i < count - 1; i++) { int bitcurrent = bitindex + addedbit; if (bitcurrent > 7) { dbwindex += bitcurrent / 8; bitindex = 0; } else bitindex = bitcurrent; String endstr = stringdatas.length == 3 ? "." + bitindex : ""; addresslist.add(stringdatas[0] + "." + dbwindex + endstr); } return addresslist; } public void writeStrings(String data, String addr) { // List<Byte> glassidlist = new ArrayList<>(); String[] parts = addr.split("-"); if (parts.length == 2) { addr = parts[0]; } s7PLC.writeString(addr, data); } public String readStrings(String addr) { return s7PLC.readString(addr); } } springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java
@@ -17,10 +17,7 @@ // System.out.println("启动完成"); // new PlcHold().start(); new PlcHold().start(); // new PLCAutoMes().start(); // new Plchome().start(); springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java
@@ -106,14 +106,15 @@ // 根据玻璃id手动上片 @GetMapping("/Addglassid") public Result Addglassid(String glassid) { public Result Addglassid(String glassid) throws SQLException { Map<String, Object> map = new HashMap<>(); short taskno = homeMapper.SelectInTask(); if (taskno > 0) { map.put("message2", "500"); } else { // 调用伍上片函数 short results = spianService.selectAll(glassid); north_glass_buffer1 north_glass_buffer1 = jdbcConnections.SelectGlassByGlassIdOrderIdFrameId(glassid, "", ""); short results = spianService.selectAll(north_glass_buffer1); if (results == 200) { map.put("message2", "200"); } else if (results == 300) { springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java
@@ -15,10 +15,10 @@ @Select("select COUNT(if(a.state1=0,cell,0))as cell,ROUND(id/2)as id from (select *,max(state)as state1 from storage_cage a GROUP BY cage,cell)as a where (a.cage=#{cage1}-1 or a.cage=#{cage1}+1)and if(a.cage<6,a.cage>0 and a.cage<6,a.cage>5) and disabled=0 GROUP BY cage ORDER BY cell desc LIMIT 1") int selectCage(int cage1); // 获取笼子号订单号排序的空订单笼子 @Select("select a.cage,FrameBarcode,COUNT(if(a.order_id=#{orderids},a.order_id,null))as orderid,b.shu,c.shu2,a.cell,min(a.state)as state1,max(a.state)as state2,disabled,FrameBarcode from storage_cage a left join (select COUNT(*)shu,cage from storage_cage where order_id=#{orderids} GROUP BY cage)as b on a.cage=b.cage left join(select cage ,COUNT(glass_id)as shu2 from storage_cage GROUP BY cage)c on a.cage=c.cage where (order_id=#{orderids} or ''='') GROUP BY cage,cell HAVING state1=0 ORDER BY shu desc,shu2,state2 asc,cage asc;") @Select("select a.cage,FrameBarcode,COUNT(if(a.order_id=#{orderids},a.order_id,null))as orderid,b.shu,c.shu2,a.cell,min(a.state)as state1,max(a.state)as state2,disabled,FrameBarcode from storage_cage a left join (select COUNT(*)shu,cage from storage_cage where order_id=#{orderids} GROUP BY cage)as b on a.cage=b.cage left join(select cage ,COUNT(glass_id)as shu2 from storage_cage GROUP BY cage)c on a.cage=c.cage where (order_id=#{orderids} or ''='') and a.disabled=0 GROUP BY cage,cell HAVING state1=0 ORDER BY shu desc,shu2,state2 asc,cage asc;") List<StorageCage> selectAll(String orderids,String Fbarcode); //优先判断一次是否有同铝框的空位 @Select("select *,min(state) state1 from storage_cage where width>=(#{width}+#{width2}) GROUP BY cage,cell HAVING state1=0 and FrameBarcode=#{Fbarcode} ORDER BY width desc LIMIT 1;") @Select("select *,min(state) state1 from storage_cage where width>=(#{width}+#{width2}) GROUP BY cage,cell HAVING state1=0 and FrameBarcode=#{Fbarcode} and disabled=0 ORDER BY width desc LIMIT 1;") List<StorageCage> selectAllFbarcode(String Fbarcode,double width,double width2); // 获取判断该格子是否需要把外片推入内片位置 @Select("select state from storage_cage where cage=#{cage} and cell=#{cell} and tier=1;") @@ -63,7 +63,7 @@ int selectGlassState(int cage, int cell); // 判断该调拨的笼子 @Select("select glass_id,cage,cell,max(state)as shu,ROUND(id/2)as prcid,id,abs(#{cell}-cell)as xuhao from storage_cage where width>=#{width} and cage>#{cage1} and cage<#{cage2} GROUP BY cage,cell HAVING shu=0 order by abs(#{cage} - cage),xuhao desc limit 1;") @Select("select glass_id,cage,cell,max(state)as shu,ROUND(id/2)as prcid,id,abs(#{cell}-cell)as xuhao from storage_cage where width>=#{width} and cage>#{cage1} and cage<#{cage2} and disabled=0 GROUP BY cage,cell HAVING shu=0 order by abs(#{cage} - cage),xuhao desc limit 1;") StorageCage selectGlassCage(int cage, double width, int cage1, int cage2,int cell); // 删除笼子信息(出片) springboot-vue3/src/main/java/com/example/springboot/service/OutSliceServive.java
@@ -92,7 +92,7 @@ public void DeleteByGlassIDs(String glassid) { List<StorageCage> glassinfor = homeMapper.SelectStorageInfoByGlassId(glassid); for (StorageCage storageCage : glassinfor) { if (storageCage.getState().equals("2")) { if (storageCage.getState().equals("2")||storageCage.getState().equals("1")) { homeMapper.UpdataCageWidth(storageCage.getGlassWidth(), storageCage.getCage(), storageCage.getCell()); } } springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java
@@ -17,8 +17,6 @@ import com.example.springboot.mapper.SpianMapper; import com.google.common.primitives.Bytes; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; @Service public class SpianService { @@ -26,7 +24,7 @@ private SpianMapper spianMapper; // @GetMapping("/all") public Short selectAll(String glassid) { public Short selectAll(north_glass_buffer1 glasslist) { int cage1 = 0; int cells; @@ -36,8 +34,8 @@ int prctier; double width; double minwidth = 0; north_glass_buffer1 glasslist = spianMapper.selectGlass(glassid); // 获取玻璃参数 //north_glass_buffer1 glasslist = spianMapper.selectGlass(glassid); // 获取玻璃参数 // 如果没有此id时 if (glasslist == null) { return (300); @@ -46,7 +44,7 @@ double widths = glasslist.getglasslengthmm(); String orderids = glasslist.getordernumber(); String FrameBarcode = glasslist.getFrameBarcode(); String glassid=glasslist.getbarcode(); List<String> adddresslist = new ArrayList<>(); adddresslist.add("DB105.0");// 进片车起始位置 adddresslist.add("DB105.2");// 进片车目标位置