C#实现继电器控制(触发灯开,灯灭,以及灯闪)
时间:2022-10-16 02:30:00
首先了解串口继电器协议(0)x24协议),发送的指令要求格式一般
帧头(1 字节),地址(1 字节),命令长度(1 字节),命令(1 字节),参数码(N 字节)、校验(1 字节)
波特率:9600,校验位:N,数据位:8,停止位:1
其次,确定控制灯开灯灭灯
硬件软件对接必须先实现,涉及串口通信,
获取通信端口并打开
C# serialPort类别用于打开串口
先看看serialPort没有串口,没有实例化
serialPort = new SerialPort("COM4");
serialPort.BaudRate = 9600;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.DataBits = 8;
然后打开串口
serialPort .Open();接着发送指令,指令是按协议拼成的16进制字符
字符串信中发送的字符串和字符串byte,没有十六进制数据,十六进制的全称叫十六进制字符串,也就是说,比如F转换后是一个byte字节值为10进制240,只有将收到的240转换为16进制字符串时才有F0
也就是说,我们需要将字节发送到串口,然后将16进制指令转换为byte字节
//16进制转byte
public static byte[] HexStringToByteArray(string s)
{
s = s.Replace(" ", "");
byte[] buffer = new byte[s.Length / 2];
for (int i = 0; i < s.Length; i = 2)
buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
return buffer;
}
再发送指令,即灯灭火灯亮的指令():
serialPort.Write(array, 0, array.Length);
可获得响应返回
byte[] recData = new byte[serialPort.BytesToRead];
serialPort.Read(recData, 0, recData.Length);
最后关闭串口
serialPort.Close();