C# WINFORM接RS232的磅秤機,顯示磅秤機的秤出重量

  • 151
  • 0

C# WINFORM接RS232的磅秤機,顯示磅秤機的秤出重量

 

這案子是為了減少秤重人員人工填寫錯誤重量

所以用C#的WINFORM將磅秤機所秤出的重量直接讀入程式的TEXTBOX中

難度不高

但是有幾個關鍵點要先解決

 

1-磅秤機要有輸出秤出的重量的功能,使用RS232或網路上傳都可以

2-如果是用RS232的話,接收的電腦也要有RS232的接頭,要買RS232轉USB的轉接頭

https://ecshweb.pchome.com.tw/search/v3.3/?q=rs232%E8%BD%89usb

3-C#程式中用Thread、delegate去開啟執行緒來讀入磅秤機輸出秤出的重量

4-RS232的SerialPort有固定參數要設定,最重要是 PortName 要設定對接到真正的COM

程式如下:

 private void Frm_Load(object sender, EventArgs e)
 	{
      	Btnconnect();
 	}
 
  public void Btnconnect()
        {
            serialPortIn = new SerialPort();
          
            serialPortIn.PortName ="COM1";       
            serialPortIn.BaudRate = 9600;
            serialPortIn.Parity = Parity.None;
            serialPortIn.DataBits = 8;
            serialPortIn.StopBits = StopBits.One;

           

            if (!serialPortIn.IsOpen)
            {
                try
                {
                   
                    serialPortIn.Open();

                }
                catch (Exception ee)
                {

                    MessageBox.Show(@"ERROR:" + ee);
                }


            }


            if (serialPortIn.IsOpen)
            {
                ReadSerialData();
               
            }

        }

        private void ReadSerialData()
        {
            ReadSerialDataThread = new Thread(ReadSerial);
            ReadSerialDataThread.Start();
        }

        private void ReadSerial()
        {
            while (serialPortIn.IsOpen)
            {
                try
                {
                    readseroaldata = serialPortIn.ReadLine();
                    ShowSerialData(readseroaldata);
                }
                catch (Exception)
                {


                }


                Thread.Sleep(20);
            }
        }

        public delegate void ShowSerialDatadelegate(string r);
        private void ShowSerialData(string s)
        {
            DateTime now = DateTime.Now;
            string pattern = @"[-+]?\d*\.?\d+";
            string datacon = "";
            
            if (textBox.InvokeRequired)
            {
                ShowSerialDatadelegate SSDD = ShowSerialData;
                Invoke(SSDD, s);
            }
            else
            {
                MatchCollection matches = Regex.Matches(s, pattern);
                foreach (Match match in matches)
                {
                    datacon += match.Value;
                }

                textBox.Text = datacon;            

            }
        }
 
        

 

 

自我LV~