A plot of transmitted or received packets with respect to time for any network device can be obtained from the packet trace log file. Explained below are the steps to plot the received packets with respect to time:
- Simulate with the Packet Trace log enabled. Open the log post-simulation from the results window, as shown below:
- Open the Packet Trace. Go to the Developer menu. If you do not find this menu, follow the steps mentioned in the article How to enable Developer tab in MS-Excel? to enable it.
- Under the Developer tab go to Visual Basic or press Alt + F11.
- Go to the Insert Menu and select Module

- Copy and paste the following VBA code in the code editor
Sub GeneratePacketChart()
' Declare variables for clarity and to avoid repetition
Dim wsPacketTrace As Worksheet
Dim wsSummary As Worksheet
Dim pt As PivotTable
Dim pfEndTime As PivotField
Dim pfReceiverID As PivotField
Dim pfPacketStatus As PivotField
Dim chartRange As Range
Dim packetChart As ChartObject
' User-defined variables for simulation time and window size
Dim simulationTimeEnd As Double
Dim windowSize As Double
' Set user-defined values for simulation time and window size
windowSize = 500000 ' Set your desired value
' Set references to worksheets
Set wsPacketTrace = ThisWorkbook.Sheets("Packet Trace")
Set wsSummary = ThisWorkbook.Sheets.Add
' Check if there is an existing table in the specified location and delete it
On Error Resume Next
wsSummary.PivotTables("PivotTable2").TableRange2.Clear
On Error GoTo 0
' Create PivotTable
Set pt = wsSummary.PivotTableWizard(SourceType:=xlDatabase, SourceData:=wsPacketTrace.UsedRange, TableDestination:=wsSummary.Range("A3"), TableName:="PivotTable2")
' Set PivotTable source data
' pt.SetSourceData wsPacketTrace.UsedRange
' Set PivotTable layout
Set pfEndTime = pt.PivotFields("PHY_LAYER_END_TIME(µS)")
pfEndTime.Orientation = xlRowField
pfEndTime.Position = 1
Set pfReceiverID = pt.PivotFields("RECEIVER_ID")
pfReceiverID.Orientation = xlPageField
pfReceiverID.Position = 1
Set pfPacketStatus = pt.PivotFields("PACKET_STATUS")
pfPacketStatus.Orientation = xlDataField
pfPacketStatus.Function = xlCount
pfPacketStatus.Name = "Count of PACKET_STATUS"
' Group rows in the PivotTable
With pt.PivotFields("PHY_LAYER_END_TIME(µS)")
' Ensure direct access to the PivotField object
Set field = .PivotItems(1) ' Or use a more specific item retrieval method if needed
' Apply grouping directly to the PivotField object
pt.PivotFields("PHY_LAYER_END_TIME(µS)").DataRange.Cells(1).Select
Selection.Group Start:=0, End:=True, By:=windowSize
1 End With
' Exclude grand total from the PivotTable
pt.ColumnGrand = False
pt.RowGrand = False
' Copy data for chart
Set chartRange = wsSummary.Range("A4").CurrentRegion
chartRange.Copy
Set packetChart = wsSummary.ChartObjects.Add(Left:=100, Width:=375, Top:=75, Height:=225)
packetChart.Chart.SetSourceData Source:=chartRange
packetChart.Chart.ChartType = xlLine
' Set x-axis and y-axis titles
packetChart.Chart.Axes(xlCategory, xlPrimary).HasTitle = True
packetChart.Chart.Axes(xlCategory, xlPrimary).AxisTitle.Text = "Simulation Time(µS)"
packetChart.Chart.Axes(xlValue, xlPrimary).HasTitle = True
packetChart.Chart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Packets Received"
' Set chart title
packetChart.Chart.HasTitle = True
packetChart.Chart.ChartTitle.Text = "Packets Received vs Simulation Time"
' Adjust chart position
packetChart.Left = packetChart.Left + 65.25
packetChart.Top = packetChart.Top - 15.75
End Sub- The attached VBA Script file packet_received_vs_simulation_time.bas can also be downloaded and imported alternatively.
- In the code, the window size parameter can be modified if required. Click on the Run button to generate the plot
- A new sheet with the data and plot gets created as shown below:
Receiver ID can be filtered to the desired device for which the plot is to be obtained.