PlcParamReadTest.java 2.8 KB

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