package com.mh.user.job; import com.mh.user.constants.Constant; import com.mh.user.entity.AddCronJobReq; import com.mh.user.manage.QuartzManager; import com.mh.user.serialport.SerialPortListener; import com.mh.user.serialport.SerialPortUtil; import com.mh.user.service.DeviceCodeParamService; import com.mh.user.utils.CacheUtil; import com.mh.user.utils.GetReadOrder485; import com.mh.user.utils.TimedTask2; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; /** * @author ljf * @title : * @description : 自动执行采集程序,通过 * @updateTime 2020-05-15 * @throws : */ @Component public class CollectionLoopRunner implements ApplicationRunner { @Resource QuartzManager quartzManager; public static SerialPort serialPort = null; @Resource private DeviceCodeParamService deviceCodeParamService; @Override public void run(ApplicationArguments args) throws Exception { // collectionMeterAndCloud();//采集 // Constant.WEB_FLAG=false; //恢复采集 // 初始化指令设备参数 initialDeviceCodeParams(); } private void initialDeviceCodeParams() { GetReadOrder485 getReadOrder485 = new GetReadOrder485(); int r=deviceCodeParamService.queryCount(); //查询记录数 if (r==0){ getReadOrder485.createOrderParam(); //生成采集参数 } int r1 = deviceCodeParamService.queryCount2(); //查询记录数 if (r1 == 0) { getReadOrder485.createOrderParam2(); //生成采集参数 } int r2=deviceCodeParamService.queryCount3();//查询记录数 if (r2==0){ getReadOrder485.createOrderParam3(); //生成采集参数 } // 分组参数缓存 CacheUtil instance = CacheUtil.getInstance(); } public void test() throws Exception { System.out.println("测试定时采集开关"); // 执行定义的定时采集程序 Map params = new HashMap<>(); params.put("id", "2"); params.put("name", "test1"); //每 1 分钟 执行一次 AddCronJobReq addCronJobReq = new AddCronJobReq(); addCronJobReq.setDate("0/12 * * * * ?"); // addCronJobReq.setDate("0/5 * * * * ?"); addCronJobReq.setJobClass("JobTest1"); addCronJobReq.setJobGroupName("JobTestGroup1"); addCronJobReq.setJobName("Test1"); addCronJobReq.setParams(params); addCronJobReq.setTriggerGroupName("triggerTestGroup1"); addCronJobReq.setTriggerName("triggerTest1"); quartzManager.addCronJob(addCronJobReq); } public void test1() throws Exception { System.out.println("测试定时采集开关"); // 执行定义的定时采集程序 Map params = new HashMap<>(); params.put("id", "1"); params.put("name", "test"); //每 1 分钟 执行一次 AddCronJobReq addCronJobReq = new AddCronJobReq(); addCronJobReq.setDate("0/10 * * * * ?"); // addCronJobReq.setDate("0/5 * * * * ?"); addCronJobReq.setJobClass("JobTest"); addCronJobReq.setJobGroupName("JobTestGroup"); addCronJobReq.setJobName("Test"); addCronJobReq.setParams(params); addCronJobReq.setTriggerGroupName("triggerTestGroup"); addCronJobReq.setTriggerName("triggerTest"); quartzManager.addCronJob(addCronJobReq); } /** * 定时采集电表和冷量计 * * @throws Exception */ public void collectionMeterAndCloud() throws Exception { // 执行定义的定时采集程序 Map params = new HashMap<>(); params.put("id", "6"); params.put("name", "cloud_meter"); AddCronJobReq addCronJobReq = new AddCronJobReq(); //每 2小时执行一次 // addCronJobReq.setDate("0 0 0/2 * * ?"); //0 0 0/2 * * ? //每 40 分钟 执行一次 // addCronJobReq.setDate("0 10/40 * * * ?"); //每 30 分钟 执行一次 // addCronJobReq.setDate("0 0/30 * * * ?"); //广州理工 //每 20 分钟 执行一次 // addCronJobReq.setDate("0 0/20 * * * ?"); //每 10 分钟 执行一次 addCronJobReq.setDate("0 0/10 * * * ?"); //华厦 // 每 3 分钟 执行一次 // addCronJobReq.setDate("35 0/2 * * * ?"); //每 2 分钟 执行一次 // addCronJobReq.setDate("25 0/2 * * * ?"); //每 1 分钟 执行一次 // addCronJobReq.setDate("0/10 * * * * ?"); // addCronJobReq.setDate("0/5 * * * * ?"); addCronJobReq.setJobClass("JobCloudAndMeter"); addCronJobReq.setJobGroupName("JobCloudAndMeterGroup"); addCronJobReq.setJobName("CloudAndMeter"); addCronJobReq.setParams(params); addCronJobReq.setTriggerGroupName("triggerCloudAndMeterGroup"); addCronJobReq.setTriggerName("triggerCloudAndMeter"); quartzManager.addCronJob(addCronJobReq); } /** * 定时采集冷量计 * * @throws Exception */ public void collectionCloud() throws Exception { // 执行定义的定时采集程序 Map params = new HashMap<>(); params.put("id", "1"); params.put("name", "cloud"); AddCronJobReq addCronJobReq = new AddCronJobReq(); //每 2 分钟 执行一次 addCronJobReq.setDate("25 0/2 * * * ?"); // addCronJobReq.setDate("0/5 * * * * ?"); addCronJobReq.setJobClass("JobCloud"); addCronJobReq.setJobGroupName("JobCloudGroup"); addCronJobReq.setJobName("Cloud"); addCronJobReq.setParams(params); addCronJobReq.setTriggerGroupName("triggerCloudGroup"); addCronJobReq.setTriggerName("triggerCloud"); quartzManager.addCronJob(addCronJobReq); } /** * 定时采集电表 * * @throws Exception */ public void collectionMeter() throws Exception { // 执行定义的定时采集程序 Map params = new HashMap<>(); params.put("id", "2"); params.put("name", "meter"); AddCronJobReq addCronJobReq = new AddCronJobReq(); //每 3 分钟 执行一次 addCronJobReq.setDate("35 0/2 * * * ?"); // addCronJobReq.setDate("0/20 * * * * ?"); addCronJobReq.setJobClass("JobMeter"); addCronJobReq.setJobGroupName("JobMeterGroup"); addCronJobReq.setJobName("Meter"); addCronJobReq.setParams(params); addCronJobReq.setTriggerGroupName("triggerMeterGroup"); addCronJobReq.setTriggerName("triggerMeter"); quartzManager.addCronJob(addCronJobReq); } public void testSerialPort(){ String portname = "COM7"; //TestA(); //查看所有串口 SerialPortUtil serialPortUtil = SerialPortUtil.getSerialPortUtil(); ArrayList port = serialPortUtil.findPort(); System.out.println("发现全部串口:" + port); System.out.println("打开指定portname:" + portname); //打开该对应portname名字的串口 CollectionLoopRunner.serialPort = serialPortUtil.openPort(portname, 2400, SerialPort.DATABITS_8, SerialPort.PARITY_EVEN, SerialPort.PARITY_ODD); byte[] HEX = SerialPortListener.hexStr2Byte("FEFEFE6810398710810000000103901F007C16"); serialPortUtil.sendToPort(CollectionLoopRunner.serialPort, HEX); //给对应的serialPort添加监听器 serialPortUtil.addListener(CollectionLoopRunner.serialPort, new SerialPortListener()); } public void plcAnalytic() { String portName = "COM1"; //查看所有串口 SerialPortUtil serialPortUtil = SerialPortUtil.getSerialPortUtil(); //打开该对应portName名字的串口 if (CollectionLoopRunner.serialPort == null) { CollectionLoopRunner.serialPort = serialPortUtil.openPort(portName, 19200, SerialPort.DATABITS_8, SerialPort.PARITY_NONE, SerialPort.PARITY_ODD); byte[] hex = SerialPortListener.hexStr2Byte("A55A230000000022".replaceAll("\\s*", "")); serialPortUtil.sendToPort(CollectionLoopRunner.serialPort, hex); //给对应的serialPort添加监听器-->设置串口的Listener SerialPortUtil.setListenerToSerialPort(CollectionLoopRunner.serialPort, serialPortEvent -> { if (serialPortEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) { byte[] bytes = serialPortUtil.readFromPort(CollectionLoopRunner.serialPort); String needData = SerialPortListener.printHexString(bytes); //数据校验 校验数据长度、起始5A A5、数据sum位 // if (PlcUtil.makeChecksum(needData)) { // //数据解析方法 此处编写你的解析方法,根据获取到的数据编写适合自己的方法 // } } }); } } }