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); } }