Newer
Older
pgdsc / src / com / szpg / plc / PGDSCServlet.java
ty-pc\admin on 6 Nov 2018 5 KB 20181106 提交
package com.szpg.plc;

import java.util.List;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import com.szpg.db.dao.PgAcuDao;
import com.szpg.db.dao.impl.PgAcuDaoImpl;
import com.szpg.db.data.PgAcu;
import com.szpg.plc.server.ACUClient;
import com.szpg.plc.server.ACUClientUtil;
import com.szpg.task.ACUSocketCheckTask;
import com.szpg.task.ReadCH4StatusTask;
import com.szpg.task.ReadCH4ValueTask;
import com.szpg.task.ReadCOStatusTask;
import com.szpg.task.ReadCOValueTask;
import com.szpg.task.ReadDSStatusTask;
import com.szpg.task.ReadHSStatusTask;
import com.szpg.task.ReadHSValueTask;
import com.szpg.task.ReadO2StatusTask;
import com.szpg.task.ReadO2ValueTask;
import com.szpg.task.ReadWSStatusTask;
import com.szpg.task.ReadWSValueTask;
import com.szpg.task.ReadYWStatusTask;

public class PGDSCServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = -4422075957571639803L;
	
	@Override
	public void init() throws ServletException {
		// 1获取数据库中所有ACU
		PgAcuDao acuDao = new PgAcuDaoImpl();
		List<PgAcu> acuList = acuDao.findAllACU();
		
		// 2遍历ACU列表,获取其IP地址与端口号
		for (PgAcu acu : acuList) {
			ACUClient client = new ACUClient(acu.getAcu_host(), Integer.parseInt(acu.getAcu_port()));
			
			client.setAcucode(acu.getAcu_code());
			client.setNet(acu.getAcu_net());
			client.setNode(acu.getAcu_node());
			client.setUnit(acu.getAcu_unit());
			
			// 3将ACU的信息加入到map中
			ACUClientUtil.getInstance().addClient(client);
			
			// 4新建线程启动client
			new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new ACUSocketCheckTask(client), 0, 30, TimeUnit.SECONDS);
		}
		
		// 3启动查询温湿度的定时任务
		sendWSCommand();
		sendWSStatusCommand();
		
		// 4启动查询甲烷的定时任务
		sendCH4Command();
		sendCH4StatusCommand();
		
		// 5启动查询一氧化碳的定时任务
		sendCOCommand();
		sendCOStatusCommand();
		
		// 6氧气
		sendO2Command();
		sendO2StatusCommand();
		
		// 7硫化氢
		sendHSCommand();
		sendHSStatusCommand();
		
		// 8对射报警
		sendDSStatusCommand();
		
		// 9液位报警
		sendYWStatusCommand();
	}
	
	/**
	 * 发送查询温湿度监测值命令
	 * 
	 * @param client
	 */
	private void sendWSCommand() {
		ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1);
		sche.scheduleWithFixedDelay(new ReadWSValueTask(), 20, 600, TimeUnit.SECONDS);
	}
	
	/**
	 * 发送查询温湿度报警状态命令
	 * @param client
	 */
	private void sendWSStatusCommand() {
		ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1);
		sche.scheduleWithFixedDelay(new ReadWSStatusTask(), 25, 600, TimeUnit.SECONDS);
	}
	
	/**
	 * 发送查询甲烷监测值命令
	 * 
	 * @param client
	 */
	private void sendCH4Command() {
		ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1);
		sche.scheduleWithFixedDelay(new ReadCH4ValueTask(), 10, 600, TimeUnit.SECONDS);
	}
	
	/**
	 * 发送查询甲烷报警状态命令
	 * @param client
	 */
	private void sendCH4StatusCommand() {
		ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1);
		sche.scheduleWithFixedDelay(new ReadCH4StatusTask(), 15, 600, TimeUnit.SECONDS);
	}
	
	/**
	 * 发送查询一氧化碳监测值命令
	 * 
	 * @param client
	 */
	private void sendCOCommand() {
		ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1);
		sche.scheduleWithFixedDelay(new ReadCOValueTask(), 30, 600, TimeUnit.SECONDS);
	}
	
	/**
	 * 发送查询一氧化碳报警状态命令
	 * @param client
	 */
	private void sendCOStatusCommand() {
		ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1);
		sche.scheduleWithFixedDelay(new ReadCOStatusTask(), 35, 600, TimeUnit.SECONDS);
	}
	
	/**
	 * 发送查询氧气监测值命令
	 * 
	 * @param client
	 */
	private void sendO2Command() {
		ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1);
		sche.scheduleWithFixedDelay(new ReadO2ValueTask(), 40, 600, TimeUnit.SECONDS);
	}
	
	/**
	 * 发送查询一氧化碳报警状态命令
	 * @param client
	 */
	private void sendO2StatusCommand() {
		ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1);
		sche.scheduleWithFixedDelay(new ReadO2StatusTask(), 45, 600, TimeUnit.SECONDS);
	}
	
	/**
	 * 发送查询硫化氢监测值命令
	 * 
	 * @param client
	 */
	private void sendHSCommand() {
		ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1);
		sche.scheduleWithFixedDelay(new ReadHSValueTask(), 50, 600, TimeUnit.SECONDS);
	}
	
	/**
	 * 发送查询硫化氢报警状态命令
	 * @param client
	 */
	private void sendHSStatusCommand() {
		ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1);
		sche.scheduleWithFixedDelay(new ReadHSStatusTask(), 55, 600, TimeUnit.SECONDS);
	}
	
	/**
	 * 发送查询对射报警状态命令
	 * @param client
	 */
	private void sendDSStatusCommand() {
		ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1);
		sche.scheduleWithFixedDelay(new ReadDSStatusTask(), 60, 600, TimeUnit.SECONDS);
	}
	
	/**
	 * 发送查询爆管液位报警状态命令
	 * @param client
	 */
	private void sendYWStatusCommand() {
		ScheduledExecutorService sche = new ScheduledThreadPoolExecutor(1);
		sche.scheduleWithFixedDelay(new ReadYWStatusTask(), 70, 600, TimeUnit.SECONDS);
	}
}