@@ -90,12 +90,12 @@ public static int GetMrtuDataTypeLengthForRead(MrtuDataType mrtuDataType)
90
90
}
91
91
92
92
/// <summary>
93
- /// 字节序转换
93
+ /// 字节序转换 输入字节序视为ABCD, 再根据输入字节序进行转换
94
94
/// </summary>
95
95
/// <param name="val"></param>
96
96
/// <param name="byteOrder"></param>
97
97
/// <returns></returns>
98
- public static byte [ ] ByteOrder ( byte [ ] val , ModbusByteOrder byteOrder )
98
+ public static byte [ ] ConvertByteOrder ( byte [ ] val , ModbusByteOrder byteOrder )
99
99
{
100
100
//若为单字节的则直接返回
101
101
if ( val . Length <= 1 )
@@ -152,7 +152,7 @@ public static byte[] ByteOrder(byte[] val, ModbusByteOrder byteOrder)
152
152
/// <returns></returns>
153
153
public static List < ComPort > GetComPorts ( )
154
154
{
155
- List < ComPort > ports = [ ] ;
155
+ List < ComPort > ports = [ ] ;
156
156
//查找Com口
157
157
using System . Management . ManagementObjectSearcher searcher = new ( "select * from Win32_PnPEntity where Name like '%(COM[0-999]%'" ) ;
158
158
var hardInfos = searcher . Get ( ) ;
@@ -204,4 +204,116 @@ public static bool IsModbusCrcOk(List<byte> frame)
204
204
{
205
205
return IsModbusCrcOk ( frame . ToArray ( ) ) ;
206
206
}
207
+
208
+
209
+
210
+
211
+ #region 字节数组处理
212
+ /// <summary>
213
+ /// 截取字节数组
214
+ /// </summary>
215
+ /// <param name="input">字节数组</param>
216
+ /// <param name="skip">起始位置</param>
217
+ /// <param name="take">读取数量</param>
218
+ /// <returns></returns>
219
+ public static byte [ ] TakeBytes ( byte [ ] input , int skip , int take )
220
+ {
221
+ return input . Skip ( skip ) . Take ( take ) . ToArray ( ) ;
222
+ }
223
+
224
+ /// <summary>
225
+ /// 从字节数据中截取 16位无符号整型
226
+ /// </summary>
227
+ /// <param name="data"></param>
228
+ /// <param name="p"></param>
229
+ /// <param name="modbusByteOrder"></param>
230
+ /// <returns></returns>
231
+ public static ushort GetUInt16 ( byte [ ] data , int p , ModbusByteOrder modbusByteOrder = ModbusByteOrder . DCBA )
232
+ {
233
+ return BitConverter . ToUInt16 ( ConvertByteOrder ( TakeBytes ( data , p , 2 ) , modbusByteOrder ) , 0 ) ;
234
+ }
235
+
236
+ /// <summary>
237
+ /// 从字节数据中截取 16位有符号整型
238
+ /// </summary>
239
+ /// <param name="data"></param>
240
+ /// <param name="p"></param>
241
+ /// <param name="modbusByteOrder"></param>
242
+ /// <returns></returns>
243
+ public static short GetInt16 ( byte [ ] data , int p , ModbusByteOrder modbusByteOrder = ModbusByteOrder . DCBA )
244
+ {
245
+ return BitConverter . ToInt16 ( ConvertByteOrder ( TakeBytes ( data , p , 2 ) , modbusByteOrder ) , 0 ) ;
246
+ }
247
+
248
+ /// <summary>
249
+ /// 从字节数据中截取 32位无符号整型
250
+ /// </summary>
251
+ /// <param name="data"></param>
252
+ /// <param name="p"></param>
253
+ /// <param name="modbusByteOrder"></param>
254
+ /// <returns></returns>
255
+ public static uint GetUInt32 ( byte [ ] data , int p , ModbusByteOrder modbusByteOrder = ModbusByteOrder . DCBA )
256
+ {
257
+ return BitConverter . ToUInt32 ( ConvertByteOrder ( TakeBytes ( data , p , 4 ) , modbusByteOrder ) , 0 ) ;
258
+ }
259
+
260
+ /// <summary>
261
+ /// 从字节数据中截取 32位有符号整型
262
+ /// </summary>
263
+ /// <param name="data"></param>
264
+ /// <param name="p"></param>
265
+ /// <param name="modbusByteOrder"></param>
266
+ /// <returns></returns>
267
+ public static int GetInt ( byte [ ] data , int p , ModbusByteOrder modbusByteOrder = ModbusByteOrder . DCBA )
268
+ {
269
+ return BitConverter . ToInt32 ( ConvertByteOrder ( TakeBytes ( data , p , 4 ) , modbusByteOrder ) , 0 ) ;
270
+ }
271
+
272
+ /// <summary>
273
+ /// 从字节数组中指定位置读取float数据 32位浮点型
274
+ /// </summary>
275
+ /// <param name="data"></param>
276
+ /// <param name="p">指示数据在数组中的起始位置</param>
277
+ /// <returns></returns>
278
+ public static float GetFloat ( byte [ ] data , int p , ModbusByteOrder modbusByteOrder = ModbusByteOrder . DCBA )
279
+ {
280
+ return BitConverter . ToSingle ( ConvertByteOrder ( TakeBytes ( data , p , 4 ) , modbusByteOrder ) , 0 ) ;
281
+ }
282
+
283
+ /// <summary>
284
+ /// 从大端数组指定位置读取unsigned Long数据
285
+ /// </summary>
286
+ /// <param name="data"></param>
287
+ /// <param name="p"></param>
288
+ /// <param name="modbusByteOrder"></param>
289
+ /// <returns></returns>
290
+ public static ulong GetUInt64 ( byte [ ] data , int p , ModbusByteOrder modbusByteOrder = ModbusByteOrder . DCBA )
291
+ {
292
+ return BitConverter . ToUInt64 ( ConvertByteOrder ( TakeBytes ( data , p , 8 ) , modbusByteOrder ) , 0 ) ;
293
+ }
294
+
295
+ /// <summary>
296
+ /// 从大端数组指定位置读取Long数据
297
+ /// </summary>
298
+ /// <param name="data"></param>
299
+ /// <param name="p"></param>
300
+ /// /// <param name="modbusByteOrder"></param>
301
+ /// <returns></returns>
302
+ public static long GetInt64 ( byte [ ] data , int p , ModbusByteOrder modbusByteOrder = ModbusByteOrder . DCBA )
303
+ {
304
+ return BitConverter . ToInt64 ( ConvertByteOrder ( TakeBytes ( data , p , 8 ) , modbusByteOrder ) , 0 ) ;
305
+ }
306
+
307
+ /// <summary>
308
+ /// 从大端数组指定位置读取Double数据
309
+ /// </summary>
310
+ /// <param name="data"></param>
311
+ /// <param name="p"></param>
312
+ /// /// <param name="modbusByteOrder"></param>
313
+ /// <returns></returns>
314
+ public static double GetDouble ( byte [ ] data , int p , ModbusByteOrder modbusByteOrder = ModbusByteOrder . DCBA )
315
+ {
316
+ return BitConverter . ToDouble ( ConvertByteOrder ( TakeBytes ( data , p , 8 ) , modbusByteOrder ) , 0 ) ;
317
+ }
318
+ #endregion
207
319
}
0 commit comments