社区
.NET Framework
帖子详情
serailport数据发送接收?
water_zym
2009-08-14 11:29:29
小弟是个新手,请高手帮忙解答下我的疑惑:
如果我使用com1口进行数据的发送,那在com1口中能取到发送的数据、还是com1口发数据com2口接收数据?
这个问题我一直没有搞明白。
...全文
74
6
打赏
收藏
serailport数据发送接收?
小弟是个新手,请高手帮忙解答下我的疑惑: 如果我使用com1口进行数据的发送,那在com1口中能取到发送的数据、还是com1口发数据com2口接收数据? 这个问题我一直没有搞明白。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
flyerwing
2009-08-14
打赏
举报
回复
哪个应该不用注释的,我也不知道你用的上。
那个是串口的。
hero7750
2009-08-14
打赏
举报
回复
串口有一个发送缓冲区和一个接收缓冲区,你要调试的话可以下载一个虚拟串口vspm
water_zym
2009-08-14
打赏
举报
回复
楼上的,我看了你的程序代码,麻烦能给点注释出来吗?
flyerwing
2009-08-14
打赏
举报
回复
public class SPReadEventArgs:EventArgs
{
private string msg = "";
public string Msg
{
get
{
return msg;
}
set
{
msg = value;
}
}
}
public delegate void SPReadedHandler(object sender,SPReadEventArgs e);
public class SerialPortOfMine
{
public SerialPortOfMine()
{
this.Start();
}
private System.IO.Ports.SerialPort sp = new System.IO.Ports.SerialPort();
public System.IO.Ports.SerialPort GetSp
{
get
{
return sp;
}
set
{
sp = value;
}
}
private System.Threading.Thread thd_sp = null;
public System.Threading.Thread GetThd_sp
{
get
{
return thd_sp;
}
set
{
thd_sp = value;
}
}
private bool state_sp = false;
public bool State_sp
{
get
{
return state_sp;
}
set
{
state_sp = value;
}
}
private string encoding_sp = "gb2312";
public string Encoding_sp
{
get
{
return encoding_sp;
}
set
{
encoding_sp = value;
}
}
private bool state = false;
public bool State
{
get
{
return state;
}
}
public void Start()
{
thd_sp = new System.Threading.Thread(new System.Threading.ThreadStart(this.Initialize));
thd_sp.Start();
}
private void Initialize()
{
state = true;
sp.PortName ="com1";
sp.BaudRate = 9600;
sp.DataBits = 8;
sp.StopBits = System.IO.Ports.StopBits.One;
sp.Parity = System.IO.Ports.Parity.None;
sp.ReadTimeout = 6000;
sp.Encoding = System.Text.Encoding.GetEncoding(this.encoding_sp);
try
{
sp.Open();
this.state_sp = true;
while (state)
{
if (sp.IsOpen == false)
{
state = false;
break;
}
else
{
string str = sp.ReadExisting();
System.Threading.Thread.Sleep(300);
if (str.Length > 0)
{
SPReadEventArgs ea = new SPReadEventArgs();
ea.Msg = str ;
SPReceivedData = new SPReadedHandler(this, ea);
}
else
{
SPReadEventArgs ea = new SPReadEventArgs();
ea.Msg = "没有数据也要促发此事件!";
this.SPReceivedData(this, ea);
//SPReceivedData = new SPReadedHandler(this, ea);
}
}
}
}
catch (System.Exception ept)
{
throw new System.Exception("开启串口出现异常:"+ept.Message);
}
finally
{
sp.Close();
this.state_sp = false;
thd_sp.Abort();
}
}
private void Stop()
{
sp.Close();
state_sp = false;
thd_sp.Abort();
}
public event SPReadedHandler SPReceivedData;
}
SerialPortOfMine sp = new SerialPortOfMine();
sp.SPReceivedData += new SPReadedHandler(this.alert);
private void alert(object sender,SPReadEventArgs e)
{
MessageBox.Show(e.Msg);
}
看这个成不?我菜鸟,没地方试。不知道能不能用。
water_zym
2009-08-14
打赏
举报
回复
楼上发的什么东西?
C# Serial
Port
HEX
数据
发送
和
接收
Serial
Port
sp1 = new Serial
Port
(); private void Form1_Load(object sender, EventArgs e) //串口设置 { sp1.
Port
Name = "COM11"; //端口号 sp1.BaudRate = 9600; //波特率 sp1.DataBits = ...
C# 解决串口
接收
数据
不完整
使 用缓存机制完成。首先通过定义一个成员变量List buffer = new List (4096);用来存放所有的
数据
,在
接收
函数里,通过buffer.AddRange()方法不断地将
接收
到的
数据
加入到buffer中,并同时对 buffer中的
数据
进行检验,如果达到一定的长度并且校验结果正确(校验方法在
发送
方和
接收
方一致),再进行处理。具体代码如下:代码 private List buffer
Unity和C# Serial
Port
接受
数据
不完整解决办法【完美解决】
1.指定长度后判断长度【可行,但是并不通用】 2.Thread.Sleep(200);放到线程后面【不可行,
接收
到的
数据
一样不完整】 3.还有人说放到主线程里就没问题,我把【int datalength = m_serial.BytesToRead;】放到Update里,确实每次
接收
到的长度都是对的...
Q
Serail
Port
使用readAll()
接收
数据
不完整
通过协议的长度加一个限制,到达协议的实际长度时,再进行解析!我这里
接收
的
数据
是有固定的包头,固定的包长;我们可以对包头,包长的判断对
数据
完整的显示;网上的方法基本试过了,没有解决;一次
接收
不完整,分多次
接收
;否则解析协议会出错;
QT--收发
数据
代码
源码--20220109
.NET Framework
17,741
社区成员
24,334
社区内容
发帖
与我相关
我的任务
.NET Framework
.NET技术 .NET Framework
复制链接
扫一扫
分享
社区描述
.NET技术 .NET Framework
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章