Bu yazımızda C# Hex to Float Converter programı ile seri porttan gelen bir bilgiyi hex olarak ekrana basmayı ve daha sonra bu veriyi float değerine dönüştürmeyi göreceğiz. Bildiğiniz gibi tüm veriler ilk katmanda 1 ve 0 olarak gelmektedir. Bu sinyaller bizim daha rahat bir şekilde anlayabilmemiz için çeşitli sayı formatlarına dönüştürülür.
Aşağıdaki c sharp kod satırlarında seri porta veri düştüğünde SerialPort_DataRecieved() fonksiyonu çalışmaktadır. İlk önce serial buffer daki veri okunarak hex’ e dönüştürülür sonra hex bilgisi float değerine dönüştürülerek text box ta basılır.
// www.kaizen40.com private void SerialPort_DataRecieved(object sender, SerialDataReceivedEventArgs e) { try { Thread.Sleep(30); // verinin tamamen gelmesini bekle //GelenVeri = serialPort.ReadLine(); // string olarak oku byte[] data = new Byte[serialPort.BytesToRead]; // seriportta kaç adet data var serialPort.Read(data, 0, data.Length); // byte olarak datayı oku GelenVeri = BitConverter.ToString(data).Replace("-", ""); //GelenAscii = enc8.GetString(data); // ascii ye çevir uint num = uint.Parse(GelenVeri, System.Globalization.NumberStyles.AllowHexSpecifier); byte[] floatVals = BitConverter.GetBytes(num); fdeger = BitConverter.ToSingle(floatVals, 0); Invoke(new EventHandler(Goster)); // textbox a yazmak için invoke oluştur } catch (Exception hata) { MessageBox.Show(hata.StackTrace); } } private void Goster(object sender, EventArgs e) { // textbox veya diğer objelerde göstermek için burada yazın TextBox1.Text = fdeger.ToString(); }
Ben bu kodu bir sensorden gelen modbus bilgilerini serialport ile hex olarak okuyup float’a çevirip ekrana basmak için kullandım.
0 yorum