139 lines
5.6 KiB
Python
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
|
|
|