Files
motorDriverTests/ioc/startioc.py

67 lines
2.2 KiB
Python
Executable File

#!/usr/bin/env python3
# This script is used to start the test IOC and is usually run as part of a
# test startup procedure. It autogenerates an IOC shell script from motors.yaml
# which contains the IP adresses and ports of the motor controllers.
import yaml
import os
import subprocess
import sys
from pathlib import Path
def startioc():
root_dir = os.path.dirname(__file__) + '/../'
with open(root_dir + "config.yaml", "r") as f:
config = yaml.safe_load(f)
with open(root_dir + 'ioc/config.cmd', "w") as out:
# General configuration
out.write(
f'epicsEnvSet("PVPREFIX", "{config["pvprefix"]}")\n')
out.write(
f'epicsEnvSet("IOCDIR", "{root_dir + "ioc"}" )\n')
# Motor configuration
out.write(
f'epicsEnvSet("TURBOPMAC_VERSION", "{config["versions"]["turboPmac"]}")\n')
out.write(
f'epicsEnvSet("MASTERMACS_VERSION", "{config["versions"]["masterMacs"]}")\n')
out.write(
f'epicsEnvSet("TURBOPMAC1_IP", "{config["controllers"]["turboPmac1"]["ip"]}")\n')
out.write(
f'epicsEnvSet("TURBOPMAC1_PORT", "{config["controllers"]["turboPmac1"]["port"]}")\n')
out.write(
f'epicsEnvSet("MASTERMACS1_IP", "{config["controllers"]["masterMacs1"]["ip"]}")\n')
out.write(
f'epicsEnvSet("MASTERMACS1_PORT", "{config["controllers"]["masterMacs1"]["port"]}")\n')
# Set environment variables
os.environ["EPICS_BASE"] = "/usr/local/epics/base-7.0.7"
os.environ["EPICS_HOST_ARCH"] = "RHEL8-x86_64"
# Get the full directory path of the script
script_dir = Path(__file__).resolve().parent
# Change working directory so st.cmd can find other .cmd files
os.chdir(script_dir)
print("Current working directory:", os.getcwd())
print("Script directory:", script_dir)
print("Files in directory:", os.listdir())
# Run the IOC shell script
try:
subprocess.run(["/usr/local/bin/iocsh", "st.cmd"], check=True)
except subprocess.CalledProcessError as e:
print(f"Failed to start IOC: {e}", file=sys.stderr)
sys.exit(e.returncode)
if __name__ == '__main__':
startioc()