做个网页串口调试工具,但是在打开串口后,再次点击, 发现port不是打开的port,而是com1,具体的代码如下。请问哪我处理错了?
void InitPort()
{
com.Items.Clear();
//添加串口项目
foreach (string s in System.IO.Ports.SerialPort.GetPortNames())
{//获取有多少个COM口
com.Items.Add(s);
}
//串口设置默认选择项
com.SelectedIndex = 1;
port.BaudRate = 9600;
port.DataReceived += new SerialDataReceivedEventHandler(sp1_DataReceived);
//sp1.ReceivedBytesThreshold = 1;
// radio1.Checked = true; //单选按钮默认是选中的
// rbRcvStr.Checked = true;
//准备就绪
port.DtrEnable = true;
port.RtsEnable = true;
//设置数据读取超时为1秒
// port.ReadTimeout = 1000;
port.Close();
}
protected void Page_Load(object sender, EventArgs e)
{
if (str == null)
{
warning.Text = "本机没有串口!";
return;
}
if (!IsPostBack) // 原来在程序运行过程中,因为DropDownList的项被再一次重新绑定
{
InitPort();
return;
}
else
{
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (!port.IsOpen)
{
try
{
//设置串口号
string serialName = com.SelectedValue;
port.PortName = serialName;
//设置各“串口设置”
string strBaudRate = Baudrate.Text;
string strDateBits = Data_bit.Text;
string strStopBits = Stop_bit.Text;
Int32 iBaudRate = Convert.ToInt32(strBaudRate);
Int32 iDateBits = Convert.ToInt32(strDateBits);
port.BaudRate = iBaudRate; //波特率
port.DataBits = iDateBits; //数据位
switch (Stop_bit.Text) //停止位
{
case "1":
port.StopBits = StopBits.One;
break;
case "1.5":
port.StopBits = StopBits.OnePointFive;
break;
case "2":
port.StopBits = StopBits.Two;
break;
default:
warning.Text = "Error:参数不正确!";
break;
}
switch (Check_bit.Text) //校验位
{
case "无":
port.Parity = Parity.None;
break;
case "奇校验":
port.Parity = Parity.Odd;
break;
case "偶校验":
port.Parity = Parity.Even;
break;
default:
warning.Text = "Error:参数不正确!";
break;
}
if (port.IsOpen == true)//如果打开状态,则先关闭一下
{
port.Close();
}
//状态栏设置
note.Text = "串口号:" + port.PortName + "|";
note.Text = note.Text + "波特率:" + port.BaudRate + "|";
note.Text = note.Text + "数据位:" + port.DataBits + "|";
note.Text = note.Text + "停止位:" + port.StopBits + "|";
note.Text = note.Text + "校验位:" + port.Parity + "|";
//设置必要控件不可用
//Baudrate.Enabled = false;
//Data_bit.Enabled = false;
//Stop_bit.Enabled = false;
//Check_bit.Enabled = false;
//com.Enabled = false;
port.Open(); //打开串口
if (port.IsOpen)
{
warning.Text = "Error:串口打开失败。";
}
Open_com.Text = "关闭串口";
}
catch (System.Exception ex)
{
warning.Text = "Error:串口打开错误 " + ex.Message;
// tmSend.Enabled = false;
return;
}
}
else
{
//状态栏设置
note.Text = "串口号:未指定 |";
note.Text = note.Text + " 波特率:未指定 |";
note.Text = note.Text + " 数据位:未指定 |";
note.Text = note.Text + " 停止位:未指定 |";
note.Text = note.Text + " 校验位:未指定 |";
//恢复控件功能
//设置必要控件不可用
Baudrate.Enabled = true;
Data_bit.Enabled = true;
Stop_bit.Enabled = true;
Check_bit.Enabled = true;
try
{
port.Close(); //关闭串口
}
catch (System.Exception ex)
{
warning.Text = "Error:串口关闭失败 " + ex.Message;
// tmSend.Enabled = false;
return;
}
Open_com.Text = "打开串口";
// tmSend.Enabled = false; //关闭计时器
}
warning.Text = port.IsOpen.ToString();
TextBox1.Text = port.PortName;
}
你是要打开服务器上的串口,还是要打开客户机上的串口?
我想做个单片机的调试 ,打开单片机的串口。
@笨笨,跳跳: 那你写个 Winform 程序不就行了,为啥要用 Asp.Net ?
@Launcher: 用asp.net的话,可以放到服务器上用。
@笨笨,跳跳: 哦,那么你知道 InitPort 和 Button1_Click 都是在服务器上执行的吗?也就是说这里枚举和要打开 COM 都是服务器上的。你要的是这个结果吗?
@Launcher: 不是,谢谢你提醒。如果我想要打开的是本地的,如何来做呢?
@笨笨,跳跳: 你需要写一个 ActiveX 控件嵌入到网页中去,将串口的操作都封装在 ActiveX 控件中。