从 MT2-AM8 模拟量模块迁移到 Easy521 PLC(Modbus TCP)
- 读取 D700(阀后流量)、D710(阀后压力)、D720(阀前压力), 读用功能码 03,0~32000 线性映射到各自量程(300 SLM / 400 kPa / 300 kPa) - 输出 D730(电机位置,0~10V),写用功能码 06,行程仍为 0~1000、死区 800 - 复用 MT2 骨架,保留 get_flow/get_pressure/set_motor_position 接口, channel 参数改为直接 Modbus 地址 - config.py 新增 PLC 设置,保留 MT2AM8 设置为死代码(MT2AM8Client 类保留) - 同步更新 README.md 中的硬件接线、配置默认值与模块职责描述
This commit is contained in:
+25
-20
@@ -36,15 +36,15 @@ from flow_control import opening_to_motor_position
|
||||
# 实验参数(可在本文件修改,不影响 config.py)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# 四个传感器的 AI 通道(0 起始,MT2-AM8 AI0~AI3)。
|
||||
# “后”= 控流阀出口侧(靠近流量计/负载一侧),沿用 config 的原始通道;
|
||||
# “前”= 控流阀入口侧(靠近减压阀一侧),为本次新增传感器,请按实际接线确认。
|
||||
PRESSURE_AFTER_CHANNEL = config.PRESSURE_INPUT_CHANNEL # 后压力,默认 0
|
||||
FLOW_AFTER_CHANNEL = config.FLOW_INPUT_CHANNEL # 后流量,默认 1
|
||||
PRESSURE_BEFORE_CHANNEL = 2 # 前压力(新增,需确认)
|
||||
FLOW_BEFORE_CHANNEL = None # 前流量(新增,需确认)
|
||||
# 控流阀前后传感器的 PLC 寄存器地址(直接 Modbus 地址)。
|
||||
# “后”= 控流阀出口侧(靠近流量计/负载一侧),沿用 config 的原始地址;
|
||||
# “前”= 控流阀入口侧(靠近减压阀一侧),按实际接线确认。
|
||||
PRESSURE_AFTER_CHANNEL = config.PRESSURE_AFTER_ADDR # 后压力 D710
|
||||
FLOW_AFTER_CHANNEL = config.FLOW_AFTER_ADDR # 后流量 D700
|
||||
PRESSURE_BEFORE_CHANNEL = config.PRESSURE_BEFORE_ADDR # 前压力 D720
|
||||
FLOW_BEFORE_CHANNEL = None # 前流量(暂无传感器)
|
||||
|
||||
MOTOR_CHANNEL = config.MOTOR_OUTPUT_CHANNEL # AO 通道
|
||||
MOTOR_CHANNEL = config.MOTOR_OUTPUT_ADDR # 电机输出 D730
|
||||
|
||||
# 开度扫描:0%~100%,默认 5% 间隔,共 21 个开度值,随机打乱。
|
||||
OPENING_MIN_PCT = 0.0
|
||||
@@ -430,7 +430,7 @@ def check_safety(pressure_before, flow_before, pressure_after, flow_after):
|
||||
|
||||
|
||||
def set_opening(hardware, opening_pct):
|
||||
"""把 0~100% 开度换算成反向电机行程并下发给 MT2-AM8。"""
|
||||
"""把 0~100% 开度换算成反向电机行程并下发给 PLC。"""
|
||||
position = opening_to_motor_position(
|
||||
opening_pct,
|
||||
config.MOTOR_OPEN_POSITION,
|
||||
@@ -485,7 +485,7 @@ def build_logger():
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
def parse_args(argv=None):
|
||||
parser = argparse.ArgumentParser(description="MT2-AM8 气体流量开环扫点实验")
|
||||
parser = argparse.ArgumentParser(description="PLC 气体流量开环扫点实验")
|
||||
parser.add_argument("--min", type=float, default=OPENING_MIN_PCT,
|
||||
help=f"扫描起始开度(%%),默认 {OPENING_MIN_PCT:.0f}")
|
||||
parser.add_argument("--max", type=float, default=OPENING_MAX_PCT,
|
||||
@@ -507,7 +507,7 @@ def run(args):
|
||||
logger = build_logger()
|
||||
|
||||
try:
|
||||
from PcControl import MT2AM8Client
|
||||
from PcControl import Easy521ModbusClient
|
||||
except ModuleNotFoundError as exc:
|
||||
if exc.name and exc.name.startswith("pymodbus"):
|
||||
logger.critical(
|
||||
@@ -517,12 +517,17 @@ def run(args):
|
||||
return 6
|
||||
raise
|
||||
|
||||
hardware = MT2AM8Client(
|
||||
host=config.MT2AM8_HOST,
|
||||
port=config.MT2AM8_PORT,
|
||||
slave_id=config.MT2AM8_SLAVE_ID,
|
||||
pressure_range=config.PRESSURE_RANGE_KPA,
|
||||
flow_range=config.FLOW_METER_RANGE_SLM,
|
||||
hardware = Easy521ModbusClient(
|
||||
host=config.PLC_HOST,
|
||||
port=config.PLC_PORT,
|
||||
slave_id=config.PLC_SLAVE_ID,
|
||||
flow_addr=config.FLOW_AFTER_ADDR,
|
||||
flow_range=config.FLOW_AFTER_RANGE_SLM,
|
||||
pressure_before_addr=config.PRESSURE_BEFORE_ADDR,
|
||||
pressure_before_range=config.PRESSURE_BEFORE_RANGE_KPA,
|
||||
pressure_after_addr=config.PRESSURE_AFTER_ADDR,
|
||||
pressure_after_range=config.PRESSURE_AFTER_RANGE_KPA,
|
||||
motor_output_addr=config.MOTOR_OUTPUT_ADDR,
|
||||
)
|
||||
|
||||
openings = generate_openings(
|
||||
@@ -538,10 +543,10 @@ def run(args):
|
||||
exit_code = 0
|
||||
|
||||
try:
|
||||
logger.info("正在连接 MT2-AM8 %s:%s", config.MT2AM8_HOST, config.MT2AM8_PORT)
|
||||
logger.info("正在连接 PLC %s:%s", config.PLC_HOST, config.PLC_PORT)
|
||||
connected = bool(hardware.connect())
|
||||
if not connected:
|
||||
logger.critical("无法连接 MT2-AM8,实验中止")
|
||||
logger.critical("无法连接 PLC,实验中止")
|
||||
exit_code = 2
|
||||
return exit_code
|
||||
|
||||
@@ -671,7 +676,7 @@ def run(args):
|
||||
hardware.disconnect()
|
||||
except Exception:
|
||||
exit_code = max(exit_code, 5)
|
||||
logger.exception("断开 MT2-AM8 时发生异常")
|
||||
logger.exception("断开 PLC 时发生异常")
|
||||
|
||||
if recorder is not None:
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user