2009/07/24 04:45
My major/VISSIM
JAVA 와 COM 을 연결해 주는 JAVA-COM bridge 에는 여러 라이브러리들이 있다. 그중 오픈 소스로 가장 활발히 개발되었던 것이 JACOB이다. 현재 JACOB을 이용해 VISSIM 시뮬레이터를 컨트롤해 본 결과 사용으로 판매되는 jacozoom과 같은 라이브러리에 비해 속도가 2배정도 느리다. 그리고 시뮬레이션을 오래 하다 보면 메모리 오버플로우가 일어난다..ㅡㅡ;;
하지만 간단한 엑셀이나 워드 같은 프로그램 컨트롤할때는 쓸만할것 같다. 밑의 소스는 JACOB 라이브러리를 이용해 VISSIM 파일 읽어 들인 후 VISSIM내의 디텍터 갯수, ID, 시뮬레이션 시간을 출력하고 시뮬레이션 동안 특정 하나의 디텍터에 자동차가 감지되면 "1"을 출력하도록 만든 소스이다.
하지만 간단한 엑셀이나 워드 같은 프로그램 컨트롤할때는 쓸만할것 같다. 밑의 소스는 JACOB 라이브러리를 이용해 VISSIM 파일 읽어 들인 후 VISSIM내의 디텍터 갯수, ID, 시뮬레이션 시간을 출력하고 시뮬레이션 동안 특정 하나의 디텍터에 자동차가 감지되면 "1"을 출력하도록 만든 소스이다.
| import com.jacob.com.*; import com.jacob.activeX.*; public class testJacob { private ActiveXComponent vissim; private Dispatch sim; private Dispatch net; private Dispatch dets; private Dispatch scs; private Dispatch det_sc; private Dispatch[] det; private Dispatch vipts; private Dispatch vipt; private Dispatch delays; private Dispatch[] delay; private Dispatch vehs; private Dispatch veh; private Dispatch enumberator; private Variant val1, val2; private Dispatch trcms; private Dispatch[] trcm; public void start(){ try { vissim = new ActiveXComponent("VISSIM.Vissim"); Dispatch.call((Dispatch)vissim, "LoadNet", "D:\\Youngtae\\java-work\\testJacob\\roundabout.inp", 0); sim = vissim.getProperty("Simulation").toDispatch(); net = vissim.getProperty("Net").toDispatch(); scs = Dispatch.get(net, "SignalControllers").toDispatch(); det_sc = Dispatch.call(scs, "GetSignalControllerByNumber", 1).toDispatch(); dets = Dispatch.get(det_sc, "Detectors").toDispatch(); delays = Dispatch.get(net, "Delays").toDispatch(); int tempVal; Object obj1, obj2; obj1 = Dispatch.get(dets, "Count"); tempVal = Integer.parseInt(obj1.toString()); det = new Dispatch[tempVal]; System.out.println("Count:" + tempVal); Variant vi = new Variant(); vi = Dispatch.call(sim, "AttValue", "PERIOD"); System.out.println("period::::" + vi); int[] det_id = new int[tempVal]; for(int i=0; i<tempVal; i++){ vi.putInt(i+1); det[i] = Dispatch.invoke(det_sc, "Detectors", Dispatch.Get, new Object[]{vi}, new int[1]).toDispatch(); Variant ID = Dispatch.get(det[i], "ID"); Variant name = Dispatch.get(det[i], "Name"); System.out.println(ID + " " + name); det_id[i] = ID.getInt(); } System.out.println(Dispatch.get(det[0], "ID")); int simTime, simPeriod, simResolution; obj1 = Dispatch.get(sim, "Period"); obj2 = Dispatch.get(sim, "Resolution"); simPeriod = (int)Double.parseDouble(obj1.toString()); simResolution = Integer.parseInt(obj2.toString()); simTime = simPeriod * simResolution; System.out.println("simTime:" + simTime); //Dispatch. for(int i=1; i<simTime; i++){ Dispatch.call(sim, "RunSingleStep"); vi = Dispatch.call(det[3], "AttValue", "IMPULSE"); if(vi.getInt() == 1){ System.out.println("1"); } } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args){ testJacob tj = new testJacob(); tj.start(); } } |