電子稱串口編程

        private const int BaudRate = 600; // 電子稱波特率
        private SerialPort sp = null;
        private const string PortName = "COM1";//端口號
        private delegate void UpdateTextEventHandler(string data);//定義委託
        private event UpdateTextEventHandler textChanged;//定義事件

     private void initPort()
        {
            sp = new SerialPort();
            try
            {
                sp.PortName = PortName;//端口號
                sp.BaudRate = BaudRate; //波特率
                sp.DataBits = 8;//數據位 8位
                sp.Parity = Parity.None;//無奇偶校驗位 
                sp.DtrEnable = true;
                sp.RtsEnable = true;
                sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
                textChanged += new UpdateTextEventHandler(SerialPortTest_textChanged);
                if (!sp.IsOpen)
                {
                    sp.Open();
                }
            }
            catch (Exception ex)
            {
                FunctionsUI.CreateErrorDialog(ex);
            }
        }


        /// <summary>
        /// 發送數據請求命令
        /// </summary>
        private void sendDataRequest()
        {
            byte[] arrByte = new byte[2];
            //發送命令 1BH+70H  與電子稱通訊,讀取電子稱數據,16進制
            arrByte[0] = Convert.ToByte(0x1B);
            arrByte[1] = 0x70;
            sp.Write(arrByte, 0, 2);
            byte[] buffer = new byte[sp.BytesToRead];
        }

      //返回數據,對數據進行處理
        void SerialPortTest_textChanged(string data)
        {
       //TODO
        }


        void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                System.Threading.Thread.Sleep(500);//如果時間短了可能讀取數據不完整
                byte[] buffer = new byte[sp.BytesToRead];
                sp.Read(buffer, 0, buffer.Length);
                string data = System.Text.Encoding.ASCII.GetString(buffer);
                txtWight.Invoke(textChanged, new string[] { data }); //通過Invoke調用事件
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }


        /// <summary>
        /// 關閉串口
        /// </summary>
        public void DisposeProt()
        {
            if (sp != null && sp.IsOpen)
            {
                sp.Close();
            }
        }
</pre><pre name="code" class="csharp">

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