@@ -51,46 +51,17 @@ def CTR(self):
51
51
self .field ["CTR" ] = ctr0
52
52
leftframe = leftframectr [2 :]
53
53
return returnctr ,leftframe
54
- else :#有扩展控制码
54
+ else :#==0有扩展控制码
55
55
i = 1
56
56
chars = ctr0
57
57
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 ##字符串拼接
60
60
i += 1
61
+
61
62
self .field ["CTR" ] = chars #讲扩展的CTR(ctr0,ctr1,...)构成的字符串追加进入域的全局变量中
62
63
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第一个字节(便于获得首字节的每一位的信息)、后续长度的剩余字符串
94
65
95
66
def MAM (self ):#MAM域占一个字节
96
67
'''E7 10231195711100600800100009190069711100600850120115B8C0FF4FB1'''
@@ -106,13 +77,46 @@ def MAM(self):#MAM域占一个字节
106
77
self .field ["MAM" ] = leftframemam [:2 ]#MAM占一个字节
107
78
return leftframemam [2 :]#返回去掉多级地址的的字符串
108
79
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比特位表示从站的寻址方式,主从的寻址方式都是一样的
110
81
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 )
111
88
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
113
115
114
116
def SER (self ):#长度为1个字节
115
- pass
117
+ leftframeser = self .ADDR ()
118
+ self .field ["SER" ] = leftframeser [:2 ]
119
+ return leftframeser [2 :]
116
120
117
121
def DI (self ):##
118
122
pass
0 commit comments