Skip to content
Snippets Groups Projects
Commit a9c2080f authored by Martin Teichmann's avatar Martin Teichmann
Browse files

use Beckhoff sync manager names

Beckhoff calls the input sync manager number 3, the output one
number 2. It's weird, but let's follow the standard.
parent 7c6e2a2d
No related branches found
No related tags found
No related merge requests found
......@@ -28,31 +28,30 @@ from .bpf import (
class PacketDesc:
def __init__(self, position, size):
def __init__(self, sm, position, size):
self.sm = sm
self.position = position
self.size = size
def __get__(self, instance, owner):
if instance is None:
return self
offset = instance.position_offset[self.position[0]]
offset = instance.position_offset[self.sm]
if isinstance(instance, Struct):
terminal = instance.terminal
device = instance.device
else:
terminal = instance
device = None
ret = PacketVar(terminal, (self.position[0],
self.position[1] + offset), self.size)
ret = PacketVar(terminal, self.sm, self.position + offset, self.size)
if device is None:
return ret
else:
return ret.get(device)
def __set__(self, instance, value):
offset = instance.position_offset[self.position[0]]
ret = PacketVar(instance.terminal,
(self.position[0], self.position[1] + offset),
offset = instance.position_offset[self.sm]
ret = PacketVar(instance.terminal, self.sm, self.position + offset,
self.size)
return ret.set(instance.device, value)
......@@ -66,8 +65,9 @@ class PacketVar(MemoryDesc):
else:
return self.size
def __init__(self, terminal, position, size):
def __init__(self, terminal, sm, position, size):
self.terminal = terminal
self.sm = sm
self.position = position
self.size = size
......@@ -119,8 +119,8 @@ class PacketVar(MemoryDesc):
return unpack_from("<" + self.size, data, start)[0]
def _start(self, device):
base, offset = self.position
return device.sync_group.terminals[self.terminal][base] + offset
return device.sync_group.terminals[self.terminal][self.sm] \
+ self.position
def fmt_addr(self, device):
return ("B" if isinstance(self.size, int) else self.size,
......@@ -135,9 +135,9 @@ class Struct:
class StructDesc:
def __init__(self, struct, *position_offset):
def __init__(self, struct, sm3=0, sm2=0):
self.struct = struct
self.position_offset = position_offset
self.position_offset = {2: sm2, 3: sm3}
def __get__(self, instance, owner):
if instance is None:
......@@ -209,7 +209,7 @@ class Device(SubProgram):
class EBPFTerminal(Terminal):
compatibility = None
position_offset = 0, 0
position_offset = {2: 0, 3: 0}
async def initialize(self, relative, absolute):
await super().initialize(relative, absolute)
......@@ -220,14 +220,17 @@ class EBPFTerminal(Terminal):
f"({relative}, {absolute})")
def allocate(self, packet, readonly):
"""allocate space in packet for the pdos of this terminal
return a dict that contains the starting offset for each
sync manager"""
bases = {}
if self.pdo_in_sz:
bases = [packet.size + packet.DATAGRAM_HEADER]
bases[3] = packet.size + packet.DATAGRAM_HEADER
packet.append(ECCmd.FPRD, b"\0" * self.pdo_in_sz, 0,
self.position, self.pdo_in_off)
else:
bases = [None]
if self.pdo_out_sz:
bases.append(packet.size + packet.DATAGRAM_HEADER)
bases[2] = packet.size + packet.DATAGRAM_HEADER
if readonly:
packet.on_the_fly.append((packet.size, ECCmd.FPWR))
packet.append(ECCmd.NOP, b"\0" * self.pdo_out_sz, 0,
......
......@@ -30,40 +30,40 @@ class Skip(EBPFTerminal):
class EL1808(EBPFTerminal):
compatibility = {(2, 118501458)}
ch1 = PacketDesc((0, 0), 0)
ch2 = PacketDesc((0, 0), 1)
ch3 = PacketDesc((0, 0), 2)
ch4 = PacketDesc((0, 0), 3)
ch5 = PacketDesc((0, 0), 4)
ch6 = PacketDesc((0, 0), 5)
ch7 = PacketDesc((0, 0), 6)
ch8 = PacketDesc((0, 0), 7)
ch1 = PacketDesc(3, 0, 0)
ch2 = PacketDesc(3, 0, 1)
ch3 = PacketDesc(3, 0, 2)
ch4 = PacketDesc(3, 0, 3)
ch5 = PacketDesc(3, 0, 4)
ch6 = PacketDesc(3, 0, 5)
ch7 = PacketDesc(3, 0, 6)
ch8 = PacketDesc(3, 0, 7)
class EL2808(EBPFTerminal):
compatibility = {(2, 184037458)}
ch1 = PacketDesc((1, 0), 0)
ch2 = PacketDesc((1, 0), 1)
ch3 = PacketDesc((1, 0), 2)
ch4 = PacketDesc((1, 0), 3)
ch5 = PacketDesc((1, 0), 4)
ch6 = PacketDesc((1, 0), 5)
ch7 = PacketDesc((1, 0), 6)
ch8 = PacketDesc((1, 0), 7)
ch1 = PacketDesc(2, 0, 0)
ch2 = PacketDesc(2, 0, 1)
ch3 = PacketDesc(2, 0, 2)
ch4 = PacketDesc(2, 0, 3)
ch5 = PacketDesc(2, 0, 4)
ch6 = PacketDesc(2, 0, 5)
ch7 = PacketDesc(2, 0, 6)
ch8 = PacketDesc(2, 0, 7)
class EL4104(EBPFTerminal):
ch1_value = PacketDesc((1, 0), 'H')
ch2_value = PacketDesc((1, 2), 'H')
ch3_value = PacketDesc((1, 4), 'H')
ch4_value = PacketDesc((1, 6), 'H')
ch1_value = PacketDesc(2, 0, 'H')
ch2_value = PacketDesc(2, 2, 'H')
ch3_value = PacketDesc(2, 4, 'H')
ch4_value = PacketDesc(2, 6, 'H')
class EL3164(EBPFTerminal):
class Channel(Struct):
attrs = PacketDesc((0, 0), 'H')
value = PacketDesc((0, 2), 'H')
attrs = PacketDesc(3, 0, 'H')
value = PacketDesc(3, 2, 'H')
channel1 = Channel(0)
channel2 = Channel(4)
......@@ -76,41 +76,41 @@ class EK1101(EBPFTerminal):
class EK1814(EBPFTerminal):
ch1 = PacketDesc((0, 0), 0)
ch2 = PacketDesc((0, 0), 1)
ch3 = PacketDesc((0, 0), 2)
ch4 = PacketDesc((0, 0), 3)
ch5 = PacketDesc((1, 0), 0)
ch6 = PacketDesc((1, 0), 1)
ch7 = PacketDesc((1, 0), 2)
ch8 = PacketDesc((1, 0), 3)
ch1 = PacketDesc(3, 0, 0)
ch2 = PacketDesc(3, 0, 1)
ch3 = PacketDesc(3, 0, 2)
ch4 = PacketDesc(3, 0, 3)
ch5 = PacketDesc(2, 0, 0)
ch6 = PacketDesc(2, 0, 1)
ch7 = PacketDesc(2, 0, 2)
ch8 = PacketDesc(2, 0, 3)
class EL5042(EBPFTerminal):
compatibility = {(2, 330444882)}
class Channel(Struct):
position = PacketDesc((0, 2), "q")
warning = PacketDesc((0, 0), 0)
error = PacketDesc((0, 0), 1)
status = PacketDesc((0, 0), "H")
position = PacketDesc(3, 2, "q")
warning = PacketDesc(3, 0, 0)
error = PacketDesc(3, 0, 1)
status = PacketDesc(3, 0, "H")
channel1 = Channel(0, None, 0)
channel2 = Channel(10, None, 0x10)
channel1 = Channel(0, 0)
channel2 = Channel(10, 0x10)
class EL6022(EBPFTerminal):
class Channel(Struct):
transmit_accept = PacketDesc((0, 0), 0)
receive_request = PacketDesc((0, 0), 1)
init_accept = PacketDesc((0, 0), 2)
status = PacketDesc((0, 0), "H")
in_string = PacketDesc((0, 1), "23p")
transmit_request = PacketDesc((1, 0), 0)
receive_accept = PacketDesc((1, 0), 1)
init_request = PacketDesc((1, 0), 2)
control = PacketDesc((1, 0), "H")
out_string = PacketDesc((1, 1), "23p")
transmit_accept = PacketDesc(3, 0, 0)
receive_request = PacketDesc(3, 0, 1)
init_accept = PacketDesc(3, 0, 2)
status = PacketDesc(3, 0, "H")
in_string = PacketDesc(3, 1, "23p")
transmit_request = PacketDesc(2, 0, 0)
receive_accept = PacketDesc(2, 0, 1)
init_request = PacketDesc(2, 0, 2)
control = PacketDesc(2, 0, "H")
out_string = PacketDesc(2, 1, "23p")
channel1 = Channel(0, 0)
channel2 = Channel(24, 24)
......@@ -118,8 +118,8 @@ class EL6022(EBPFTerminal):
class EL7041(EBPFTerminal):
compatibility = {(2, 461451346), (2, 461455442), (2, 460795986)}
velocity = PacketDesc((1, 6), "h")
enable = PacketDesc((1, 4), 0)
status = PacketDesc((0, 6), "H")
low_switch = PacketDesc((0, 1), 7)
high_switch = PacketDesc((0, 1), 8)
velocity = PacketDesc(2, 6, "h")
enable = PacketDesc(2, 4, 0)
status = PacketDesc(3, 6, "H")
low_switch = PacketDesc(3, 1, 7)
high_switch = PacketDesc(3, 1, 8)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment