|
|
@ -9,10 +9,9 @@ using GodSharp.SerialPort; |
|
|
|
using System.IO.Ports; |
|
|
|
using System.IO.Ports; |
|
|
|
using System.Text.RegularExpressions; |
|
|
|
using System.Text.RegularExpressions; |
|
|
|
|
|
|
|
|
|
|
|
namespace Soul2.General.utils { |
|
|
|
namespace Soul2.SerialPort.utils { |
|
|
|
/// <summary> |
|
|
|
/// <summary> |
|
|
|
/// 串口通信工具类 |
|
|
|
/// 串口通信工具类 |
|
|
|
/// 需要TimerUtils |
|
|
|
|
|
|
|
/// </summary> |
|
|
|
/// </summary> |
|
|
|
public static class GodSerialPortUtils { |
|
|
|
public static class GodSerialPortUtils { |
|
|
|
|
|
|
|
|
|
|
@ -42,17 +41,22 @@ namespace Soul2.General.utils { |
|
|
|
/// 查询所有可用串口 |
|
|
|
/// 查询所有可用串口 |
|
|
|
/// </summary> |
|
|
|
/// </summary> |
|
|
|
/// <returns>串口名称数组</returns> |
|
|
|
/// <returns>串口名称数组</returns> |
|
|
|
public static string[] find() { |
|
|
|
public static string[] find() => System.IO.Ports.SerialPort.GetPortNames(); |
|
|
|
return SerialPort.GetPortNames(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
/// <summary> |
|
|
|
/// 当前连接状态 |
|
|
|
/// 当前连接状态 |
|
|
|
/// </summary> |
|
|
|
/// </summary> |
|
|
|
/// <returns></returns> |
|
|
|
/// <returns></returns> |
|
|
|
public static bool status() { |
|
|
|
public static bool status() => (gsp != null && gsp.IsOpen != false); |
|
|
|
return gsp != null && gsp.IsOpen != false; |
|
|
|
|
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
|
|
|
|
/// 发送报文信息 |
|
|
|
|
|
|
|
/// </summary> |
|
|
|
|
|
|
|
/// <param name="data">发送的内容</param> |
|
|
|
|
|
|
|
/// <param name="callback">回调函数,参数为byte[]类型的回信</param> |
|
|
|
|
|
|
|
/// <param name="wait_complete">是否等待回信完成再执行回调函数,默认为否</param> |
|
|
|
|
|
|
|
/// <exception cref="Exception"></exception> |
|
|
|
|
|
|
|
public static void send(string data, Action<byte[]> callback = null, bool wait_complete = false) => send(data.HexToByte(), callback, wait_complete); |
|
|
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
/// <summary> |
|
|
|
/// 发送报文信息 |
|
|
|
/// 发送报文信息 |
|
|
@ -142,5 +146,24 @@ namespace Soul2.General.utils { |
|
|
|
return hexBytes.ToHexString(); |
|
|
|
return hexBytes.ToHexString(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
|
|
|
|
/// 计算校验码 |
|
|
|
|
|
|
|
/// </summary> |
|
|
|
|
|
|
|
/// <param name="msg">当前报文,不应包含校验码的部分</param> |
|
|
|
|
|
|
|
/// <returns></returns> |
|
|
|
|
|
|
|
public static string CalcChecksum(string msg) { |
|
|
|
|
|
|
|
if (msg.StartsWith("FE FE FE FE ")) { |
|
|
|
|
|
|
|
msg = msg.Replace("FE FE FE FE ", ""); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 检查输入字符串是否符合要求 |
|
|
|
|
|
|
|
if (!Regex.IsMatch(msg, @"^[\da-fA-F]{2}( [\da-fA-F]{2})*$")) { |
|
|
|
|
|
|
|
return "=="; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var bts = msg.Split(' ').Select(b => Convert.ToInt32(b, 16)).ToArray(); |
|
|
|
|
|
|
|
var r = (bts.Sum() % 256).ToString("X2"); |
|
|
|
|
|
|
|
return r; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |