栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

C#串口通讯02

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#串口通讯02

C#串口通讯 串口通讯和之前网络通讯一样,首先确定需要使用到的参数,然后声名成一个对象
public class BDSerialPortParam
    {
        /// 
        /// 串口号
        /// 
        public string portName { get; set; }
        /// 
        /// 波特率
        /// 
        public int baudRate { get; set; }
        /// 
        /// 数据位
        /// 
        public int dataBits { get; set; }
        /// 
        /// 校验位
        /// 
        public Parity parity { get; set; }
        /// 
        /// 停止位
        /// 
        public StopBits stopBits { get; set; }
    }
接着声名串口类,进行连接

此串口使用的是modbus通讯 buffer[]数组是需要发送的指令,其中0x01是设备站号,0x03是功能码,0x44和0x0C是CRC校验码,可通过文档给的方法计算出来,具体可以查看相应的说明书会有详细的说明。

public class BD4320SerialPort
    {

        public static SerialPort Serial;
        /// 
        /// 用于存储5个通道得温度
        /// 
        double[] TemperatureList = new double[5];
        /// 
        /// 发送给bd的字节数组
        /// 
        byte[] buffer = new byte[8];
        /// 
        /// 判断BD4320E是否连接
        /// 
        public bool IsConnection = true;
        /// 
        /// 初始化串口
        /// 
        /// 执行结果
        private bool InitialSerialPort( BDSerialPortParam mySerial)
        {
            if (Serial == null)
            {
                Serial = new SerialPort();
                Serial.PortName = mySerial.portName;
                Serial.BaudRate = mySerial.baudRate;
                Serial.DataBits = mySerial.dataBits;
                Serial.Parity = mySerial.parity;
                Serial.StopBits = mySerial.stopBits;

                buffer[0] = 0x01;
                buffer[1] = 0x03;
                buffer[2] = 0x00;
                buffer[3] = 0x00;
                buffer[4] = 0x00;
                buffer[5] = 0x08;
                buffer[6] = 0x44;
                buffer[7] = 0x0C;
            }
            else
            {
                Serial.Open();
                return true;
            }
            try
            {
                Serial.ReadTimeout = 1000;
                Serial.WriteTimeout = 500;
                Serial.Open();
                Serial.DtrEnable = true;
                Serial.RtsEnable = false;
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
        /// 
        /// 写入并读取
        /// 
        public double[] WriteAndRead(ref string msg)
        {
            try
            {
                msg = "";
                for (int i = 0; i < TemperatureList.Length; i++)
                {
                    TemperatureList[i] = 999.9;
                }
                Serial.Write(buffer, 0, buffer.Length);
                Thread.Sleep(60);
                int n = Serial.BytesToRead;
                byte[] receivebBuffer = new byte[n];
                Serial.Read(receivebBuffer, 0, n);
                //返回前3个字节是头报文  ((receivebBuffer[i] << 8) | receivebBuffer[i + 1])
                
                for (int i = 3, j = 0; i + 2 < receivebBuffer.Length && j < 5; i = i + 2, j++)
                {
                    TemperatureList[j] = ((receivebBuffer[i] << 8) | receivebBuffer[i + 1]) / 10.0;
                }
                IsConnection = true;
                return TemperatureList;
            }
            catch (Exception ex)
                {
                    IsConnection = false;
                    msg = ex.Message;
                    return TemperatureList;
                }
        }
        /// 
        /// 关闭串口资源
        /// 
        /// 消息
        /// 
        public bool ClosePort(ref string strMessage)
        {
            try
            {
                if (Serial == null)
                {
                    strMessage = "串口未实例化!";
                    return true;
                }
                if (Serial.IsOpen)
                {
                    Serial.Close();
                    if (Serial.IsOpen == false)
                    {
                        strMessage = "串口成功关闭!";
                        return true;
                    }
                    else
                    {
                        strMessage = "串口关闭失败!";
                        return false;
                    }
                }
                else
                {
                    strMessage = "串口未打开!";
                    return true;
                }
            }
            catch (Exception ex)
            {
                strMessage = ex.Message;
                Serial.Dispose();
                return false;
            }
        }

        /// 
        /// 构造函数
        /// 
        /// 
        public BD4320SerialPort(BDSerialPortParam mySerial)
        {
            InitialSerialPort(mySerial);
        }
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/877961.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号