You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
2.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TouchSocket.Core;
namespace NDSD_TouchSocket
{
public class SendAnalysis
{
/// <summary>
/// DO启动操作数据头
/// </summary>
private string DOperateHead = "01 05 00 ";
/// <summary>
/// DO启动操作数据尾
/// </summary>
private string DOpenData = " FF 00 ";
/// <summary>
/// DO关闭操作数据尾
/// </summary>
private string DCloseData = " 00 00 ";
/// <summary>
/// DO计时启动操作数据头
/// </summary>
private string DTimeOperateHead = " 01 07 00 ";
/// <summary>
/// DO计时启动操作码
/// </summary>
private string DTimeOpenData = " FF 00 ";
public byte[] DTimeOpenDataAnalysis(byte port, int delay)
{
byte[] bytes = IntToDoubleByte(delay);
Array.Reverse(bytes);
string CrcData = DTimeOperateHead + port.ToString("X2") + DTimeOpenData + bytes.ToHexStrFromByte();
return CrcCombine(CrcData);
}
/// <summary>
/// DO开启
/// </summary>
/// <param name="port"></param>
/// <returns></returns>
public byte[] DOpenDataAnalysis(byte port)
{
string CrcData = DOperateHead + port.ToString("X2") + DOpenData; //结合
return CrcCombine(CrcData);
}
/// <summary>
/// DO关闭
/// </summary>
/// <param name="port"></param>
/// <returns></returns>
public byte[] DCloseDataAnlysis(byte port)
{
string CrcData = DOperateHead + port.ToString("X2") + DCloseData; //结合
return CrcCombine(CrcData);
}
/// <summary>
/// 结合CRC16
/// </summary>
/// <param name="CrcData"></param>
/// <returns></returns>
public byte[] CrcCombine(string CrcData)
{
byte[] body = CrcData.ToBytesFromHexString(); //byte的校验体
int crc = CRC16.CalculateCRC(body, body.Length); //int32CRC值
return body.Concat(IntToDoubleByte(crc)).ToArray();
}
/// <summary>
/// int转换为两位Byte数字
/// </summary>
/// <param name="i"></param>
/// <returns></returns>
public byte[] IntToDoubleByte(int i)
{
byte highByte = (byte)(i >> 8); // 获取高字节
byte lowByte = (byte)(i & 0xFF); // 获取低字节
byte[] bytes = { lowByte, highByte };
return bytes;
}
}
}