#!/bin/bash # 本地 PLC 布局切换联调脚本: # 1. 启动本地 PLC(S7comm 服务端,plc_server.py) # 2. 启动状态切换写入器(plc_sim,每 5 秒写一个状态) # 3. 启动自动重启调度器(auto_reboot.sh,按配置定时重启) # Ctrl+C 可完全退出所有服务。 # 注意:TCP 102 为特权端口,需要 root 运行。 DIR="$(cd "$(dirname "$0")" && pwd)" CONF="${CONF:-${DIR}/channels.conf}" PLCPID=""; SIMPID=""; REBOOTPID="" cleanup() { echo "" echo "== 正在停止服务 ==" [ -n "$SIMPID" ] && kill "$SIMPID" 2>/dev/null && wait "$SIMPID" 2>/dev/null [ -n "$REBOOTPID" ] && kill "$REBOOTPID" 2>/dev/null && wait "$REBOOTPID" 2>/dev/null [ -n "$PLCPID" ] && kill "$PLCPID" 2>/dev/null && wait "$PLCPID" 2>/dev/null echo "== 已停止 ==" } trap cleanup INT TERM if ! command -v python3 >/dev/null 2>&1; then echo "ERROR: python3 not found" >&2 exit 1 fi for bin in plc_sim rtsp_multi_view; do if [ ! -x "${DIR}/build/${bin}" ]; then echo "ERROR: ${DIR}/build/${bin} not built" >&2 exit 1 fi done echo "== [1/3] 启动本地 PLC (plc_server.py) ==" python3 "${DIR}/plc_server.py" -p 102 & PLCPID=$! echo "== [2/3] 启动状态切换器 (plc_sim, 每 5 秒切换) ==" "${DIR}/build/plc_sim" -c "$CONF" -t 5000 & SIMPID=$! echo "== [3/3] 启动自动重启调度器 (auto_reboot) ==" "${DIR}/auto_reboot.sh" -c "$CONF" & REBOOTPID=$! wait