plc_server.sh 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/bin/bash
  2. # 本地 PLC 布局切换联调脚本:
  3. # 1. 启动本地 PLC(S7comm 服务端,plc_server.py)
  4. # 2. 启动状态切换写入器(plc_sim,每 5 秒写一个状态)
  5. # 3. 启动自动重启调度器(auto_reboot.sh,按配置定时重启)
  6. # Ctrl+C 可完全退出所有服务。
  7. # 注意:TCP 102 为特权端口,需要 root 运行。
  8. DIR="$(cd "$(dirname "$0")" && pwd)"
  9. CONF="${CONF:-${DIR}/channels.conf}"
  10. PLCPID=""; SIMPID=""; REBOOTPID=""
  11. cleanup() {
  12. echo ""
  13. echo "== 正在停止服务 =="
  14. [ -n "$SIMPID" ] && kill "$SIMPID" 2>/dev/null && wait "$SIMPID" 2>/dev/null
  15. [ -n "$REBOOTPID" ] && kill "$REBOOTPID" 2>/dev/null && wait "$REBOOTPID" 2>/dev/null
  16. [ -n "$PLCPID" ] && kill "$PLCPID" 2>/dev/null && wait "$PLCPID" 2>/dev/null
  17. echo "== 已停止 =="
  18. }
  19. trap cleanup INT TERM
  20. if ! command -v python3 >/dev/null 2>&1; then
  21. echo "ERROR: python3 not found" >&2
  22. exit 1
  23. fi
  24. for bin in plc_sim rtsp_multi_view; do
  25. if [ ! -x "${DIR}/build/${bin}" ]; then
  26. echo "ERROR: ${DIR}/build/${bin} not built" >&2
  27. exit 1
  28. fi
  29. done
  30. echo "== [1/3] 启动本地 PLC (plc_server.py) =="
  31. python3 "${DIR}/plc_server.py" -p 102 &
  32. PLCPID=$!
  33. echo "== [2/3] 启动状态切换器 (plc_sim, 每 5 秒切换) =="
  34. "${DIR}/build/plc_sim" -c "$CONF" -t 5000 &
  35. SIMPID=$!
  36. echo "== [3/3] 启动自动重启调度器 (auto_reboot) =="
  37. "${DIR}/auto_reboot.sh" -c "$CONF" &
  38. REBOOTPID=$!
  39. wait