Are you sure a solution to your problem exists?
Instead of formulating a hard constraint you could also introduce a penalty function.
For not mixing......
v_2hr_bool(room, day, timeslot) [binary]
v_3hr_bool(room, day, timeslot) [binary]
v_2hr_bool + v_3hr_bool <= 1
So, for every timeslot, you can either assign 2hr or 3hr exams.
v_2hr_assignment(room,day, timeslot, exam_2hr) [binary]
v_3hr_assignment(room,day, timeslot, exam_3hr) [binary]
v_2hr_assignment <= v_2hr_bool * big_m (use an indicator constraint here)
v_3hr_assignment <= v_3hr_bool * big_m (use an indicator constraint here)
This makes a link between the exams and the timeslots for different rooms.
You have a timetable(variable) for 2hr exams and for 3 hr exams.
The bools prevent you from simultaniously assigning different time-length exams to the same room in the same tiem-slot.
This is a bit conceptual because I didn't look at your files.
But I hope it will get you started.