package com.zy.asrs.task; import HslCommunication.Core.Types.OperateResult; import HslCommunication.Core.Types.OperateResultExOne; import HslCommunication.Profinet.Siemens.SiemensPLCS; import HslCommunication.Profinet.Siemens.SiemensS7Net; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.SlaveType; import com.zy.core.model.DevpSlave; import com.zy.core.model.protocol.StaProtocol; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.SiemensDevpThread; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.Map; @Component public class DevpReadScheduler { @Autowired private SlaveProperties slaveProperties; //出入库站点检测报警信息 public static final ArrayList outInAlarmStaNos = new ArrayList(){{ add(101);add(102);add(104); add(201);add(202);add(204); add(340);add(345); }}; public static final ArrayList staNos2 = new ArrayList() {{ add(302);add(304); add(305);add(306); add(307);add(308); add(310);add(311); add(312);add(313); add(314);add(315); add(316);add(318); add(319);add(320); add(321);add(322); add(323);add(324); add(326);add(327); add(328);add(329); add(330);add(332); add(334);add(335); add(336);add(337); add(338);add(342); add(343);add(344); }}; public static final ArrayList staNos3 = new ArrayList() {{//218 add(302);add(304); add(315);add(322); add(324);add(330); add(332);add(337); }}; public static final ArrayList staNos4 = new ArrayList() {{//250 add(318);add(320); add(343); }}; @Scheduled(cron = "0/1 * * * * ? ") public void read() { try { for (DevpSlave slave : slaveProperties.getDevp()) { SiemensS7Net siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp()); siemensS7Net.setRack(slave.getRack().byteValue()); siemensS7Net.setSlot(slave.getSlot().byteValue()); OperateResult connect = siemensS7Net.ConnectServer(); SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, slave.getId()); Map station = devpThread.getStation(); if (connect.IsSuccess) { //出入库站点检测报警信息 Thread.sleep(100); for (Integer staNo : outInAlarmStaNos) { OperateResultExOne result5 = siemensS7Net.Read("DB" + staNo + ".20.0", (short) 2); if (result5.IsSuccess) { if (staNo == 101 || staNo == 201) { staNo--; } else { staNo++; } StaProtocol staProtocol = station.get(staNo); boolean[] status = siemensS7Net.getByteTransform().TransBool(result5.Content, 0, 2); staProtocol.setBarcodeErr(status[4]);//扫码失败 staProtocol.setFrontErr(status[8]);//前超限 staProtocol.setBackErr(status[9]);//后超限 staProtocol.setLeftErr(status[10]);//左超限 staProtocol.setRightErr(status[11]);//右超限 staProtocol.setHighErr(status[12]);//超高 staProtocol.setWeightErr(status[13]);//超重 } } Thread.sleep(100); for (Integer staNo : staNos2) { OperateResultExOne result5 = siemensS7Net.Read("DB" + staNo + ".0", (short) 48); if (result5.IsSuccess) { StaProtocol staProtocol = station.get(staNo); StaProtocol staProtocol300 = station.get(300); if (null == staProtocol) { staProtocol = new StaProtocol(); staProtocol.setSiteId(staNo); station.put(staNo, staProtocol); } boolean[] status1 = siemensS7Net.getByteTransform().TransBool(result5.Content, 1, 1); staProtocol.setAutoing(staProtocol300.isAutoing()); // 自动 staProtocol.setLoading(!status1[2]); // 有物 if (staNos3.contains(staNo) || staNos4.contains(staNo)) { continue; } if (staNo == 344) { staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result5.Content, 34)); // 工作号 } else { staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result5.Content, 22)); // 工作号 } } } Thread.sleep(100); for (Integer staNo : staNos3) { OperateResultExOne result5 = siemensS7Net.Read("DB" + staNo + ".22.0", (short) 2); OperateResultExOne result6 = siemensS7Net.Read("DB" + staNo + ".218.0", (short) 2); if (result5.IsSuccess && result6.IsSuccess) { StaProtocol staProtocol = station.get(staNo); short wrkNo1 = siemensS7Net.getByteTransform().TransInt16(result5.Content, 0); short wrkNo2 = siemensS7Net.getByteTransform().TransInt16(result6.Content, 0); short wrkNo = 0; if (wrkNo1 != 0) { wrkNo = wrkNo1; } if (wrkNo2 != 0) { wrkNo = wrkNo2; } staProtocol.setWorkNo(wrkNo); // 工作号 } } Thread.sleep(100); for (Integer staNo : staNos4) { OperateResultExOne result5 = siemensS7Net.Read("DB" + staNo + ".22.0", (short) 2); OperateResultExOne result6 = siemensS7Net.Read("DB" + staNo + ".250.0", (short) 2); if (result5.IsSuccess && result6.IsSuccess) { StaProtocol staProtocol = station.get(staNo); short wrkNo1 = siemensS7Net.getByteTransform().TransInt16(result5.Content, 0); short wrkNo2 = siemensS7Net.getByteTransform().TransInt16(result6.Content, 0); short wrkNo = 0; if (wrkNo1 != 0) { wrkNo = wrkNo1; } if (wrkNo2 != 0) { wrkNo = wrkNo2; } staProtocol.setWorkNo(wrkNo); // 工作号 } } } siemensS7Net.ConnectClose(); } } catch (Exception e) { e.printStackTrace(); } } }