Added two utility scripts for working with PMAC motors
This commit is contained in:
83
utils/analyzeTcpDump/demo.py
Executable file
83
utils/analyzeTcpDump/demo.py
Executable file
@ -0,0 +1,83 @@
|
||||
#! demovenv/bin/python3
|
||||
"""
|
||||
This demo script shows how the "parse" function of "analyzeTcpDump.py" can be
|
||||
used to easily visualize data from a PCAP file created by the tcpdump tool /
|
||||
wireshark. A suitable virtual environment can be created with the "makedemovenv"
|
||||
script.
|
||||
|
||||
Stefan Mathis, January 2025
|
||||
"""
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
import matplotlib.dates as mdates
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from analyzeTcpDump import parse
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
data = parse("demo.pcap")
|
||||
|
||||
plt.figure(figsize=(12, 6))
|
||||
|
||||
# Plot the position of axis 5 over time
|
||||
|
||||
# Actual position
|
||||
position_valid = []
|
||||
dates_valid = []
|
||||
position_all = []
|
||||
dates_all = []
|
||||
|
||||
for (timestamp, item) in data["172.28.101.24"]["Q0510"].items():
|
||||
date = datetime.fromtimestamp(timestamp)
|
||||
value = item["response"]["value"]
|
||||
|
||||
dates_all.append(date)
|
||||
position_all.append(value)
|
||||
|
||||
if item["response"]["valid"]:
|
||||
dates_valid.append(date)
|
||||
position_valid.append(value)
|
||||
else:
|
||||
command = item["command"]["ascii"]
|
||||
response = item["response"]["ascii"]
|
||||
|
||||
# Replace non-renderable characters
|
||||
command = command.replace("\0", "\\x00")
|
||||
command = command.replace("\r", "\\x0d")
|
||||
command = command.replace("\x12", "\\x12")
|
||||
response = response.replace("\r", "\\x0d")
|
||||
response = response.replace("\06", "\\x06")
|
||||
|
||||
# Shift the text a bit to the right
|
||||
plt.text(date, value, f"Command: {command}\nResponse: {response}", horizontalalignment="right", verticalalignment="top")
|
||||
|
||||
# Target position
|
||||
position_target = [position_valid[0]]
|
||||
dates_target = [dates_valid[0]]
|
||||
|
||||
for (timestamp, item) in data["172.28.101.24"]["Q0501="].items():
|
||||
date = datetime.fromtimestamp(timestamp)
|
||||
value = item["command"]["value"]
|
||||
|
||||
dates_target.append(date)
|
||||
position_target.append(position_target[-1])
|
||||
|
||||
dates_target.append(date)
|
||||
position_target.append(value)
|
||||
|
||||
dates_target.append(dates_valid[-1])
|
||||
position_target.append(position_target[-1])
|
||||
|
||||
plt.plot(dates_target, position_target, "k--", label="Target position")
|
||||
plt.plot(dates_all, position_all, "r", label="All responses")
|
||||
plt.plot(dates_valid, position_valid, "b", label="Valid responses")
|
||||
plt.xlabel("Time (ISO 8601)")
|
||||
plt.ylabel("Axis position in degree")
|
||||
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%dT%H:%M:%S"))
|
||||
plt.xticks(rotation=45)
|
||||
plt.grid(True)
|
||||
plt.legend(loc="lower left")
|
||||
plt.title("Position of axis 5")
|
||||
plt.tight_layout()
|
||||
plt.show()
|
Reference in New Issue
Block a user