1""" Helper functions for RapidCode Python samples.
4from _imports
import RapidCode, RAPIDCODE_DIR, constants, platform
8 """Get enum name using reflection on SWIG-generated constants.
11 prefix: The enum prefix (e.g., "RSINetworkState_RSINetworkState")
12 value: The enum value to look up
15 The enum name with prefix stripped, or "UNKNOWN(value)" if not found
18 get_enum_name("RSINetworkState_RSINetworkState", controller.NetworkStateGet())
19 # Returns "OPERATIONAL" for RSINetworkState_RSINetworkStateOPERATIONAL
21 for name
in dir(RapidCode):
22 if name.startswith(prefix):
23 if getattr(RapidCode, name) == value:
24 return name[len(prefix):]
25 return f
"UNKNOWN({value})"
28def get_creation_parameters():
31 creation_params: RapidCode.CreationParameters = RapidCode.CreationParameters()
32 creation_params.RmpPath = RAPIDCODE_DIR
33 creation_params.NicPrimary = constants.RMP_NIC_PRIMARY
35 if platform.system() ==
"Windows":
36 creation_params.NodeName = constants.RMP_NODE_NAME
37 elif platform.system() ==
"Linux":
38 creation_params.CpuAffinity = constants.RMP_CPU_AFFINITY
40 raise Exception(
"Unsupported platform")
42 return creation_params
44def check_errors(rsi_object):
48 error_string_builder =
""
49 i = rsi_object.ErrorLogCountGet()
50 while rsi_object.ErrorLogCountGet() > 0:
51 error:RapidCode.RsiError = rsi_object.ErrorLogGet()
52 error_type =
"WARNING" if error.isWarning
else "ERROR"
53 error_string_builder += f
"{error_type}: {error.text}\n"
54 if len(error_string_builder) > 0:
55 print(error_string_builder)
56 if "ERROR" in error_string_builder:
57 raise Exception(error_string_builder)
58 return "ERROR" in error_string_builder, error_string_builder
60def start_the_network(controller):
64 if controller.NetworkStateGet() != RapidCode.RSINetworkState_RSINetworkStateOPERATIONAL:
65 print(
"Starting Network..")
66 controller.NetworkStart()
68 if controller.NetworkStateGet() != RapidCode.RSINetworkState_RSINetworkStateOPERATIONAL:
69 messages_to_read = controller.NetworkLogMessageCountGet()
71 for i
in range(messages_to_read):
72 print(controller.NetworkLogMessageGet(i))
73 print(
"Expected OPERATIONAL state but the network did not get there.")
76 print(
"Network Started")
78def abort_motion_object(motion_object):
82 motion_object.EStopAbort()
83 motion_object.MotionDoneWait()
84 motion_object.ClearFaults()
87 verify_idle_state(motion_object)
89def verify_idle_state(motion_object):
92 if motion_object.StateGet() != RapidCode.RSIState_RSIStateIDLE:
93 source = motion_object.SourceGet()
94 error_msg = f
"Axis or MultiAxis {motion_object.NumberGet()} is expected to be in IDLE state, but is in state {enum_to_name(motion_object.StateGet(), 'RSIState')}. " \
95 f
"\nError Source: {motion_object.SourceNameGet(source)}"
96 raise Exception(error_msg)
99 """Reverse lookup: int value -> enum name"""
100 for name
in dir(RapidCode):
101 if name.startswith(prefix +
"_" + prefix)
and getattr(RapidCode, name) == value:
102 return name.split(prefix +
"_" + prefix)[1]
enum_to_name(value, prefix)
str get_enum_name(str prefix, int value)