plc_server.sh 1.1 KB

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