C# 串口通信问题(提示:端口被关闭)
string ls = null;
/// <summary>
/// 根据开阀度数打开阀门
/// </summary>
/// <param name="ls_CmdType">指令类型</param>
/// <returns></returns>
private void SendCommand(string ls_CmdType,string ls_CmdTypeStr,int i)
{
DataTable dt = null;
string terstr = null;//临时数据表存储“H_Termina”
string ls_teradds = null;//变量TerAdds
string ls_str = null;//组合参数
//string ls_wk = null;//临时TerminalID
string ls_TerRemark = null;//该设备所属com口
try
{
if (ltvEmp.Items.Count > 0)
{
if (i == -1)
{
terstr = ltvEmp.SelectedItems[0].SubItems[1].Text;
}
else
{
terstr = ltvEmp.Items[i].SubItems[1].Text;
}
isml = terstr;
Reclb = 1;
dt = dbr.getTable("select TerAdds,TerRemark from H_Termina where TerminalID = '" + isml + "'");
ls_teradds = dt.Rows[0][0].ToString();
ls_TerRemark = dt.Rows[0][1].ToString();
switch (ls_CmdType)//如果是开阀就按此格式添加
{
case "K"://开/关阀
ls_str = "I" + ls_teradds.Substring(ls_teradds.Length - 4, 4)
+ ls_TerRemark
+ isml.Substring(isml.Length - 2, 2)
+ ls_CmdType
+ ls_CmdTypeStr;
break;
case "J"://允许巡逻
ls_str = "I" + ls_teradds.Substring(ls_teradds.Length - 4, 4)
+ "000"
+ ls_CmdType;
break;
case "C"://禁止巡逻
ls_str = "I" + ls_teradds.Substring(ls_teradds.Length - 4, 4)
+ "000"
+ ls_CmdType;
break;
case "V"://检查温度
ls_str = "L" + ls_teradds.Substring(ls_teradds.Length - 4, 4)
+ ls_TerRemark
+ "FF"
+ ls_CmdType;
break;
case "T"://检查时间
ls_str = "L" + ls_teradds.Substring(ls_teradds.Length - 4, 4)
+ ls_TerRemark
+ "FF"
+ ls_CmdType;
break;
case "M"://置模式
ls_str = "I" + ls_teradds.Substring(ls_teradds.Length - 4, 4)
+ ls_TerRemark
+ isml.Substring(isml.Length - 2, 2)
+ ls_CmdType
+ ls_CmdTypeStr;
break;
case "H"://搜索汇接器指令1
ls_str = "I0000000J";
break;
case "H2"://搜索汇接器指令2
ls_str = "L0000000X";
break;
default:
ls_str = null;
break;
}
string model = protocol.Getinstance(ls_str)._Model;
756行 spPort.Write(model);//将指令写入串口缓冲区
dt.Clear();
dt.Dispose();
spPort.DiscardOutBuffer();//清理输出缓冲区
spPort.DiscardInBuffer();//清理输入缓冲区
//new protocol().Dispose();//释放类资源
//}
}
}
catch (System.Exception e)
{
MessageBox.Show(e.ToString(), "警告");
}
}

/// <summary>
/// 根据开阀度数打开阀门
/// </summary>
/// <param name="ls_CmdType">指令类型</param>
/// <returns></returns>
private void SendCommand(string ls_CmdType,string ls_CmdTypeStr,int i)
{
DataTable dt = null;
string terstr = null;//临时数据表存储“H_Termina”
string ls_teradds = null;//变量TerAdds
string ls_str = null;//组合参数
//string ls_wk = null;//临时TerminalID
string ls_TerRemark = null;//该设备所属com口
try
{
if (ltvEmp.Items.Count > 0)
{
if (i == -1)
{
terstr = ltvEmp.SelectedItems[0].SubItems[1].Text;
}
else
{
terstr = ltvEmp.Items[i].SubItems[1].Text;
}
isml = terstr;
Reclb = 1;
dt = dbr.getTable("select TerAdds,TerRemark from H_Termina where TerminalID = '" + isml + "'");
ls_teradds = dt.Rows[0][0].ToString();
ls_TerRemark = dt.Rows[0][1].ToString();
switch (ls_CmdType)//如果是开阀就按此格式添加
{
case "K"://开/关阀
ls_str = "I" + ls_teradds.Substring(ls_teradds.Length - 4, 4)
+ ls_TerRemark
+ isml.Substring(isml.Length - 2, 2)
+ ls_CmdType
+ ls_CmdTypeStr;
break;
case "J"://允许巡逻
ls_str = "I" + ls_teradds.Substring(ls_teradds.Length - 4, 4)
+ "000"
+ ls_CmdType;
break;
case "C"://禁止巡逻
ls_str = "I" + ls_teradds.Substring(ls_teradds.Length - 4, 4)
+ "000"
+ ls_CmdType;
break;
case "V"://检查温度
ls_str = "L" + ls_teradds.Substring(ls_teradds.Length - 4, 4)
+ ls_TerRemark
+ "FF"
+ ls_CmdType;
break;
case "T"://检查时间
ls_str = "L" + ls_teradds.Substring(ls_teradds.Length - 4, 4)
+ ls_TerRemark
+ "FF"
+ ls_CmdType;
break;
case "M"://置模式
ls_str = "I" + ls_teradds.Substring(ls_teradds.Length - 4, 4)
+ ls_TerRemark
+ isml.Substring(isml.Length - 2, 2)
+ ls_CmdType
+ ls_CmdTypeStr;
break;
case "H"://搜索汇接器指令1
ls_str = "I0000000J";
break;
case "H2"://搜索汇接器指令2
ls_str = "L0000000X";
break;
default:
ls_str = null;
break;
}
string model = protocol.Getinstance(ls_str)._Model;
756行 spPort.Write(model);//将指令写入串口缓冲区
dt.Clear();
dt.Dispose();
spPort.DiscardOutBuffer();//清理输出缓冲区
spPort.DiscardInBuffer();//清理输入缓冲区
//new protocol().Dispose();//释放类资源
//}
}
}
catch (System.Exception e)
{
MessageBox.Show(e.ToString(), "警告");
}
}

...全文
相关推荐
VSDN虚拟串口工具&C#串口通信小程序源码
简单串口通讯必备的东西都在这里了。个人建议使用的时候先短接2-3口进行测试以免线都不通。
C#编程实现串口通信详解
串口通信是计算机与外部设备进行数据交换的重要方式之一,而SerialPort类是.NET框架中用于处理串口通信的核心类。它为开发者提供了丰富的属性和方法,使得串口编程既直观又高效。SerialPort类包含多个事件,允许程序在特定时刻做出响应。一些重要的事件包括::当串口接收缓冲区中有数据可读时触发。Error:当串口发生错误时触发。PinChanged:当串口的某个针脚状态改变时触发。:当串口检测到 BREAK 条件时触发。
C#串口通信调试源码详解
C#中的SerialPort类是用于处理串行端口通信的核心类。通过这个类,开发者可以方便地进行串口数据的发送和接收,设置串口参数,以及处理串口通信过程中发生的事件。它支持同步和异步两种通信方式,使得开发者可以根据应用需求选择最合适的方式。SerialPort类的主要特点包括:- 易于使用:通过属性和方法的集合,可以轻松配置串口。- 灵活性:支持多种编程模式,允许程序在不同线程中处理串口事件。- 可靠性:提供了错误检测和处理机制,帮助开发者编写稳健的通信代码。
基于c#的串口助手
基于c#做的串口助手,可以用于接收单片机等通过串口传到电脑上的信息
手把手教-C# 串口工具
手把手教-C# 串口工具


