package com.mes.ui; import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType; import com.github.xingshuangs.iot.protocol.s7.service.S7PLC; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; /** * PLC 焊接参数定时读取测试。 * * 每 3 秒读取一次 A/B 工位的焊接参数(电压、电流、送丝速度、job号)并打印到控制台。 * * 焊接参数点位(参考 PlcUtil.getParamDyDl): * A 面:电压 DB1010.2 (Float32)、电流 DB1010.8 (Float32)、送丝速度 DB1010.14 (Float32)、job号 DB1010.20 (Int16) * B 面:电压 DB1010.26 (Float32)、电流 DB1010.34 (Float32)、送丝速度 DB1010.42 (Float32)、job号 DB1010.48 (Int16) * * 运行:直接运行 main 方法即可,按 Ctrl+C 退出。 */ public class PlcParamReadTest { /** PLC IP 地址(与 MesClient.s7PLC 一致) */ private static final String PLC_IP = "192.168.7.100"; /** 定时周期(秒) */ private static final long PERIOD_SECONDS = 3; private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static void main(String[] args) { S7PLC s7PLC = new S7PLC(EPlcType.S1200, PLC_IP); s7PLC.setConnectTimeout(1000); s7PLC.setReceiveTimeout(1000); ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); scheduler.scheduleAtFixedRate(() -> readOnce(s7PLC), 0, PERIOD_SECONDS, TimeUnit.SECONDS); // JVM 退出时关闭调度器 Runtime.getRuntime().addShutdownHook(new Thread(scheduler::shutdownNow)); } private static void readOnce(S7PLC s7PLC) { String now = SDF.format(new Date()); try { // A 工位 Float dya = s7PLC.readFloat32("DB1010.2"); // 电压 Float dla = s7PLC.readFloat32("DB1010.8"); // 电流 Float ssa = s7PLC.readFloat32("DB1010.14"); // 送丝速度 Short joba = s7PLC.readInt16("DB1010.20"); // job号 // B 工位 Float dyb = s7PLC.readFloat32("DB1010.26"); // 电压 Float dlb = s7PLC.readFloat32("DB1010.34"); // 电流 Float ssb = s7PLC.readFloat32("DB1010.42"); // 送丝速度 Short jobb = s7PLC.readInt16("DB1010.48"); // job号 System.out.println("[" + now + "] A面 -> 电压=" + dya + " V, 电流=" + dla + " A, 送丝速度=" + ssa + ", job=" + joba); System.out.println("[" + now + "] B面 -> 电压=" + dyb + " V, 电流=" + dlb + " A, 送丝速度=" + ssb + ", job=" + jobb); } catch (Exception e) { System.err.println("[" + now + "] 读取PLC焊接参数失败: " + e.getMessage()); } } }