none
C# serialport 發送端資料跑到接收端去(使用SerialPort.DataReceived & 發送與接收端not connect) RRS feed

  • 一般討論

  • 小弟有些事情想請教一下,問題如下:

    當我從裝置(單晶片)送資料至電腦(C# Debugger)。程式經由判別確定從裝置所傳資料正確,再由電腦發送資料回裝置端,卻發現程式接收到發射端的資料,我有把接收到的資料show到textbox上觀看。問題是我兩端根本沒接在一起,我有使用邏輯分析儀觀看確定電腦只有接收到從裝置端的資料沒接收到從發射端出去的資料。

    但是我卻看到textbox除了電腦從裝置接收的資料外,後面多了電腦發送的資料,然後又因為條件符合又再發送。

    請問是什麼原因造成接收端接到發送端資料的?

    private void Form1_Load(object sender, EventArgs e)
            {
                .....

                serialPort1.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

            }

    private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
            {

                    Byte[] buffer = new Byte[1024];
                    int length_packets = 0;
                    Boolean correct = false;
                    Int32 length = (sender as SerialPort).Read(buffer, 0, buffer.Length);
                    Array.Resize(ref buffer, length);

                    Array.Copy(buffer, 0, buffer_store, length_store, length);
                    length_store += length;
                    txtReceive.Text += BitConverter.ToString(buffer, 0, length) + "\r\n";

                    .....

                    /*******/

                    判別資料是否0xAA...0x55 0x0D格式,是的話發送資料至裝置端

                    TX_BOOLEAN = true; 

                    /*******/

                   if(TX_BOOLEAN == true){

                   ...

                   TX_BOOLEAN = false;

                   serialPort1.Write(buffer_transmit, 0, 11);//buffer_transmit為AA 06 03 E7 00 03 E7 00 D4 55 0D

                   }

               }


    2017年9月21日 上午 06:53

所有回覆

  • 有沒有可能是自已發送給自已。你可能要再檢查一下程式是不是真的有去確認從哪個接口接收資料。

    2017年9月21日 上午 07:25
  • 我有用邏輯分析儀接到DB9的(2 RX)與(3 TX),裝置端發送訊號(經DB9:2 RX) 到電腦下圖藍色

    然後電腦發送訊號(經DB9:3 TX)到裝置,因為Debugger的接收(也就是DataReceivedHandler)一直顯示有收到TX的訊號所以用送了一次,就這樣一直循環下去(下圖紫色)

    因為有接邏輯分析儀所以我不認為是2 RX除了裝置送來的資料另外又有接到額外的資料。因為除了裝置送來的資料外後面就沒有訊號了。(PS: 裝置是每秒送一次資料)

    2017年9月21日 上午 07:55
  • 這個是我在textBOX上show的,

    AA-06-03-E7-01-03-E7-01
    D6-55-0D是由serialPort1.Write(buffer_transmit, 0, 11);送的(3 TX),但是問題是我用邏輯分析儀看(2 RX)真的沒有這段資料

    所以我在想是不是serialPort1.DataReceived除了接收會觸發外,當serialPort1.Write動作時也會使他觸發接收發送的資料。

    2017年9月21日 上午 08:06
  • 除非你電腦端的 RX-TX 接在一起形成迴路,否則從電腦端發射出去的訊號,不應該被 DataReceived event 攔到。


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2017年9月21日 上午 09:33
    版主