2011-02-24 13 views
6

HI सी # सीरियल पोर्ट में नया आईएम। जब मशीन डेटा भेजा गया था तो सीरियल पोर्ट से प्राप्त डेटा रखने के लिए एक सी # प्रोग्राम चल रहा है, मैं WinXP और win7 लिख रहा हूं।आरएस 232 सीरियल पोर्ट संचार सी # win7 .net फ्रेमवर्क 3.5 sp1

using System.IO; 
using System.IO.Ports; 
using System.Threading; 


namespace RS232RVR 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     SettingRS232(); 
    } 

    public void SettingRS232() 
    { 
     try 
     { 
      SerialPort mySerialPort = new SerialPort("COM6"); 

      mySerialPort.BaudRate = 9600; 
      mySerialPort.Parity = Parity.None; 
      mySerialPort.StopBits = StopBits.One; 
      mySerialPort.DataBits = 8; 
      mySerialPort.Handshake = Handshake.None; //send to hardware flow control. 

      mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceviedHandler); 

      mySerialPort.Open(); 


      richTextBox1.Text = "on"; 

      mySerialPort.Close(); 
     } 
     catch (Exception ex) 
     { 
      richTextBox1.Text = ex.Message;  
     } 

    } 

    private void DataReceviedHandler(
        object sender, 
        SerialDataReceivedEventArgs e) 
    { 
     SerialPort sp = (SerialPort)sender; 
     string indata = sp.ReadExisting(); 
     richTextBox1.Text = indata; 

    } 

} 

}

COM6 मेरे पीसी में सक्रिय है। लेकिन मेरी समस्या यह प्रतीत होती है कि सीरियल बंदरगाह से डेटा आने पर डेटाटेसिव घटना आग नहीं होती है। (मैंने कुछ फ्रीवेयर एप्लिकेशन का उपयोग करके खेल की जांच की थी)

कोई भी मदद कर सकता है?

धन्यवाद

+0

.NET का सीरियल पोर्ट क्लास वांछित होने के लिए बहुत कुछ छोड़ देता है। [Win32 कॉम फ़ंक्शन] (http://msdn.microsoft.com/en-us/library/aa363194.aspx) बहुत बेहतर काम करते हैं। –

उत्तर

1

क्या आपने उस कोड को अपने आवेदन से कॉपी किया था? क्या यह शायद एक मामला है कि घटना हैंडलर नाम गलत वर्तनी है? जैसे DataReceviedHandler वास्तव में DataReceivedHandler वर्तनी चाहिए।

+0

धन्यवाद ड्रू, इसके लिए मेरी बड़ी गलती है। लेकिन मैंने आपके जवाब पर आधार बदल दिया था। लेकिन यह अभी भी काम नहीं करता है। – DesMY

+0

मैं यह भी देखता हूं http://stackoverflow.com/questions/466474/how-do-i-use-datareceived-event-of-the-serialport-port-object-in-c – DesMY

5
 mySerialPort.Open(); 
     richTextBox1.Text = "on"; 
     mySerialPort.Close(); 

यह काम नहीं करेगा, आप सीरियल पोर्ट को खोलने के बाद कुछ माइक्रोसेकंड बंद कर देंगे। हां, डेटा रिसीव इवेंट हैंडलर को आग लगने की संभावना नहीं है। अपने प्रोग्राम को बंद करते समय बंदरगाह को बंद करें।

 mySerialPort.Handshake = Handshake.None 

यह भी एक समस्या है, आपको अब हैंडशेक संकेतों को नियंत्रित करने की आवश्यकता होगी। धारावाहिक बंदरगाह उपकरणों का विशाल बहुमत तब तक कुछ नहीं भेजेगा जब तक कि वे मशीन संचालित न हों और प्राप्त करने के लिए तैयार न हों। DtrEnabled और RtsEnabled गुणों को सत्य पर सेट करें।

+0

I echoo हंस का मुख्य बिंदु : आप अपना बंदरगाह खोलें और फिर इसे तुरंत बंद करें। एक बंद बंदरगाह पर आपका ऐप कुछ भी प्राप्त करने जा रहा है? –

+0

धन्यवाद हंस, तेज एक .. मैं पोर्ट बंद करने के बाद काम कर रहा हूं .. धन्यवाद और बहुत उपयोगी। – DesMY

1

समस्या हल हो गई थी और मैं इसे साझा करना चाहता हूं। मैं नीचे के रूप में ठीक तकाज़े था:

namespace RS232RVR 
{ 
    public partial class Form1 : Form 
    { 
     private delegate void SetTextDeleg(string data); 

     public Form1() 
     { 
      InitializeComponent(); 
      SettingRS232(); 
     } 

     public void SettingRS232() 
     { 
      try 
      { 
       SerialPort mySerialPort = new SerialPort("COM6"); 

       mySerialPort.BaudRate = 9600; 
       mySerialPort.Parity = Parity.None; 
       mySerialPort.StopBits = StopBits.One; 
       mySerialPort.DataBits = 8; 
       mySerialPort.Handshake = Handshake.None; 
       mySerialPort.ReadTimeout = 2000; 
       mySerialPort.WriteTimeout = 500; 

       mySerialPort.DtrEnable = true; 
       mySerialPort.RtsEnable = true; 

       mySerialPort.Open(); 
       //mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); 
       mySerialPort.DataReceived += DataReceivedHandler; 

       textBox1.Text = "Serial Port is Ready."; 

      } 
      catch (Exception ex) 
      { 
       textBox1.Text = ex.Message;  
      } 

     } 

     public void DataReceivedHandler(object sender,SerialDataReceivedEventArgs e) 
     { 
      SerialPort sp = (SerialPort)sender; 
      System.Threading.Thread.Sleep(500); 
      string indata = sp.ReadExisting(); 
      this.BeginInvoke(new SetTextDeleg(DisplayToUI), new object[] { indata }); 
      //textBox1.Text += indata; 

     } 

     private void DisplayToUI(string displayData) 
     { 
      textBox1.Text += displayData.Trim(); 
      // textBox1.Text += displayData; 

     } 

    } 
} 

अगर कोई कोड आप का स्वागत है पर टिप्पणी है, मेरी खुशी है और इसे बेहतर कोड करने के लिए कामना करता हूं।

संबंधित मुद्दे