Files
ecmc_plugin_motion/tools/ecmcParseAxisStatusWord.py
2023-08-18 15:38:16 +02:00

139 lines
5.6 KiB
Python

import numpy as np
# unsigned char enable : 1;
# unsigned char enabled : 1;
# unsigned char execute : 1;
# unsigned char busy : 1;
# unsigned char attarget : 1;
# unsigned char moving : 1;
# unsigned char limitfwd : 1;
# unsigned char limitbwd : 1;
# unsigned char homeswitch : 1;
# unsigned char homed : 1;
# unsigned char inrealtime : 1;
# unsigned char trajsource : 1;
# unsigned char encsource : 1;
# unsigned char plccmdallowed : 1;
# unsigned char softlimfwdena : 1;
# unsigned char softlimbwdena : 1;
# unsigned char instartup : 1;
# unsigned char sumilockfwd : 1;
# unsigned char sumilockbwd : 1;
# unsigned char axisType : 1;
# unsigned char seqstate : 4;
# unsigned char lastilock : 8;
names = ['enable',
'enabled',
'execute',
'busy',
'attarget',
'moving',
'limitfwd',
'limitbwd',
'homeswitch',
'homed',
'inrealtime',
'trajsource',
'encsource',
'plccmdallowed',
'softlimfwdena',
'softlimbwdena',
'instartup',
'sumilockfwd',
'sumilockbwd',
'axisType',
'seqstate',
'lastilock']
class ecmcParseAxisStatusWord():
def convert(self,statusWdArray):
arraylength = len(statusWdArray)
data = np.empty([22,arraylength])
i = 0
for statwd in statusWdArray:
data[:20:,i] = self.binaryRepr20(statwd)[::-1] # need reverse
data[20,i] = self.getSeqState(statwd)
data[21,i] = self.getIlockData(statwd)
i += 1
return data
def getSeqState(self,data):
localdata = data.astype(int)
return np.bitwise_and(localdata,0b11110000000000000000000) >> 20
def getIlockData(self,data):
localdata = data.astype(int)
return np.bitwise_and(localdata,0b1111111100000000000000000000000) >> 24
def binaryRepr32(self,data):
localdata = data.astype(int)
return(
np.dstack((
np.bitwise_and(localdata, 0b10000000000000000000000000000000) >> 31,
np.bitwise_and(localdata, 0b1000000000000000000000000000000) >> 30,
np.bitwise_and(localdata, 0b100000000000000000000000000000) >> 29,
np.bitwise_and(localdata, 0b10000000000000000000000000000) >> 28,
np.bitwise_and(localdata, 0b1000000000000000000000000000) >> 27,
np.bitwise_and(localdata, 0b100000000000000000000000000) >> 26,
np.bitwise_and(localdata, 0b10000000000000000000000000) >> 25,
np.bitwise_and(localdata, 0b1000000000000000000000000) >> 24,
np.bitwise_and(localdata, 0b100000000000000000000000) >> 23,
np.bitwise_and(localdata, 0b10000000000000000000000) >> 22,
np.bitwise_and(localdata, 0b1000000000000000000000) >> 21,
np.bitwise_and(localdata, 0b100000000000000000000) >> 20,
np.bitwise_and(localdata, 0b10000000000000000000) >> 19,
np.bitwise_and(localdata, 0b1000000000000000000) >> 18,
np.bitwise_and(localdata, 0b100000000000000000) >> 17,
np.bitwise_and(localdata, 0b10000000000000000) >> 16,
np.bitwise_and(localdata, 0b1000000000000000) >> 15,
np.bitwise_and(localdata, 0b100000000000000) >> 14,
np.bitwise_and(localdata, 0b10000000000000) >> 13,
np.bitwise_and(localdata, 0b1000000000000) >> 12,
np.bitwise_and(localdata, 0b100000000000) >> 11,
np.bitwise_and(localdata, 0b10000000000) >> 10,
np.bitwise_and(localdata, 0b1000000000) >> 9,
np.bitwise_and(localdata, 0b100000000) >> 8,
np.bitwise_and(localdata, 0b10000000) >> 7,
np.bitwise_and(localdata, 0b1000000) >> 6,
np.bitwise_and(localdata, 0b100000) >> 5,
np.bitwise_and(localdata, 0b10000) >> 4,
np.bitwise_and(localdata, 0b1000) >> 3,
np.bitwise_and(localdata, 0b100) >> 2,
np.bitwise_and(localdata, 0b10) >> 1,
np.bitwise_and(localdata, 0b1)
)).flatten() > 0).astype(int)
def binaryRepr20(self,data):
localdata = data.astype(int)
return(
np.dstack((
np.bitwise_and(localdata, 0b10000000000000000000) >> 19,
np.bitwise_and(localdata, 0b1000000000000000000) >> 18,
np.bitwise_and(localdata, 0b100000000000000000) >> 17,
np.bitwise_and(localdata, 0b10000000000000000) >> 16,
np.bitwise_and(localdata, 0b1000000000000000) >> 15,
np.bitwise_and(localdata, 0b100000000000000) >> 14,
np.bitwise_and(localdata, 0b10000000000000) >> 13,
np.bitwise_and(localdata, 0b1000000000000) >> 12,
np.bitwise_and(localdata, 0b100000000000) >> 11,
np.bitwise_and(localdata, 0b10000000000) >> 10,
np.bitwise_and(localdata, 0b1000000000) >> 9,
np.bitwise_and(localdata, 0b100000000) >> 8,
np.bitwise_and(localdata, 0b10000000) >> 7,
np.bitwise_and(localdata, 0b1000000) >> 6,
np.bitwise_and(localdata, 0b100000) >> 5,
np.bitwise_and(localdata, 0b10000) >> 4,
np.bitwise_and(localdata, 0b1000) >> 3,
np.bitwise_and(localdata, 0b100) >> 2,
np.bitwise_and(localdata, 0b10) >> 1,
np.bitwise_and(localdata, 0b1)
)).flatten() > 0)
def getNames(self):
return names