80 lines
2.0 KiB
Python
80 lines
2.0 KiB
Python
def inject_rsi_to_krl(input_file, output_file=None, rsi_config="RSIGatewayv1.rsi"):
|
|
"""
|
|
Injects RSI commands into a KUKA KRL (.src) program file.
|
|
|
|
Args:
|
|
input_file (str): Path to the original KRL file.
|
|
output_file (str, optional): Path to the output KRL file. Defaults to input_file if None.
|
|
rsi_config (str): RSI configuration filename.
|
|
"""
|
|
if output_file is None:
|
|
output_file = input_file
|
|
|
|
rsi_start = """
|
|
; RSI Variable Declarations
|
|
DECL INT ret
|
|
DECL INT CONTID
|
|
"""
|
|
|
|
rsi_middle = f"""
|
|
; Create RSI Context
|
|
ret = RSI_CREATE("{rsi_config}", CONTID, TRUE)
|
|
IF (ret <> RSIOK) THEN
|
|
HALT
|
|
ENDIF
|
|
|
|
; Start RSI Execution
|
|
ret = RSI_ON(#RELATIVE)
|
|
IF (ret <> RSIOK) THEN
|
|
HALT
|
|
ENDIF
|
|
"""
|
|
|
|
rsi_end = """
|
|
; Stop RSI Execution
|
|
ret = RSI_OFF()
|
|
IF (ret <> RSIOK) THEN
|
|
HALT
|
|
ENDIF
|
|
"""
|
|
|
|
with open(input_file, "r") as file:
|
|
lines = file.readlines()
|
|
|
|
header_end, ini_end, end_start = None, None, None
|
|
|
|
for i, line in enumerate(lines):
|
|
if line.strip().startswith("DEF"):
|
|
header_end = i
|
|
elif line.strip().startswith(";ENDFOLD (INI)"):
|
|
ini_end = i
|
|
elif line.strip().startswith("END"):
|
|
end_start = i
|
|
|
|
if header_end is None or ini_end is None or end_start is None:
|
|
raise ValueError("Required markers (DEF, ;ENDFOLD (INI), END) not found in KRL file.")
|
|
|
|
with open(output_file, "w") as file:
|
|
# Write header and RSI declarations
|
|
file.writelines(lines[:header_end + 1])
|
|
file.write(rsi_start)
|
|
|
|
# Write INI section
|
|
file.writelines(lines[header_end + 1:ini_end + 1])
|
|
|
|
# Write RSI context creation and activation
|
|
file.write(rsi_middle)
|
|
|
|
# Write main code section
|
|
file.writelines(lines[ini_end + 1:end_start])
|
|
|
|
# Write RSI deactivation
|
|
file.write(rsi_end)
|
|
|
|
# Write END line
|
|
file.write(lines[end_start])
|
|
|
|
|
|
# Example usage:
|
|
if __name__ == "__main__":
|
|
inject_rsi_to_krl("my_program.src", "my_program_rsi.src") |