You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
235 lines
8.1 KiB
235 lines
8.1 KiB
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<String, String> 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<String, String> 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<String, String> 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<String, String> 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<String, String> 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<String> 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)) { |
|
// //数据解析方法 此处编写你的解析方法,根据获取到的数据编写适合自己的方法 |
|
// } |
|
} |
|
}); |
|
} |
|
} |
|
|
|
}
|
|
|