serialPort控件如何验证串口已经连接好硬件设备 如题,就是要验证串口和硬件是否已经连接上的winform代码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个很难。因为如果是哑终端,现在基本没有哑终端除非是鼠标这类的。下位机可能不发数据,这时候你无法知道是否连上了。只能检查是否有数据。创建一个serialport对象,添加DataReceived事件,开一个定时器,假设一个超时值设置给timer的Interval,serialport.open,timer.enabled = true.增加一个标记,每次DataReceived方法中设置为有数据,每次Timer的事件中检查标记,连续2次没有数据则认定为设备断开连接。并每次检查后标记重新设置为待检查。我希望你能明白我再说啥,我就不用写例子给你了。 private SerialPort m_Port = null; try { m_Port.PortName = Com;//串口号 m_Port.BaudRate = bote;//波特率 // m_Port.Handshake = Handshake.RequestToSendXOnXOff; m_Port.RtsEnable = true; //关键 U口转串口设备 m_Port.DtrEnable = true; m_Port.ReceivedBytesThreshold = 1; m_Port.Open(); m_Port.DataReceived += new SerialDataReceivedEventHandler(m_Port_DataReceived); } catch (Exception ex) { MessageBox.Show("串口打开失败,系统不能运行,系统提示:" + ex.Message + "!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning); }可以验证串口是否存在。。如果要验证是否与设备连接,必须要和设备 数据发送并回复。 判断端口是否打开serialPort.IsOpen == false 如果你只检测一次,你可以写在任何一个地方调用,例如按钮click事件private void button6_Click(object sender, EventArgs e){ SerialPort serial = new SerialPort("COM1"); try { serial.Open(); } catch { MessageBox.Show("串口被占用,请关闭其他串口通讯软件后重试。"); return; } int tick = Environment.TickCount; //因为波特率是按秒算的,我们就检测1秒好了 while (Environment.TickCount-tick<1000) { if (serial.BytesToRead > 0) { MessageBox.Show("有设备连接在串口,不保证是我要的,但至少有数据来了。"); return; } Application.DoEvents(); } MessageBox.Show("请确认设备是否连接正确。");}如果处理数据时候检测设备是否连接好,那就要用上面给你的方法。 我顶,逍遥的!!!!! reply by 阿捷 private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { byte[] DataRecivce = new byte[32]; if (serialPort1.IsOpen) { try { serialPort1.Read(DataRecivce, 0, 32); } catch { MessageBox.Show(this, "打开错误", "通讯失败!", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } } 电脑的实体COM口不过是一个转接设备一样,即时没有任何设备接上这个口,一样可是打开COM口,作你的数据处理,所以如果你插上的设备不支持数据回传的话,就没有办法了,如果你的设备在接受到某个命令后,会回传数据到COM口,就可以验证你的设备是否连接上了,或者其它数据接受方式 100分:treeview中同级节点排序问题?? 如何给access数据库的表添加标识列?? 在C#中播放音乐 如何实现 VB6 中的 MIDB CHRB ASCB LENB RIGHTB LEFTB 函数?(200分) 请教C#高手 =====50分求高手来看看这个问题,用.net实现横向图片分页 在C#中如何读写一个EXECL文件?(注:是在winform中) 如何動態處理欄位? C#有字串巨集嗎? 如何改变dataDrid内特定几个cell的颜色 请大家帮我想一下办法 请教下foreach对文件操作的问题 系统和网页的安全问题怎么解决 求组各位大神!
下位机可能不发数据,这时候你无法知道是否连上了。
只能检查是否有数据。
创建一个serialport对象,添加DataReceived事件,开一个定时器,假设一个超时值设置给timer的Interval,serialport.open,timer.enabled = true.
增加一个标记,每次DataReceived方法中设置为有数据,每次Timer的事件中检查标记,连续2次没有数据则认定为设备断开连接。并每次检查后标记重新设置为待检查。我希望你能明白我再说啥,我就不用写例子给你了。
try
{
m_Port.PortName = Com;//串口号
m_Port.BaudRate = bote;//波特率
// m_Port.Handshake = Handshake.RequestToSendXOnXOff;
m_Port.RtsEnable = true; //关键 U口转串口设备
m_Port.DtrEnable = true;
m_Port.ReceivedBytesThreshold = 1;
m_Port.Open(); m_Port.DataReceived += new SerialDataReceivedEventHandler(m_Port_DataReceived);
}
catch (Exception ex)
{
MessageBox.Show("串口打开失败,系统不能运行,系统提示:" + ex.Message + "!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}可以验证串口是否存在。。如果要验证是否与设备连接,必须要和设备 数据发送并回复。
serialPort.IsOpen == false
private void button6_Click(object sender, EventArgs e)
{
SerialPort serial = new SerialPort("COM1");
try
{
serial.Open();
}
catch
{
MessageBox.Show("串口被占用,请关闭其他串口通讯软件后重试。");
return;
}
int tick = Environment.TickCount;
//因为波特率是按秒算的,我们就检测1秒好了
while (Environment.TickCount-tick<1000)
{
if (serial.BytesToRead > 0)
{
MessageBox.Show("有设备连接在串口,不保证是我要的,但至少有数据来了。");
return;
}
Application.DoEvents();
}
MessageBox.Show("请确认设备是否连接正确。");
}如果处理数据时候检测设备是否连接好,那就要用上面给你的方法。
{
byte[] DataRecivce = new byte[32];
if (serialPort1.IsOpen)
{
try
{
serialPort1.Read(DataRecivce, 0, 32);
}
catch
{
MessageBox.Show(this, "打开错误", "通讯失败!", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}