@@ -77,12 +77,12 @@ private void Scan()
7777 {
7878 //获取子节点个数
7979 var deviceCount = GetDeviceArrayIndexCount ( device ) + 1 ;
80- //TODO 50 可设置 配置
81- ScanPointsBatch ( device , 50 , deviceCount ) ;
80+ //TODO 20 可设置 配置
81+ ScanPointsBatch ( device , 20 , deviceCount ) ;
8282 }
83- Log ( "开始扫描属性" ) ;
8483 foreach ( var device in devicesList )
8584 {
85+ Log ( $ "开始扫描属性,Address:{ device . Address . ToString ( ) } DeviceId:{ device . DeviceId } ") ;
8686 ScanSubProperties ( device ) ;
8787 }
8888 Log ( "扫描完成" ) ;
@@ -144,7 +144,7 @@ public void ScanPointsBatch(BacNode device, uint deviceCount, uint count)
144144 }
145145 catch ( Exception exp )
146146 {
147- Log ( "Err:" + exp . Message ) ;
147+ Log ( "【 Err】 :" + exp . Message ) ;
148148 }
149149 }
150150
@@ -163,7 +163,7 @@ public uint GetDeviceArrayIndexCount(BacNode device)
163163 }
164164 catch ( Exception ex )
165165 {
166- Log ( "Err:" + ex . Message ) ;
166+ Log ( "【 Err】 :" + ex . Message ) ;
167167 }
168168 return 0 ;
169169 }
@@ -178,7 +178,7 @@ private BacnetValue ReadScalarValue(BacnetAddress adr, BacnetObjectId oid,
178178 }
179179 catch ( Exception ex )
180180 {
181- Log ( "Err:" + ex . Message ) ;
181+ Log ( "【 Err】 :" + ex . Message ) ;
182182 }
183183 return new BacnetValue ( ) ;
184184 }
@@ -189,73 +189,71 @@ private BacnetValue ReadScalarValue(BacnetAddress adr, BacnetObjectId oid,
189189 /// <param name="device"></param>
190190 private void ScanSubProperties ( BacNode device )
191191 {
192- var adr = device . Address ;
193- if ( adr == null ) return ;
194- if ( device . Properties == null ) return ;
192+ try
193+ {
194+ var adr = device . Address ;
195+ if ( adr == null ) return ;
196+ if ( device . Properties == null ) return ;
195197
196- List < BacnetPropertyReference > rList = new List < BacnetPropertyReference > ( ) ;
197- rList . Add ( new BacnetPropertyReference ( ( uint ) BacnetPropertyIds . PROP_DESCRIPTION , uint . MaxValue ) ) ;
198- rList . Add ( new BacnetPropertyReference ( ( uint ) BacnetPropertyIds . PROP_REQUIRED , uint . MaxValue ) ) ;
199- rList . Add ( new BacnetPropertyReference ( ( uint ) BacnetPropertyIds . PROP_OBJECT_NAME , uint . MaxValue ) ) ;
200- rList . Add ( new BacnetPropertyReference ( ( uint ) BacnetPropertyIds . PROP_PRESENT_VALUE , uint . MaxValue ) ) ;
201- List < BacnetReadAccessSpecification > properties = new List < BacnetReadAccessSpecification > ( ) ;
198+ List < BacnetPropertyReference > rList = new List < BacnetPropertyReference > ( ) ;
199+ rList . Add ( new BacnetPropertyReference ( ( uint ) BacnetPropertyIds . PROP_DESCRIPTION , uint . MaxValue ) ) ;
200+ rList . Add ( new BacnetPropertyReference ( ( uint ) BacnetPropertyIds . PROP_REQUIRED , uint . MaxValue ) ) ;
201+ rList . Add ( new BacnetPropertyReference ( ( uint ) BacnetPropertyIds . PROP_OBJECT_NAME , uint . MaxValue ) ) ;
202+ rList . Add ( new BacnetPropertyReference ( ( uint ) BacnetPropertyIds . PROP_PRESENT_VALUE , uint . MaxValue ) ) ;
202203
203- for ( int i = 0 ; i < device . Properties . Count ; i ++ )
204- {
205- var subNode = device . Properties [ i ] ;
206- try
204+ List < BacnetReadAccessResult > lstAccessRst = new List < BacnetReadAccessResult > ( ) ;
205+ var batchNumber = ( int ) numericUpDown1 . Value ;
206+ var batchCount = Math . Ceiling ( ( float ) device . Properties . Count / batchNumber ) ;
207+ for ( int i = 0 ; i < batchCount ; i ++ )
207208 {
208- properties . Add ( new BacnetReadAccessSpecification ( subNode . ObjectId , rList ) ) ;
209+ IList < BacnetReadAccessSpecification > properties = device . Properties . Skip ( i * batchNumber ) . Take ( batchNumber )
210+ . Select ( t => new BacnetReadAccessSpecification ( t . ObjectId , rList ) ) . ToList ( ) ;
211+ //批量读取
212+ lstAccessRst . AddRange ( Bacnet_client . ReadPropertyMultipleRequest ( adr , properties ) ) ;
213+ }
209214
210- //批量读取,9条一组
211- if ( ( i != 0 && i % 9 == 0 ) || i == device . Properties . Count - 1 )
215+ if ( lstAccessRst ? . Any ( ) ?? false )
216+ {
217+ foreach ( var aRst in lstAccessRst )
212218 {
213- IList < BacnetReadAccessResult > lstAccessRst = Bacnet_client . ReadPropertyMultipleRequest ( adr , properties ) ;
214- if ( lstAccessRst ? . Any ( ) ?? false )
219+ if ( aRst . values == null ) continue ;
220+ var subNode = device . Properties
221+ . Where ( t => t . ObjectId . Instance == aRst . objectIdentifier . Instance && t . ObjectId . Type == aRst . objectIdentifier . Type )
222+ . FirstOrDefault ( ) ;
223+ foreach ( var bPValue in aRst . values )
215224 {
216- foreach ( var aRst in lstAccessRst )
225+ if ( bPValue . value == null || bPValue . value . Count == 0 ) continue ;
226+ var pid = ( BacnetPropertyIds ) ( bPValue . property . propertyIdentifier ) ;
227+ var bValue = bPValue . value . First ( ) ;
228+ var strBValue = "" + bValue . Value ;
229+ //Log(pid + " , " + strBValue + " , " + bValue.Tag);
230+ switch ( pid )
217231 {
218- if ( aRst . values == null ) continue ;
219- subNode = device . Properties
220- . Where ( t => t . ObjectId . Instance == aRst . objectIdentifier . Instance && t . ObjectId . Type == aRst . objectIdentifier . Type )
221- . FirstOrDefault ( ) ;
222- foreach ( var bPValue in aRst . values )
223- {
224- if ( bPValue . value == null || bPValue . value . Count == 0 ) continue ;
225- var pid = ( BacnetPropertyIds ) ( bPValue . property . propertyIdentifier ) ;
226- var bValue = bPValue . value . First ( ) ;
227- var strBValue = "" + bValue . Value ;
228- //Log(pid + " , " + strBValue + " , " + bValue.Tag);
229- switch ( pid )
232+ case BacnetPropertyIds . PROP_DESCRIPTION : //描述
230233 {
231- case BacnetPropertyIds . PROP_DESCRIPTION : //描述
232- {
233- subNode . PROP_DESCRIPTION = bValue . ToString ( ) ? . Trim ( ) ;
234- }
235- break ;
236- case BacnetPropertyIds . PROP_OBJECT_NAME : //点名
237- {
238- subNode . PROP_OBJECT_NAME = bValue . ToString ( ) ? . Trim ( ) ;
239- }
240- break ;
241- case BacnetPropertyIds . PROP_PRESENT_VALUE : //值
242- {
243- subNode . PROP_PRESENT_VALUE = bValue . Value ;
244- subNode . DataType = bValue . Value . GetType ( ) ;
245- }
246- break ;
234+ subNode . PROP_DESCRIPTION = bValue . ToString ( ) ? . Trim ( ) ;
247235 }
248- }
249- ShwoText ( string . Format ( "地址:{0}\t 点名:{1}\t 值:{2}\t 类型:{3}\t 描述:{4} " , $ "{ subNode . ObjectId . Instance } _{ ( int ) subNode . ObjectId . Type } ", subNode . PROP_OBJECT_NAME , subNode . PROP_PRESENT_VALUE , subNode . PROP_PRESENT_VALUE . GetType ( ) . ToString ( ) . Split ( '.' ) [ 1 ] , subNode . PROP_DESCRIPTION ) ) ;
236+ break ;
237+ case BacnetPropertyIds . PROP_OBJECT_NAME : //点名
238+ {
239+ subNode . PROP_OBJECT_NAME = bValue . ToString ( ) ? . Trim ( ) ;
240+ }
241+ break ;
242+ case BacnetPropertyIds . PROP_PRESENT_VALUE : //值
243+ {
244+ subNode . PROP_PRESENT_VALUE = bValue . Value ;
245+ subNode . DataType = bValue . Value . GetType ( ) ;
246+ }
247+ break ;
250248 }
251249 }
252- properties . Clear ( ) ;
250+ ShwoText ( string . Format ( "地址:{0} \t 点名:{1} \t 值:{2} \t 类型:{3} \t 描述:{4} " , $ " { subNode . ObjectId . Instance } _ { ( int ) subNode . ObjectId . Type } " , subNode . PROP_OBJECT_NAME , subNode . PROP_PRESENT_VALUE , subNode . PROP_PRESENT_VALUE . GetType ( ) . ToString ( ) . Split ( '.' ) [ 1 ] , subNode . PROP_DESCRIPTION ) ) ;
253251 }
254252 }
255- catch ( Exception exp )
256- {
257- Log ( "Error: " + exp . Message ) ;
258- }
253+ }
254+ catch ( Exception ex )
255+ {
256+ Log ( "【Err】:" + ex . Message ) ;
259257 }
260258 }
261259
@@ -277,8 +275,8 @@ private void ShwoText(string str)
277275
278276 private async void Read_ClickAsync ( object sender , EventArgs e )
279277 {
280- var address = txt_address . Text ? . Trim ( ) ;
281- var addressPart = address . Split ( '_' ) ;
278+ var address = txt_address . Text ? . Trim ( ) ;
279+ var addressPart = address . Split ( '_' ) ;
282280 BacProperty rpop = null ;
283281 BacNode bacnet = null ;
284282
@@ -320,14 +318,14 @@ private async void Read_ClickAsync(object sender, EventArgs e)
320318 }
321319 catch
322320 {
323- Log ( "Err:读取失败." ) ;
321+ Log ( "【 Err】 :读取失败." ) ;
324322 }
325323 }
326324 else
327325 {
328326 retry ++ ;
329327 if ( retry < 4 ) goto tag_retry ;
330- Log ( $ "Err:读取失败[{ retry - 1 } ]") ;
328+ Log ( $ "【 Err】 :读取失败[{ retry - 1 } ]") ;
331329 }
332330 }
333331
0 commit comments