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):
 9def float_range(start, stop, step):
10    while start <= stop:
11        yield start
12        start += step
def set_all_do_low(h: hil2.hil2.Hil2):
36def set_all_do_low(h: hil2.Hil2):
37    for i in range(0, 10):
38        do = h.do("HIL2", f"DO{i+1}")
39        print(f"Setting DO{i+1} LOW")
40        do.set(False)
def do_di_test(h: hil2.hil2.Hil2):
 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...")
def ao_ai_test(h: hil2.hil2.Hil2):
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...")
def can_recv_test(h: hil2.hil2.Hil2):
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)
def can_send_test(h: hil2.hil2.Hil2):
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()