2012-08-15 64 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