diff --git a/src/AMTransducer.java b/src/AMTransducer.java new file mode 100644 index 0000000000000000000000000000000000000000..5fecf0ea97521374879895e9d743b5570d313759 --- /dev/null +++ b/src/AMTransducer.java @@ -0,0 +1,123 @@ +package carfollowing_2024_05_02; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +import DEVSModel.DEVSAtomic; +import DEVSModel.Port; + +public class AMTransducer extends DEVSAtomic { + + Port carRec; + + enum Phase {idle, received}; + Phase phase; + + private float time; + + // 2024_04_17 ouput in trans + private FileWriter writerSpeed; + private FileWriter writerPosition; + + public AMTransducer() { + name = "trans"; + carRec = new Port(this,"car_received"); + this.addInPort(carRec); + } + + @Override + public void init() { + phase = Phase.idle; + time = 0; + try { + writerSpeed = new FileWriter("output/speed"+AMGenerator.numCar+"_"+AMGenerator.numTestFile); + writerPosition =new FileWriter("output/position"+AMGenerator.numCar+"_"+AMGenerator.numTestFile); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + @Override + public void deltaExt(Port port, Object obj, float e) { + // Update system time + time += e; + + System.out.println("---deltaExt---trans"); + System.out.println("Time: " + time); + + + + // If car comes to AMTransducer + if (port.equals(carRec)) { + if (phase == Phase.idle) { + // Change to received state + phase = Phase.received; + // Set arrival time + ((Car)obj).setArrivalTime(time); + Car carNew = (Car)obj; + + System.out.println("*** Car received"); + + // 2024_04_17 print results to file + + for (String s : carNew.listPosition) { + try { + writerPosition.write(carNew.getID()+" "+s); + writerPosition.write("\n"); + } catch (IOException e1) { + e1.printStackTrace(); + } + + } + + for (String s : carNew.listSpeed) { + try { + writerSpeed.write(carNew.getID()+" "+s); + writerSpeed.write("\n"); + } catch (IOException e1) { + e1.printStackTrace(); + } + + } + + } + } + } + + @Override + public void deltaInt() { + if (phase == Phase.received) { + // Back to idle state + phase = Phase.idle; + } + } + + @Override + public float getDuration() { + if (phase == Phase.received) + return 0; + else return Float.POSITIVE_INFINITY; + } + + @Override + public Object[] lambda() { + // nothing to output + return null; + } + + public void endSim(){ + try { + writerPosition.close(); + writerSpeed.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + System.out.println("**** Simulation ends ****"); + } +}