From 83051e10c330c664fe255727f99a887e941db8fe Mon Sep 17 00:00:00 2001 From: smathis Date: Thu, 9 Jan 2025 13:24:17 +0100 Subject: [PATCH] Added two utility scripts for working with PMAC motors --- README.md | 5 +- utils/analyzeTcpDump/analyzeTcpDump.py | 200 +++++++++++++++++++++++++ utils/analyzeTcpDump/demo.pcap | Bin 0 -> 550018 bytes utils/analyzeTcpDump/demo.py | 83 ++++++++++ utils/analyzeTcpDump/makedemovenv | 22 +++ utils/analyzeTcpDump/makevenv | 21 +++ utils/writeRead.py | 172 +++++++++++++++++++++ 7 files changed, 501 insertions(+), 2 deletions(-) create mode 100755 utils/analyzeTcpDump/analyzeTcpDump.py create mode 100644 utils/analyzeTcpDump/demo.pcap create mode 100755 utils/analyzeTcpDump/demo.py create mode 100755 utils/analyzeTcpDump/makedemovenv create mode 100755 utils/analyzeTcpDump/makevenv create mode 100644 utils/writeRead.py diff --git a/README.md b/README.md index 606490c..613e577 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,10 @@ This is a driver for the pmacV3 motion controller with the SINQ communication pr This driver is a standard sinqMotor-derived driver and does not need any specific configuration. For the general configuration, please see https://git.psi.ch/sinq-epics-modules/sinqmotor/-/blob/main/README.md. -The folder "utils" contains utility scripts for working with pmac motor controllers: +The folder "utils" contains utility scripts for working with pmac motor controllers. To read their manual, run the scripts without any arguments. - writeRead.py: Allows sending commands to and receiving commands from a pmac controller over an ethernet connection. -- analyzeTcpDump: This script takes a tcpdump as an input and +- analyzeTcpDump.py: Parse the TCP communication between an IOC and a MCU and format it into a dictionary. "demo.py" shows how this data can be easily visualized for analysis. + ## Developer guide diff --git a/utils/analyzeTcpDump/analyzeTcpDump.py b/utils/analyzeTcpDump/analyzeTcpDump.py new file mode 100755 index 0000000..701bbd0 --- /dev/null +++ b/utils/analyzeTcpDump/analyzeTcpDump.py @@ -0,0 +1,200 @@ +#! venv/bin/python3 +""" +This script can be used to format the communication between an EPICS IOC and a +PMAC MCU into JSON files. It does this by parsing PCAP files created by tcpdump +and rearranging the information in a more structured manner. + +To read the manual, simply run this script without any arguments. + +Stefan Mathis, January 2025 +""" + +from scapy.all import * +import json +import re +import codecs +import os +from datetime import datetime + +def parse(fileAndPath): + + try: + scapyCap = PcapReader(fileAndPath) + except: + print(f"Could not read file {fileAndPath} as PCAP file") + + requests = [] + sent = [] + + jsonDict = dict() + lastLayer = None + for packet in scapyCap: + + layer = packet.getlayer(Raw) + + if layer is None: + continue + + # Skip the package if it is not a command or a response. A command ends + # with a carriage return (x0d), a response ends with ACKNOWLEDGE (x06) + last = layer.load[-1] + if last == 6: + isResponse = True + elif last == 13: + isResponse = False + else: + continue + + # Store the info by the IP adress of the MCU + if isResponse: + ip = packet[IP].src + else: + ip = packet[IP].dst + + if ip not in jsonDict: + jsonDict[ip] = dict() + + # Convert to ASCII + ascii = layer.load.decode("unicode_escape") + + # Convert the time to a float + time = float(packet.time) + + if isResponse: + + # A response is always a number followed by a carriage return + responses = re.findall("-?\d+\.\d+\r|-?\d+\r", ascii) + + # Check if the number of responses matches the number of requests + valid = len(responses) == len(requests) + + # Pair up the request-response pairs + for (request, response) in zip(requests, responses): + if request not in jsonDict[ip]: + jsonDict[ip][request] = dict() + + if "." in response: + value = float(response) + else: + value = int(response) + + lastLayer = lastPacket.getlayer(Raw) + lastTime = int(lastPacket.time) + data = { + 'command': { + 'hex': [format(value, '02x') for value in lastLayer.load], + 'ascii': lastLayer.load.decode("unicode_escape"), + 'timestamp': lastTime, + 'timeiso': str(datetime.fromtimestamp(lastTime).isoformat()), + }, + 'response': { + 'hex': [format(value, '02x') for value in layer.load], + 'ascii': ascii, + 'value': value, + 'timestamp': time, + 'timeiso': str(datetime.fromtimestamp(time).isoformat()), + 'valid': valid + } + } + jsonDict[ip][request][time] = data + else: + requests.clear() + sent.clear() + + # Store the packet for use in the response iteration + lastPacket = packet + + # Parse the ASCII text via regex. A PMAC command usually has the + # format LDDDD(=), where L is a capital letter, the first + # two digits D are the axis number and the last two digits together + # with the letter form the command. + + # Separate the commands into sent data (e.g. setting a position) + # and data requests (e.g. reading the axis status). Sent data always + # has an equal sign. + for command in re.findall("[A-Z]\d+=-?\d+|[A-Z]\d+", ascii): + if "=" in command: + sent.append(command) + else: + requests.append(command) + + # Store the sent. The requests yfd stored together with the responses later. + for command in sent: + splitted = command.split("=") + key = splitted[0] + key = key + "=" + if key not in jsonDict[ip]: + jsonDict[ip][key] = dict() + + if "." in splitted[1]: + value = float(splitted[1]) + else: + value = int(splitted[1]) + + data = { + 'command': { + 'hex': [format(value, '02x') for value in layer.load], + 'ascii': ascii, + 'value': value, + 'timestamp': time, + 'timeiso': str(datetime.fromtimestamp(time).isoformat()), + }, + } + + jsonDict[ip][key][time] = data + + return jsonDict + + +if __name__ == "__main__": + + isInstalled = False + try: + from scapy.all import * + isInstalled = True + + except ImportError: + print("This script needs the Scapy package to run. In order to install a " + "suitable virtual environment, use the 'makevenv' script.") + + if isInstalled: + from sys import argv + + if len(argv) < 2: + print(""" +This script can be used to format the communication between an EPICS IOC and a +PMAC MCU into JSON files. It does this by parsing PCAP files created by tcpdump +and rearranging the information in a more structured manner. + +After a successfull parse run, the resulting JSON data looks like this: + + (e.g. Q0100 to request the position of axis 1) + + Command + + (e.g. P0100) + + Response + + + (e.g. Q0100= to set the position of axis 1) + + + + + + """) + + else: + for fileAndPath in argv[1:]: + jsonDict = parse(fileAndPath) + + # Save the dict into a JSON + fileName = os.path.basename(fileAndPath) + jsonfileAndPath = f"{fileName}.json" + with open(jsonfileAndPath, 'w') as fp: + json.dump(jsonDict, fp, indent=4) + + print(f"Stored parse result of {fileAndPath} in {fileName}") diff --git a/utils/analyzeTcpDump/demo.pcap b/utils/analyzeTcpDump/demo.pcap new file mode 100644 index 0000000000000000000000000000000000000000..62bed7ff1efbf01721b65ef04b121278054f5b01 GIT binary patch literal 550018 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 NQ$6A|7f9&e{{V}NGQj`< literal 0 HcmV?d00001 diff --git a/utils/analyzeTcpDump/demo.py b/utils/analyzeTcpDump/demo.py new file mode 100755 index 0000000..fabe07b --- /dev/null +++ b/utils/analyzeTcpDump/demo.py @@ -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() diff --git a/utils/analyzeTcpDump/makedemovenv b/utils/analyzeTcpDump/makedemovenv new file mode 100755 index 0000000..2fbb311 --- /dev/null +++ b/utils/analyzeTcpDump/makedemovenv @@ -0,0 +1,22 @@ +#!/bin/bash +#------------------------------------------------------------------------- +# Script which installs a virtual environment for PCAP file parsing +# +# Stefan Mathis, September 2024 +#------------------------------------------------------------------------- + +# Remove any previous testing environment +if [ -d "demovenv" ]; then + rm -r demovenv +fi + +/usr/bin/python3.11 -m venv demovenv + +source demovenv/bin/activate + +pip install --upgrade pip +pip install "scapy>=2.5,<3.0" +pip install matplotlib + +# Exit the virtual environment +exit \ No newline at end of file diff --git a/utils/analyzeTcpDump/makevenv b/utils/analyzeTcpDump/makevenv new file mode 100755 index 0000000..1e71296 --- /dev/null +++ b/utils/analyzeTcpDump/makevenv @@ -0,0 +1,21 @@ +#!/bin/bash +#------------------------------------------------------------------------- +# Script which installs a virtual environment for PCAP file parsing +# +# Stefan Mathis, September 2024 +#------------------------------------------------------------------------- + +# Remove any previous testing environment +if [ -d "venv" ]; then + rm -r venv +fi + +/usr/bin/python3.11 -m venv venv + +source venv/bin/activate + +pip install --upgrade pip +pip install "scapy>=2.5,<3.0" + +# Exit the virtual environment +exit \ No newline at end of file diff --git a/utils/writeRead.py b/utils/writeRead.py new file mode 100644 index 0000000..34eef0a --- /dev/null +++ b/utils/writeRead.py @@ -0,0 +1,172 @@ +#!/usr/bin/env python3 +""" +This script allows direct interaction with a pmac-Controller over an ethernet connection. +To read the manual, simply run this script without any arguments. + +Stefan Mathis, December 2024 +""" + +import struct +import socket +import curses + +def packPmacCommand(command): + # 0x40 = VR_DOWNLOAD + # 0xBF = VR_PMAC_GETRESPONSE + buf = struct.pack('BBHHH',0x40,0xBF,0,0,socket.htons(len(command))) + buf = buf + bytes(command,'utf-8') + return buf + +def readPmacReply(input): + msg = bytearray() + expectAck = True + while True: + b = input.recv(1) + bint = int.from_bytes(b,byteorder='little') + if bint == 2 or bint == 7: #STX or BELL + expectAck = False + continue + if expectAck and bint == 6: # ACK + return bytes(msg) + else: + if bint == 13 and not expectAck: # CR + return bytes(msg) + else: + msg.append(bint) + +if __name__ == "__main__": + from sys import argv + + try: + + addr = argv[1].split(':') + s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) + s.connect((addr[0],int(addr[1]))) + + if len(argv) == 3: + buf = packPmacCommand(argv[2]) + s.send(buf) + reply = readPmacReply(s) + print(reply.decode('utf-8') + '\n') + + else: + + try: + + stdscr = curses.initscr() + curses.noecho() + curses.cbreak() + stdscr.keypad(True) + stdscr.scrollok(True) + + stdscr.addstr(">> ") + stdscr.refresh() + + history = [""] + ptr = len(history) - 1 + + while True: + c = stdscr.getch() + if c == curses.KEY_RIGHT: + (y, x) = stdscr.getyx() + if x < len(history[ptr]) + 3: + stdscr.move(y, x+1) + stdscr.refresh() + elif c == curses.KEY_LEFT: + (y, x) = stdscr.getyx() + if x > 3: + stdscr.move(y, x-1) + stdscr.refresh() + elif c == curses.KEY_UP: + if ptr > 0: + ptr -= 1 + stdscr.addch("\r") + stdscr.clrtoeol() + stdscr.addstr(">> " + history[ptr]) + elif c == curses.KEY_DOWN: + if ptr < len(history) - 1: + ptr += 1 + stdscr.addch("\r") + stdscr.clrtoeol() + stdscr.addstr(">> " + history[ptr]) + elif c == curses.KEY_ENTER or c == ord('\n') or c == ord('\r'): + if history[ptr] == 'quit': + break + + # because of arrow keys move back to the end of the line + (y, x) = stdscr.getyx() + stdscr.move(y, 3+len(history[ptr])) + + if history[ptr]: + buf = packPmacCommand(history[ptr]) + s.send(buf) + reply = readPmacReply(s) + stdscr.addstr("\n" + reply.decode('utf-8')[0:-1]) + + if ptr == len(history) - 1 and history[ptr] != "": + history += [""] + else: + history[-1] = "" + ptr = len(history) - 1 + + stdscr.addstr("\n>> ") + stdscr.refresh() + + else: + if ptr < len(history) - 1: # Modifying previous input + if len(history[-1]) == 0: + history[-1] = history[ptr] + ptr = len(history) - 1 + + else: + history += [history[ptr]] + ptr = len(history) - 1 + + if c == curses.KEY_BACKSPACE: + if len(history[ptr]) == 0: + continue + (y, x) = stdscr.getyx() + history[ptr] = history[ptr][0:x-4] + history[ptr][x-3:] + stdscr.addch("\r") + stdscr.clrtoeol() + stdscr.addstr(">> " + history[ptr]) + stdscr.move(y, x-1) + stdscr.refresh() + + else: + (y, x) = stdscr.getyx() + history[ptr] = history[ptr][0:x-3] + chr(c) + history[ptr][x-3:] + stdscr.addch("\r") + stdscr.clrtoeol() + stdscr.addstr(">> " + history[ptr]) + stdscr.move(y, x+1) + stdscr.refresh() + + finally: + + # to quit + curses.nocbreak() + stdscr.keypad(False) + curses.echo() + curses.endwin() + + except: + print(""" + Invalid Arguments + + Option 1: Single Command + ------------------------ + + Usage: writeRead.py pmachost:port command + This then returns the response for command. + + Option 2: CLI Mode + ------------------ + + Usage: writeRead.py pmachost:port + + You can then type in a command, hit enter, and the response will see + the reponse, before being prompted to again enter a command. Type + 'quit' to close prompt. + """) +