Skip to content

Commit 932e538

Browse files
committed
8.19
8.29
1 parent 9b8d6d3 commit 932e538

File tree

1 file changed

+41
-37
lines changed

1 file changed

+41
-37
lines changed

frameAnalysis.py

Lines changed: 41 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -51,46 +51,17 @@ def CTR(self):
5151
self.field["CTR"] = ctr0
5252
leftframe = leftframectr[2:]
5353
return returnctr,leftframe
54-
else:#有扩展控制码
54+
else:#==0有扩展控制码
5555
i = 1
5656
chars = ctr0
5757
while int(ctr0,16)&0x80==0:#循环判断默认ctr之后的扩展字节是否可扩展
58-
ctr = leftframectr[2*i:2*i+2]
59-
chars += ctr##字符串拼接
58+
ctr0 = leftframectr[2*i:2*i+2]#此ctr0并不是指字符串开头
59+
chars += ctr0##字符串拼接
6060
i+=1
61+
6162
self.field["CTR"] = chars #讲扩展的CTR(ctr0,ctr1,...)构成的字符串追加进入域的全局变量中
6263
leftframe = leftframectr[2*i:]#捕获去掉ctr0,ctr1,...剩余的字符串
63-
##提取出ctr1内容部分
64-
ctr1 = self.field["CTR"][2:4]
65-
num = int(ctr1,16)
66-
if num==0x07:#代表寻址方式是广播,长度为0字节
67-
self.field["ADDR"] = leftframe#直接返回原字符串
68-
69-
elif num==0x06:##代表寻址方式是LA,长度为1
70-
self.field["ADDR"] = leftframe[:2]
71-
72-
elif num==0x05:##代表寻址方式是ID,长度为12
73-
self.field["ADDR"] = leftframe[:24]
74-
75-
elif num==0x04:##代表寻址方式是UC,长度为5字节
76-
n= 2##这个不对2<=n<=8
77-
self.field["ADDR"] = leftframe[:10]
78-
79-
elif num==0x03:#长度2字节
80-
self.field["ADDR"] = leftframe[:4]
81-
82-
elif num==0x02:#长度为4字节
83-
self.field["ADDR"] = leftframe[:8]
84-
85-
elif num==0x01:#长度为6字节
86-
self.field["ADDR"] = leftframe[:12]
87-
88-
elif num==0x00:#8字节
89-
self.field["ADDR"] = leftframe[:16]
90-
91-
else:#0字节
92-
self.field["ADDR"] = leftframe
93-
# return returnctr,self.leftframe[2*i:]#返回ctr第一个字节(便于获得首字节的每一位的信息)、后续长度的剩余字符串
64+
return returnctr,leftframe#返回ctr第一个字节(便于获得首字节的每一位的信息)、后续长度的剩余字符串
9465

9566
def MAM(self):#MAM域占一个字节
9667
'''E7 10231195711100600800100009190069711100600850120115B8C0FF4FB1'''
@@ -106,13 +77,46 @@ def MAM(self):#MAM域占一个字节
10677
self.field["MAM"] = leftframemam[:2]#MAM占一个字节
10778
return leftframemam[2:]#返回去掉多级地址的的字符串
10879

109-
def ADDR(self):#addr是由CTR1控制的,也就是说当存在CTR1时,ADDR也就存在,ADDR的具体形式由见表2-4寻址方式定义
80+
def ADDR(self):#addr是由CTR的b0-b2比特位控制的,当存在CTR1时,CTR1的b2-b0比特位表示的主站寻址方式,只存在ctr0时,b2-b0比特位表示从站的寻址方式,主从的寻址方式都是一样的
11081
leftframeaddr = self.MAM()##获取MAM()处理后的字符串
82+
##提取出ctr1内容部分
83+
ctr0 = self.field["CTR"][:2]
84+
if int(ctr0,16)&0x80==0:
85+
ctr1 = self.field["CTR"][2:4]
86+
num1 = int(ctr1,16)
87+
num = int(ctr0,16)
11188

112-
89+
if num is 0x07:#代表寻址方式是广播,长度为0字节
90+
self.field["ADDR"] = ""#直接返回原字符串
91+
return leftframeaddr
92+
elif num==0x06:##代表寻址方式是LA,长度为1
93+
self.field["ADDR"] = leftframeaddr[:2]
94+
return leftframeaddr[2:]
95+
elif num==0x05:##代表寻址方式是ID,长度为12
96+
self.field["ADDR"] = leftframeaddr[:24]
97+
return leftframeaddr[24:]
98+
elif num==0x04:##代表寻址方式是UC,长度为5字节
99+
self.field["ADDR"] = leftframeaddr[:10]
100+
return leftframeaddr[10:]
101+
elif num==0x03:#长度2字节
102+
self.field["ADDR"] = leftframeaddr[:4]
103+
return leftframeaddr[4:]
104+
elif num==0x02:#长度为4字节
105+
self.field["ADDR"] = leftframeaddr[:8]
106+
return leftframeaddr[8:]
107+
elif num==0x01:#长度为6字节
108+
self.field["ADDR"] = leftframeaddr[:12]
109+
return leftframeaddr[12:]
110+
elif num==0x00:#8字节
111+
self.field["ADDR"] = leftframeaddr[:16]
112+
return leftframeaddr[16:]
113+
else:#0字节
114+
return leftframeaddr
113115

114116
def SER(self):#长度为1个字节
115-
pass
117+
leftframeser = self.ADDR()
118+
self.field["SER"] = leftframeser[:2]
119+
return leftframeser[2:]
116120

117121
def DI(self):##
118122
pass

0 commit comments

Comments
 (0)