C#實現繼電器控制(觸發燈開,燈滅,以及燈閃)

首先明白串口繼電器協議(0x24協議),發送的指令要求格式一般

幀頭(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,是不存在十六進制數據的,十六進制的全稱叫十六進制字符串,也就是說比如F0,轉換後就是一個byte字節,值爲十進制240,只有當把收到的240轉成十六進制字符串時纔有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();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章