100求助:关于SICK LMS511激光传感器的数据接收问题(采用IP通信模式)?

guoxinwei 2012-08-21 06:27:40
各位老师好,最近在用SICK LMS511开发应用程序,采用socket异步接收方式,现在的问题是接收的数据量比较大,几百K字节/s,并且数据不断的传输过来,而数据处理的速度似乎跟不上,造成程序很不稳定,已经折腾快一个月了,老板催的很急,各位老师可否给点建议,谢谢了。
...全文
600 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangyuchi1989 2012-09-18
  • 打赏
  • 举报
回复
我最近也在做一个LMS511相关,希望能和楼主交流一下,qq:815147879
huangliping_1975 2012-08-23
  • 打赏
  • 举报
回复
快下班了,楼主找到socket接收队列的例子没?
guoxinwei 2012-08-23
  • 打赏
  • 举报
回复
如果开两个线程,一个接收,一个数据处理,那么还需要异步接收不?
guoxinwei 2012-08-23
  • 打赏
  • 举报
回复
实在没有办法了,贴贴我的源代码吧,大家看看能否改进一下: public partial class Form1 : Form
{
private const int port = 2112;
private TcpClient tcpClient;
private byte[] data ;

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
tcpClient = new System.Net.Sockets.TcpClient();
tcpClient.Connect("192.168.0.1", port);
data = new byte[tcpClient.ReceiveBufferSize];

NetworkStream n = tcpClient.GetStream();
byte[] byt = { 0x02, 0x73, 0x45, 0x4E, 0x20, 0x4C, 0x4D, 0x44, 0x73, 0x63, 0x61, 0x6E, 0x64, 0x61, 0x74, 0x61, 0x20, 0x31, 0x03 };
n.Write(byt, 0, byt.Length);

tcpClient.GetStream().BeginRead(data, 0, data.Length, ReceiveMessage, null);

}

private void ReceiveMessage(IAsyncResult result)
{
int byteRead = tcpClient.GetStream().EndRead(result);
if (byteRead < 1)
{
return;
}
else
{
object[] para = { System.Text.Encoding.ASCII.GetString(data, 0, byteRead) };
this.Invoke(new delUpdateHistory(UpdateHistory), para);
}
tcpClient.GetStream().BeginRead(data, 0, tcpClient.ReceiveBufferSize, ReceiveMessage, null);
}

public delegate void delUpdateHistory(string str);
public void UpdateHistory(string str)
{
File.AppendAllText(@"d:\1.txt", DateTime.Now.ToLongTimeString());//每个数据包插入时间
File.AppendAllText(@"d:\1.txt", str);
}

}
guoxinwei 2012-08-23
  • 打赏
  • 举报
回复
还是没有找到啊,各位老大帮帮忙啊!难道这真是一个世界性的难题啊?!
ccbphi 2012-08-22
  • 打赏
  • 举报
回复
用过sick的lms111 20毫秒返回一次数据 处理是没有问题的
接收的线程只管接收,不要把数据处理和接收放在一个线程里
guoxinwei 2012-08-22
  • 打赏
  • 举报
回复
在网上找了很久,没有找到关于socket接收的线程队列的例子,郁闷!
guoxinwei 2012-08-22
  • 打赏
  • 举报
回复
ccbphi,您好,您说的有道理,我准备开两个线程,一个接收,一个数据处理,可是这两个线程如何共用这些数据呢,可否详细说明一下,谢谢老师!
zhui22222 2012-08-21
  • 打赏
  • 举报
回复
数据处理肯定要另开线程,socket只管接收扔队列,另一线程处理队列中数据
风一样的大叔 2012-08-21
  • 打赏
  • 举报
回复
1

2

楼主,好多人都有这问题哦
guoxinwei 2012-08-21
  • 打赏
  • 举报
回复
自己顶一下,另外我的代码是用C#写得,winform程序!

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧