tests.example.test
1import hil2.hil2 as hil2 2import mk_assert.mk_assert as mka 3import time 4import random 5 6import logging 7 8def float_range(start, stop, step): 9 while start <= stop: 10 yield start 11 start += step 12 13# def do_test(h: hil2.Hil2): 14# do_2 = h.do("HIL2Bread", "DO@2") 15# di_28 = h.di("HIL2Bread", "DI@28") 16# ai_14 = h.ai("HIL2Bread", "AI@14") 17 18# do_2.set(True) 19# val = di_28.get() 20# a = ai_14.get() 21# print(f"DI@28: {val}, AI@14: {a}") 22# mka.assert_true(val, "DI@28 should be True after setting DO@2 to True") 23# mka.assert_eqf(a, 3.3, 0.5, "AI@14 should be approximately 3.3V") 24 25# do_2.set(False) 26# val = di_28.get() 27# a = ai_14.get() 28# print(f"DI@28: {val}, AI@14: {a}") 29# mka.assert_false(val, "DI@28 should be False after setting DO@2 to False") 30# mka.assert_eqf(a, 0.0, 0.5, "AI@14 should be approximately 0.0V") 31 32# vcan = h.can("HIL2", "VCAN") 33# vcan.send("BrakeLeft", { "raw_reading": 12 }) 34 35def set_all_do_low(h: hil2.Hil2): 36 for i in range(0, 10): 37 do = h.do("HIL2", f"DO{i+1}") 38 print(f"Setting DO{i+1} LOW") 39 do.set(False) 40 41def do_di_test(h: hil2.Hil2): 42 # do = h.do("HIL2", "DO1") 43 44 # for i in range(1, 11): 45 # do = h.do("HIL2", f"DO{i+1}") 46 # print(f"Setting DO{i+1} LOW") 47 # do.set(False) 48 49 # while True: 50 # for i in range(0, 10): 51 # set_all_do_low(h) 52 # print("All DOs set to LOW") 53 # input("Press Enter to continue...") 54 # do = h.do("HIL2", f"DO{i+1}") 55 # print(f"Setting DO{i+1} HIGH") 56 # do.set(True) 57 # input("Press Enter to continue...") 58 59 # set_all_do_low(h) 60 # input("Press Enter to continue...") 61 62 # do = h.do("HIL2", f"DO1") 63 # print(f"Setting DO1 HIGH") 64 # do.set(True) 65 66 67 68 69 # do = h.do("HIL2", f"DO5") 70 # print(f"Setting DO5 HIGH") 71 # do.set(True) 72 # time.sleep(0.1) 73 # input("Press Enter to continue...") 74 75 # print("Setting DO5 LOW") 76 # do.set(False) 77 # time.sleep(0.1) 78 # input("Press Enter to continue...") 79 80 # input("Press Enter to continue...") 81 82 # do = h.do("HIL2", f"DO{4}") 83 # print(f"Setting DO4 HIGH") 84 # do.set(True) 85 # time.sleep(0.1) 86 87 # input("Press Enter to continue...") 88 89 90 print("Setting DO1 LOW") 91 do = h.do("HIL2", f"DO1") 92 do.set(False) 93 time.sleep(0.1) 94 input("Press Enter to continue...") 95 state = True 96 while True: 97 print("") 98 print(f"Setting DO1 to {state}") 99 do.set(state) 100 time.sleep(0.05) 101 102 # for i in range(0, 16): 103 # di = h.di("HIL2", f"DMUX_{i}") 104 # val = di.get() 105 # add = "" if not val else " (HIGH)" 106 # print(f"DI_DMUX_{i}: {val} {add}") 107 # time.sleep(0.03) 108 109 # for i in range(1, 3): 110 # ai = h.ai("HIL2", f"DAI{i}") 111 # val = ai.get() 112 # print(f"AI_DAI{i}: {val} V") 113 # time.sleep(0.03) 114 115 116 state = not state 117 input("Press Enter to toggle DO1...") 118 119def ao_ai_test(h: hil2.Hil2): 120 # ao1 = h.ao("HIL2", "DAC1") 121 # ao2 = h.ao("HIL2", "DAC2") 122 123 # while True: 124 # for voltage in float_range(0.0, 5.0, 0.2): 125 # print("") 126 127 # print(f"Setting DAC1 to {voltage}V") 128 # ao1.set(voltage) 129 # time.sleep(0.2) 130 131 132 for i in range(0, 8): 133 ao = h.ao("HIL2", f"DAC{i+1}") 134 print(f"Setting DAC{i+1} to 0.0V") 135 ao.set(0.0) 136 137 input("Press Enter to continue...") 138 139 xs = [] 140 ys = [] 141 142 for v in range(0, 50): 143 voltage = v / 10.0 144 xs.append(voltage) 145 # print(f"Setting all DACs to {voltage}V") 146 for i in range(0, 8): 147 ao = h.ao("HIL2", f"DAC{i+1}") 148 ao.set(voltage) 149 time.sleep(0.05) 150 151 ai = h.ai("HIL2", "5vMUX_0") 152 val = ai.get() 153 ys.append(val) 154 # print(f"DAI2 reading: {val}V") 155 mka.assert_eqf(val, voltage, 0.05, f"DAI2 should read approximately {voltage}V (got {val}V)") 156 157 input("Press Enter to continue...") 158 159 160 ao_ai_test(h) 161 162 163 164 165 # dai = h.ai("HIL2", "DAI2") 166 # ai = h.ai("HIL2", "5vMUX_0") 167 168 # val = dai.get() 169 # print(f"Initial DAI2 reading: {val}V") 170 171 # for voltage in float_range(0.0, 5.0, 0.2): 172 # print("") 173 174 # print(f"Setting DACS to {voltage}V") 175 # ao1.set(voltage) 176 # ao2.set(voltage) 177 # time.sleep(0.02) 178 179 # val = dai.get() 180 # mka.assert_eqf(val, voltage, 0.02, f"DAI2 should read approximately {voltage}V (got {val}V)") 181 182 # val = ai.get() 183 # mka.assert_eqf(val, voltage, 0.02, f"5vMUX_0 should read approximately {voltage}V (got {val}V)") 184 185 # input("Press Enter to continue...") 186 187def can_recv_test(h: hil2.Hil2): 188 vcan = h.can("HIL2", "VCAN") 189 mcan = h.can("HIL2", "MCAN") 190 191 print("Listening for CAN messages on VCAN and MCAN...") 192 while True: 193 msg = vcan.get_last() 194 if msg is not None: 195 print(f"Received CAN message: ID={msg.signal}, Data={msg.data}") 196 vcan.clear() 197 msg = mcan.get_last() 198 if msg is not None: 199 print(f"Received CAN message: ID={msg.signal}, Data={msg.data}") 200 mcan.clear() 201 time.sleep(0.1) 202 203 204def can_send_test(h: hil2.Hil2): 205 vcan = h.can("HIL2", "VCAN") 206 # mcan = h.can("HIL2", "MCAN") 207 208 brake1 = h.do("HIL2", "DO1") 209 210 brake1.set(True) 211 212 # print("Sending CAN messages on VCAN...") 213 # val = 0 214 data = { 215 "right_shock": 0, 216 "left_shock": 0, 217 } 218 while True: 219 data["right_shock"] = random.randint(0, 100) 220 data["left_shock"] = random.randint(0, 100) 221 222 print(f"Sending CAN message: shock_rear (f{data['right_shock']}, {data['left_shock']})") 223 vcan.send("shock_rear", data) 224 vcan.clear() 225 # msgs = vcan.get_all() 226 # # msg_ids = list(set([msg.signal for msg in msgs])) 227 # # print(f"\tRECV: {msg_ids}") 228 # t = time.time() 229 # for msg in msgs: 230 # print(f"{t}\t, \t{msg.signal}, \t{msg.data}") 231 # vcan.clear() 232 233 # msgs = mcan.get_all() 234 # msg_ids = list(set([msg.signal for msg in msgs])) 235 # print(f"\tRECV: {msg_ids}") 236 # mcan.clear() 237 238 time.sleep(1/3) 239 240 241def main(): 242 logging.basicConfig(level=logging.INFO) 243 244 with hil2.Hil2( 245 "./tests/example/config.json", 246 "device_configs", 247 None, 248 "./tests/dashboard/dbc" 249 ) as h: 250 # mka.add_test(do_di_test, h) 251 # mka.add_test(ao_ai_test, h) 252 # mka.add_test(can_recv_test, h) 253 mka.add_test(can_send_test, h) 254 255 mka.run_tests() 256 257 # v_bat = h.ao("Main_Module", "VBatt") 258 # v_bat.set(3.2) 259 # val = v_bat.get() 260 261 # h.set_ao("Main_Module", "VBatt", 3.2) 262 # val = h.get_ao("Main_Module", "VBatt") 263 264 # h.get_last_can("HIL2", "MCAN", "Signal") 265 266 # mcan = h.can("HIL2", "MCAN") 267 # mcan.send("Signal", {}) 268 # mcan.send(23, {}) 269 # sig_dict = mcan.get_last("Signal") 270 # sig_dict = mcan.get_last(23) 271 # sig_dicts = mcan.get_all("Signal") 272 # sig_dicts = mcan.get_all(23) 273 # sig_dicts = mcan.get_all() 274 # mcan.clear("Signal") 275 # mcan.clear(23) 276 # mcan.clear() 277 278 279if __name__ == "__main__": 280 main()
def
float_range(start, stop, step):
42def do_di_test(h: hil2.Hil2): 43 # do = h.do("HIL2", "DO1") 44 45 # for i in range(1, 11): 46 # do = h.do("HIL2", f"DO{i+1}") 47 # print(f"Setting DO{i+1} LOW") 48 # do.set(False) 49 50 # while True: 51 # for i in range(0, 10): 52 # set_all_do_low(h) 53 # print("All DOs set to LOW") 54 # input("Press Enter to continue...") 55 # do = h.do("HIL2", f"DO{i+1}") 56 # print(f"Setting DO{i+1} HIGH") 57 # do.set(True) 58 # input("Press Enter to continue...") 59 60 # set_all_do_low(h) 61 # input("Press Enter to continue...") 62 63 # do = h.do("HIL2", f"DO1") 64 # print(f"Setting DO1 HIGH") 65 # do.set(True) 66 67 68 69 70 # do = h.do("HIL2", f"DO5") 71 # print(f"Setting DO5 HIGH") 72 # do.set(True) 73 # time.sleep(0.1) 74 # input("Press Enter to continue...") 75 76 # print("Setting DO5 LOW") 77 # do.set(False) 78 # time.sleep(0.1) 79 # input("Press Enter to continue...") 80 81 # input("Press Enter to continue...") 82 83 # do = h.do("HIL2", f"DO{4}") 84 # print(f"Setting DO4 HIGH") 85 # do.set(True) 86 # time.sleep(0.1) 87 88 # input("Press Enter to continue...") 89 90 91 print("Setting DO1 LOW") 92 do = h.do("HIL2", f"DO1") 93 do.set(False) 94 time.sleep(0.1) 95 input("Press Enter to continue...") 96 state = True 97 while True: 98 print("") 99 print(f"Setting DO1 to {state}") 100 do.set(state) 101 time.sleep(0.05) 102 103 # for i in range(0, 16): 104 # di = h.di("HIL2", f"DMUX_{i}") 105 # val = di.get() 106 # add = "" if not val else " (HIGH)" 107 # print(f"DI_DMUX_{i}: {val} {add}") 108 # time.sleep(0.03) 109 110 # for i in range(1, 3): 111 # ai = h.ai("HIL2", f"DAI{i}") 112 # val = ai.get() 113 # print(f"AI_DAI{i}: {val} V") 114 # time.sleep(0.03) 115 116 117 state = not state 118 input("Press Enter to toggle DO1...")
120def ao_ai_test(h: hil2.Hil2): 121 # ao1 = h.ao("HIL2", "DAC1") 122 # ao2 = h.ao("HIL2", "DAC2") 123 124 # while True: 125 # for voltage in float_range(0.0, 5.0, 0.2): 126 # print("") 127 128 # print(f"Setting DAC1 to {voltage}V") 129 # ao1.set(voltage) 130 # time.sleep(0.2) 131 132 133 for i in range(0, 8): 134 ao = h.ao("HIL2", f"DAC{i+1}") 135 print(f"Setting DAC{i+1} to 0.0V") 136 ao.set(0.0) 137 138 input("Press Enter to continue...") 139 140 xs = [] 141 ys = [] 142 143 for v in range(0, 50): 144 voltage = v / 10.0 145 xs.append(voltage) 146 # print(f"Setting all DACs to {voltage}V") 147 for i in range(0, 8): 148 ao = h.ao("HIL2", f"DAC{i+1}") 149 ao.set(voltage) 150 time.sleep(0.05) 151 152 ai = h.ai("HIL2", "5vMUX_0") 153 val = ai.get() 154 ys.append(val) 155 # print(f"DAI2 reading: {val}V") 156 mka.assert_eqf(val, voltage, 0.05, f"DAI2 should read approximately {voltage}V (got {val}V)") 157 158 input("Press Enter to continue...") 159 160 161 ao_ai_test(h) 162 163 164 165 166 # dai = h.ai("HIL2", "DAI2") 167 # ai = h.ai("HIL2", "5vMUX_0") 168 169 # val = dai.get() 170 # print(f"Initial DAI2 reading: {val}V") 171 172 # for voltage in float_range(0.0, 5.0, 0.2): 173 # print("") 174 175 # print(f"Setting DACS to {voltage}V") 176 # ao1.set(voltage) 177 # ao2.set(voltage) 178 # time.sleep(0.02) 179 180 # val = dai.get() 181 # mka.assert_eqf(val, voltage, 0.02, f"DAI2 should read approximately {voltage}V (got {val}V)") 182 183 # val = ai.get() 184 # mka.assert_eqf(val, voltage, 0.02, f"5vMUX_0 should read approximately {voltage}V (got {val}V)") 185 186 # input("Press Enter to continue...")
188def can_recv_test(h: hil2.Hil2): 189 vcan = h.can("HIL2", "VCAN") 190 mcan = h.can("HIL2", "MCAN") 191 192 print("Listening for CAN messages on VCAN and MCAN...") 193 while True: 194 msg = vcan.get_last() 195 if msg is not None: 196 print(f"Received CAN message: ID={msg.signal}, Data={msg.data}") 197 vcan.clear() 198 msg = mcan.get_last() 199 if msg is not None: 200 print(f"Received CAN message: ID={msg.signal}, Data={msg.data}") 201 mcan.clear() 202 time.sleep(0.1)
205def can_send_test(h: hil2.Hil2): 206 vcan = h.can("HIL2", "VCAN") 207 # mcan = h.can("HIL2", "MCAN") 208 209 brake1 = h.do("HIL2", "DO1") 210 211 brake1.set(True) 212 213 # print("Sending CAN messages on VCAN...") 214 # val = 0 215 data = { 216 "right_shock": 0, 217 "left_shock": 0, 218 } 219 while True: 220 data["right_shock"] = random.randint(0, 100) 221 data["left_shock"] = random.randint(0, 100) 222 223 print(f"Sending CAN message: shock_rear (f{data['right_shock']}, {data['left_shock']})") 224 vcan.send("shock_rear", data) 225 vcan.clear() 226 # msgs = vcan.get_all() 227 # # msg_ids = list(set([msg.signal for msg in msgs])) 228 # # print(f"\tRECV: {msg_ids}") 229 # t = time.time() 230 # for msg in msgs: 231 # print(f"{t}\t, \t{msg.signal}, \t{msg.data}") 232 # vcan.clear() 233 234 # msgs = mcan.get_all() 235 # msg_ids = list(set([msg.signal for msg in msgs])) 236 # print(f"\tRECV: {msg_ids}") 237 # mcan.clear() 238 239 time.sleep(1/3)
def
main():
242def main(): 243 logging.basicConfig(level=logging.INFO) 244 245 with hil2.Hil2( 246 "./tests/example/config.json", 247 "device_configs", 248 None, 249 "./tests/dashboard/dbc" 250 ) as h: 251 # mka.add_test(do_di_test, h) 252 # mka.add_test(ao_ai_test, h) 253 # mka.add_test(can_recv_test, h) 254 mka.add_test(can_send_test, h) 255 256 mka.run_tests() 257 258 # v_bat = h.ao("Main_Module", "VBatt") 259 # v_bat.set(3.2) 260 # val = v_bat.get() 261 262 # h.set_ao("Main_Module", "VBatt", 3.2) 263 # val = h.get_ao("Main_Module", "VBatt") 264 265 # h.get_last_can("HIL2", "MCAN", "Signal") 266 267 # mcan = h.can("HIL2", "MCAN") 268 # mcan.send("Signal", {}) 269 # mcan.send(23, {}) 270 # sig_dict = mcan.get_last("Signal") 271 # sig_dict = mcan.get_last(23) 272 # sig_dicts = mcan.get_all("Signal") 273 # sig_dicts = mcan.get_all(23) 274 # sig_dicts = mcan.get_all() 275 # mcan.clear("Signal") 276 # mcan.clear(23) 277 # mcan.clear()