2012-08-15 122 views
0

你好,我有一個PIC16F877A微控制器和液晶顯示器。我已經讓PIC控制器每2分鐘在LCD屏幕上顯示隨機數字,並通過RS232電纜每隔2分鐘將隨機生成的數字發送到我的筆記本電腦。我正在創建一個使用ASP.NET 4 C#的網站,我想閱讀這些數字並執行功能。我寫了下面的代碼,但它沒有工作,但我正在我的筆記本超級終端中接收這些隨機數。請建議我如何實現這一點 - 我必須每2分鐘收到一次這些代碼。從串口讀取輸入c#asp.net?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.IO.Ports; 

public partial class Entercode : System.Web.UI.Page 
{ 
    static SerialPort mySerialPort = new SerialPort("COM46", 1200, Parity.None, 8,  StopBits.One); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     mySerialPort.Open(); 
     String str = mySerialPort.ReadLine(); 
     mySerialPort.Close(); 

    } 
} 

回答

1

我建議重新構建您的程序。

ASP.NET被設計爲無狀態(因爲它的HTTP基礎)。 ASP.NET主機進程(w3wp.exe)可以被終止並隨意回收,無需警告。如果您需要可靠性,您應該在專用的Windows服務進程中執行串口通信,該進程通過某種形式的IPC與您的ASP.NET應用程序進行通信。

使用Page_Load中是非常不合適的,更不用說非常非線程安全的。 .Close方法相當於調用.Dispose,這將使您的SerialPort成爲靜態成員(在其生存期結束時)。

我知道你不熟悉ASP.NET或IO端口編程。我建議你分別在這些領域磨練自己的技能(例如先開發一個命令行串口程序,然後再開發一個不使用串口的簡單ASP.NET Web應用程序),然後在你強區域。

+0

你好雅我對這兩種語言都是新手。但我是一名電子學生,所以我不需要學習ASP.NET的完整章節。我希望這個代碼暫時檢查我的應用程序。所以你可以請建議我用什麼代碼代替這個。 – chris 2012-08-15 21:38:53

+1

他們不是語言。 C#是語言,ASP.NET是一個平臺。無論如何,完全拋棄ASP.NET並只是開發一個控制檯應用程序。 – Dai 2012-08-15 21:40:07