Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,036

HOME > .NET Framework > Forum > C# ขอความช่วยเหลือ เรื่อง การรับข้อมูลทาง Serial Port



 

C# ขอความช่วยเหลือ เรื่อง การรับข้อมูลทาง Serial Port

 



Topic : 069797



โพสกระทู้ ( 8 )
บทความ ( 0 )



สถานะออฟไลน์




ขอความช่วยเหลือด้วยครับ
คือว่า ผมต้องการที่จะรับข้อมูลทาง serial Port อยากทราบว่าโค้ดข้างล่างนี้เขียนถูกหรือเปล่าครับ
เพราะว่าผมไม่สามารถรับข้อมูลทาง Serial Port ได้เรยครับ
ต้องแก้ไขอย่างไรบ้าง ขอบคุณมากครับ


Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace Test_SerialPort
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        SerialPort port = new SerialPort();

        private void Form1_Load(object sender, EventArgs e)
        {
            fetch_comport();
        }
        private void fetch_comport()
        {
            string[] portNames = System.IO.Ports.SerialPort.GetPortNames();
            comboBox1.Items.Clear();
            for (int i = 0; i <= portNames.Length - 1; i++)
            {
                comboBox1.Items.Add(portNames[i]);
            } 
        
        }
        private void bt_RefreshPort_Click(object sender, EventArgs e)
        {
            fetch_comport();
        }

        private void bt_openport_Click(object sender, EventArgs e)
        {
            
            try
            {
                port.PortName = comboBox1.Text;
                port.Open();
                textBox1.Text = port.PortName;
                textBox2.Text = port.BaudRate.ToString();
                textBox3.Text = port.Parity.ToString();
                textBox4.Text = port.DataBits.ToString();
                textBox5.Text = port.StopBits.ToString();
            }
            catch (Exception ex){
                MessageBox.Show(ex.Message);
            }
        }

        private void bt_clear_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            textBox4.Text = "";
            textBox5.Text = "";
        }
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            //---invoke the delegate to retrieve the received data---
            textBox6.BeginInvoke(new myDelegate(updateTextBox));
        }
        public delegate void myDelegate();
        public void updateTextBox()
        {
            //---append the received data into the TextBox control---
            textBox6.AppendText(port.ReadExisting());
            textBox6.ScrollToCaret();
        }
        private void bt_closeport_Click(object sender, EventArgs e)
        {
            port.Close();
        }
    }
}




Tag : .NET, C#, VS 2010 (.NET 4.x)







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2011-12-01 20:13:56 By : smallBB View : 7779 Reply : 8
 

 

No. 1



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ลองดูครับ

Code (C#)
using System;
using System.IO.Ports;
using System.Threading;

public class PortChat
{
    static bool _continue;
    static SerialPort _serialPort;

    public static void Main()
    {
        string name;
        string message;
        StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
        Thread readThread = new Thread(Read);

        // Create a new SerialPort object with default settings.
        _serialPort = new SerialPort();

        // Allow the user to set the appropriate properties.
        _serialPort.PortName = SetPortName(_serialPort.PortName);
        _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate);
        _serialPort.Parity = SetPortParity(_serialPort.Parity);
        _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits);
        _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits);
        _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake);

        // Set the read/write timeouts
        _serialPort.ReadTimeout = 500;
        _serialPort.WriteTimeout = 500;

        _serialPort.Open();
        _continue = true;
        readThread.Start();

        Console.Write("Name: ");
        name = Console.ReadLine();

        Console.WriteLine("Type QUIT to exit");

        while (_continue)
        {
            message = Console.ReadLine();

            if (stringComparer.Equals("quit", message))
            {
                _continue = false;
            }
            else
            {
                _serialPort.WriteLine(
                    String.Format("<{0}>: {1}", name, message) );
            }
        }

        readThread.Join();
        _serialPort.Close();
    }

    public static void Read()
    {
        while (_continue)
        {
            try
            {
                string message = _serialPort.ReadLine();
                Console.WriteLine(message);
            }
            catch (TimeoutException) { }
        }
    }

    public static string SetPortName(string defaultPortName)
    {
        string portName;

        Console.WriteLine("Available Ports:");
        foreach (string s in SerialPort.GetPortNames())
        {
            Console.WriteLine("   {0}", s);
        }

        Console.Write("COM port({0}): ", defaultPortName);
        portName = Console.ReadLine();

        if (portName == "")
        {
            portName = defaultPortName;
        }
        return portName;
    }

    public static int SetPortBaudRate(int defaultPortBaudRate)
    {
        string baudRate;

        Console.Write("Baud Rate({0}): ", defaultPortBaudRate);
        baudRate = Console.ReadLine();

        if (baudRate == "")
        {
            baudRate = defaultPortBaudRate.ToString();
        }

        return int.Parse(baudRate);
    }

    public static Parity SetPortParity(Parity defaultPortParity)
    {
        string parity;

        Console.WriteLine("Available Parity options:");
        foreach (string s in Enum.GetNames(typeof(Parity)))
        {
            Console.WriteLine("   {0}", s);
        }

        Console.Write("Parity({0}):", defaultPortParity.ToString());
        parity = Console.ReadLine();

        if (parity == "")
        {
            parity = defaultPortParity.ToString();
        }

        return (Parity)Enum.Parse(typeof(Parity), parity);
    }

    public static int SetPortDataBits(int defaultPortDataBits)
    {
        string dataBits;

        Console.Write("Data Bits({0}): ", defaultPortDataBits);
        dataBits = Console.ReadLine();

        if (dataBits == "")
        {
            dataBits = defaultPortDataBits.ToString();
        }

        return int.Parse(dataBits);
    }

    public static StopBits SetPortStopBits(StopBits defaultPortStopBits)
    {
        string stopBits;

        Console.WriteLine("Available Stop Bits options:");
        foreach (string s in Enum.GetNames(typeof(StopBits)))
        {
            Console.WriteLine("   {0}", s);
        }

        Console.Write("Stop Bits({0}):", defaultPortStopBits.ToString());
        stopBits = Console.ReadLine();

        if (stopBits == "")
        {
            stopBits = defaultPortStopBits.ToString();
        }

        return (StopBits)Enum.Parse(typeof(StopBits), stopBits);
    }

    public static Handshake SetPortHandshake(Handshake defaultPortHandshake)
    {
        string handshake;

        Console.WriteLine("Available Handshake options:");
        foreach (string s in Enum.GetNames(typeof(Handshake)))
        {
            Console.WriteLine("   {0}", s);
        }

        Console.Write("Handshake({0}):", defaultPortHandshake.ToString());
        handshake = Console.ReadLine();

        if (handshake == "")
        {
            handshake = defaultPortHandshake.ToString();
        }

        return (Handshake)Enum.Parse(typeof(Handshake), handshake);
    }
}


http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx#Y3884






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-02 06:33:32 By : webmaster
 


 

No. 2



โพสกระทู้ ( 8 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณมากครับ เดี๊ยวจะลองทำตาม
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-02 08:19:44 By : smallBB
 

 

No. 3



โพสกระทู้ ( 8 )
บทความ ( 0 )



สถานะออฟไลน์


ผมลองนำโค้ดไปทำตามดูแล้วปรากฎว่า มันไม่ขึ้น error ไม่สามารถรับข้อมูลได้

แล้วการทำงานมันไปหยุดอยู่ที่ บรรทัด 084 portName = Console.ReadLine();
แล้วจากนั้นมันก็ไม่ทำงานต่อครับ
ขอความช่วยเหลือด้วยนะครับ

อีกอย่างนะครับ ผมอยากทราบว่าฟังก์ชันไหนที่ทำให้โปรแกรมสามารถรับข้อมูลได้ตลอดเวลา เพราะว่าข้อมูลที่ส่งเข้ามาจะส่งเข้ามาเรื่อยๆครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-02 16:43:03 By : smallBB
 


 

No. 4



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ผมไม่มีอุปรกรณ์เลยทดสอบไม่ได้ครับ คุณน่าจะหาทางได้น่ะครับ มันก็เกือบได้แล้วนี่ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-03 06:15:49 By : webmaster
 


 

No. 5



โพสกระทู้ ( 70 )
บทความ ( 0 )



สถานะออฟไลน์


smallBB ผมไม่เเน่ใจว่าคุณทำได้รึยังนะครับ มีอีก 1 ทางเลือกครับผมเขียนเป็น .dll ไว้เเล้วเรียกใช้ได้เลยครับ ลองดูโค๊ตการเรียกใช้ได้ก่อนครับถ้าสนใจทิ้งเมล์ไว้ครับ เดียวส่งไฟล์ไปให้ทางเมล์ครับ
Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ManageComPort;

namespace TestComport
{
    public partial class Form1 : Form
    {
        EasyComPort runPort = new EasyComPort(1000);//set time read data on 1000 millisec

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            runPort.OnConnectPort += new EasyComPort.OnConnectEventHandler(runPort_OnConnectPort);                //----------------------------|
            runPort.OnReciveDataPort += new EasyComPort.OnReciveDatEventHandler(runPort_OnReciveDataPort);        //                            |
            runPort.OnDisconnectPort += new EasyComPort.OnDisconnectEventHandler(runPort_OnDisconnectPort);       //        Add Event           |
            runPort.ErrorPort += new EasyComPort.ErrorPortEventHandler(runPort_ErrorPort);                        //----------------------------|

            runPort.SetPortNameValues(cbo_Port);//get portname online
        }

        private void runPort_OnConnectPort() //on connect
        {
            lbl_Status.Text = "Connected";
            lbl_Status.BackColor = Color.Green;
            btn_Connect.Text = "Disconnect";
        }

        private void runPort_OnReciveDataPort(string data) // recive data on 1000 milli
        {
            tbx_Log.Text += data+"\r\n";
        }

        private void runPort_OnDisconnectPort() // on disconnect
        {
            lbl_Status.Text = "No Connect";
            lbl_Status.BackColor = Color.Red;
            btn_Connect.Text = "Connect";
        }

        private void runPort_ErrorPort(string error) // on error
        {
            tbx_Log.Text += error + "\r\n";
        }

        private void btn_Connect_Click(object sender, EventArgs e)
        {
            if (lbl_Status.Text == "No Connect")
                runPort.ConnectPort(cbo_Port.Text, 9600);
            else
                runPort.DisconnectPort();
        }

        private void btn_Send_Click(object sender, EventArgs e)
        {
            runPort.SendData(tbx_Msg.Text);
        }

    }
}

imageApp
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-03 13:04:46 By : Kotakin
 


 

No. 6



โพสกระทู้ ( 8 )
บทความ ( 0 )



สถานะออฟไลน์


ครับผม

พอดีผมทำได้แล้วครับโค้ดประมาณนี้ครับ


Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace Test_SerialPort
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        SerialPort port = new SerialPort();
        private void Form1_Load(object sender, EventArgs e)
        {
            fetch_comport();
        }
        private void fetch_comport()
        {
            string[] portNames = System.IO.Ports.SerialPort.GetPortNames();
            comboBox1.Items.Clear();
            for (int i = 0; i <= portNames.Length - 1; i++)
            {
                comboBox1.Items.Add(portNames[i]);
            }
            port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
        }
        private void bt_RefreshPort_Click(object sender, EventArgs e)
        {
            fetch_comport();
        }
        private void bt_openport_Click(object sender, EventArgs e)
        {            
            try
            {
                port.PortName = comboBox1.Text;
                port.BaudRate = 9600;
                port.StopBits = System.IO.Ports.StopBits.One;
                port.DataBits = 8;
                port.Parity = System.IO.Ports.Parity.None;
                textBox1.Text = port.PortName;
                textBox2.Text = port.BaudRate.ToString();
                textBox3.Text = port.Parity.ToString();
                textBox4.Text = port.DataBits.ToString();
                textBox5.Text = port.StopBits.ToString();
                port.Open();
            }
            catch (Exception ex){
                MessageBox.Show(ex.Message);
            }
        }
        private void bt_clear_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            textBox4.Text = "";
            textBox5.Text = "";
        }
        private void DataReceivedHandler(object sender,SerialDataReceivedEventArgs e)
        {
            //---invoke the delegate to retrieve the received data---
            textBox6.BeginInvoke(new myDelegate(updateTextBox));
        }
        public delegate void myDelegate();
        public void updateTextBox()
        {
            //---append the received data into the TextBox control---
            textBox6.AppendText(port.ReadExisting());
            textBox6.ScrollToCaret();
        }
        private void bt_closeport_Click(object sender, EventArgs e)
        {
            serialPort1.Close();
        }
    }
}



ใช้ port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); เป็นตัวตรวจสอบว่ามีข้อมูลเข้ามาตอนไหนแล้วไปเรียกใช้ DataReceivedHandler เพื่อแสดงค่าที่ได้รับเข้ามาครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-03 14:45:10 By : smallBB
 


 

No. 7



โพสกระทู้ ( 1 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ผมต้องการรับค่า จาก ๅSerialport มาที่เครื่อง Computer ช่วยแนะนำ Code ทีครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-12 11:12:52 By : pisanu2527
 


 

No. 8

Guest


มีตัวอย่าง form มั้ยครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-17 14:05:24 By : pod
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : C# ขอความช่วยเหลือ เรื่อง การรับข้อมูลทาง Serial Port
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 03
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่