'----------------------------------------------------------------- 'Create Layout and Canvas '----------------------------------------------------------------- 'Get Layout Manager. Dim Lm Set Lm = Document.GetLayoutMgr Document.RemoveAll TRUE 'MOST IMPORTANT VARIABLE TELLS THE SIMULATION HOW MANY CHANNELS TO SIMULATE Const numChannels = 20 'Get Current Layout. Dim Layout1 Set Layout1 = Lm.GetCurrentLayout Layout1.Name = "Layout 1" 'Get Current Canvas. Dim Canvas1 Set Canvas1 = Layout1.GetCurrentCanvas 'SCRIPT for Layout global parameters. Layout1.SetParameterValue "Symbol rate", 10e+009 '----------------------------------------------------------------- 'Create Excel application - visible must be FALSE '----------------------------------------------------------------- Dim Excel Set Excel = CreateObject("Excel.Application") Excel.Visible = false Excel.Workbooks.Add '----------------------------------------------------------------- 'Creation of Components and setting their parameters '----------------------------------------------------------------- 'SCRIPT for each component in the Layout. 'SCRIPT for component WDM Transmitter. Dim Canvas1_ComponentTrans Set Canvas1_ComponentTrans = Canvas1.CreateComponent("WDM Transmitter","{2A9D9567-99DE-4C83-8F05-720F1480B57E}",80,20, 34, numChannels*38,0) Canvas1_ComponentTrans.Name = "WDM Transmitter" Canvas1_ComponentTrans.Cost = 0.000000 'Set WDM Transmitter parameters. Canvas1_ComponentTrans.SetParameterMode "Number of output ports", 0 Canvas1_ComponentTrans.SetParameterValue "Number of output ports", numChannels 'SCRIPT for component WDM Mux. Dim Canvas1_ComponentMux Set Canvas1_ComponentMux = Canvas1.CreateComponent("WDM Mux","{1747A24E-52A0-11D4-9403-0050DAB7C5D6}",280,20, 34, numChannels*38,0) Canvas1_ComponentMux.Name = "WDM Mux" Canvas1_ComponentMux.Cost = 0.000000 'Set WDM Mux parameters. Canvas1_ComponentMux.SetParameterMode "Number of input ports", 0 Canvas1_ComponentMux.SetParameterValue "Number of input ports", numChannels 'SCRIPT for component WDM Demux. Dim Canvas1_ComponentDemux Set Canvas1_ComponentDemux = Canvas1.CreateComponent("WDM Demux","{1747A24E-52A0-11D4-9403-0050DAB7C5D6}",360,20, 34, numChannels*38,0) Canvas1_ComponentDemux.Name = "WDM Demux" Canvas1_ComponentDemux.Cost = 0.000000 'Set WDM Demux parameters. Canvas1_ComponentDemux.SetParameterMode "Number of output ports", 0 Canvas1_ComponentDemux.SetParameterValue "Number of output ports", numChannels Canvas1_ComponentDemux.SetParameterValue "Bandwidth", 50 'SCRIPT for component 3R Regenerators. Dim Canvas1_ComponentRegen() ReDim Canvas1_ComponentRegen(numChannels) for i = 0 to numChannels - 1 Set Canvas1_ComponentRegen(i) = Canvas1.CreateComponent("3R Regenerator","{0B8011BF-3C6B-11D4-93EF-0050DAB7C5D6}",650,20+i*38, 34, 34,0) Canvas1_ComponentRegen(i).Name = "3R Regenerator" Canvas1_ComponentRegen(i).Cost = 0.000000 Next 'SCRIPT for component PIN Photodiodes. Dim Canvas1_ComponentPIN() ReDim Canvas1_ComponentPIN(numChannels) for i = 0 to numChannels - 1 Set Canvas1_ComponentPIN(i) = Canvas1.CreateComponent("PIN Photodiode","{0B8011BF-3C6B-11D4-93EF-0050DAB7C5D6}",470,20+i*38, 34, 34,0) Canvas1_ComponentPIN(i).Name = "PIN Photodiode" Canvas1_ComponentPIN(i).Cost = 0.000000 Next 'SCRIPT for component Low Pass Gaussian Filters. Dim Canvas1_ComponentFilter() ReDim Canvas1_ComponentFilter(numChannels) for i = 0 to numChannels - 1 Set Canvas1_ComponentFilter(i) = Canvas1.CreateComponent("Low Pass Gaussian Filter","{161B94D1-3BA4-11D4-93EE-0050DAB7C5D6}",550,20+i*38, 34, 34,0) Set parameterMgr = Canvas1_ComponentFilter(i).GetParameterMgr Dim param Set param = parameterMgr.GetObjectByName("Cutoff frequency") param.Display = FALSE Canvas1_ComponentFilter(i).Name = "Low Pass Gaussian Filter" Canvas1_ComponentFilter(i).Cost = 0.000000 Canvas1_ComponentFilter(i).SetParameterMode "Cutoff frequency", 0 Canvas1_ComponentFilter(i).SetParameterValue "Cutoff frequency", 10e+009 Next 'SCRIPT for component BER Analyzers. Dim Canvas1_ComponentBER() ReDim Canvas1_ComponentBER(numChannels) for i = 0 to numChannels - 1 Set Canvas1_ComponentBER(i) = Canvas1.CreateComponent("BER Analyzer","{F11D0C25-3C7D-11D4-93F0-0050DAB7C5D6}",750,20+i*38, 40, 34,0) Canvas1_ComponentBER(i).Name = "BER Analyzer" Canvas1_ComponentBER(i).Cost = 0.000000 Next '----------------------------------------------------------------- 'Connecting components in layout '----------------------------------------------------------------- Canvas1_ComponentMux.GetOutputPort(1).Connect(Canvas1_ComponentDemux.GetInputPort(1)) for i = 1 to numChannels Canvas1_ComponentTrans.GetOutputPort(i).Connect(Canvas1_ComponentMux.GetInputPort(i)) Canvas1_ComponentDemux.GetOutputPort(i).Connect(Canvas1_ComponentPin(i-1).GetInputPort(1)) Canvas1_ComponentPin(i-1).GetOutputPort(1).Connect(Canvas1_ComponentFilter(i-1).GetInputPort(1)) Canvas1_ComponentFilter(i-1).GetOutputPort(1).Connect(Canvas1_ComponentRegen(i-1).GetInputPort(1)) for j = 1 to 3 Canvas1_ComponentRegen(i-1).GetOutputPort(j).CreateMonitor Canvas1_ComponentRegen(i-1).GetOutputPort(j).ConnectVisualizer(Canvas1_ComponentBER(i-1).GetInputPort(j)) Next Next 'Calculation Document.CalculateProject TRUE, TRUE '----------------------------------------------------------------- 'Saving BER vs Frequency to EXCEL '----------------------------------------------------------------- Dim XData() Dim YData() Redim XData(numChannels) Redim YData(numChannels) For i = 0 to numChannels - 1 YData(i) = Canvas1_ComponentBER(i).GetResultValue("Min. BER") XData(i) = 193.1 + 0.1*i Excel.ActiveWorkbook.Worksheets("sheet1").Cells(i+1,1) = XData(i) Excel.ActiveWorkbook.Worksheets("sheet1").Cells(i+1,2) = YData(i) Next Excel.Visible = true