求救啊,程序是要求通过串口控制猫来连接电脑的

ljwklt 2010-06-06 05:05:34
程序的要求是通过串口控制猫,使两台电脑能够通过猫连接,并能够互相发送消息及文件。
现在遇到了严重的问题,快崩溃了,赶来紧急求助
1:两个猫,分别为A,B(不一样),写了一个程序,按拨号按钮(即使直接发送AT命令)时,B猫正常,A猫提则示ERROR,但是用附件的超级终端发送相同的命令时却可以拨号,没有问题。
2:A边用超级终端,B端用自己写的程序,可以实现连接,但是两边都无法接收对方发的任何消息!如果两边都用超级终端时可以接收消息
3.我的串口的timeout设置为-1,是不是这个的问题?
部分代码如下
拨号

private void button1_Click(object sender, EventArgs e)
{
serialPort1.Write("atd" + num.Text + System.Convert.ToChar(13).ToString() + System.Convert.ToChar(10).ToString());
}

发送AT命令(兼作发送消息的按钮)

private void message_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
serialPort1.Write(sbox.Text + System.Convert.ToChar(13).ToString() + System.Convert.ToChar(10).ToString());
Thread.Sleep(300);
byte[] data = new Byte[serialPort1.BytesToRead];
serialPort1.Read(data, 0, data.Length);
string response = System.Text.Encoding.ASCII.GetString(data);
this.rbox.Invoke(new EventHandler(delegate
{ rbox.AppendText(response); rbox.ScrollToCaret(); }));
timer1.Enabled = true;
}

用定时器轮询消息的

private void timer1_Tick(object sender, EventArgs e)
{
byte[] data = new Byte[serialPort1.BytesToRead];
serialPort1.Read(data, 0, data.Length);
string response = System.Text.Encoding.ASCII.GetString(data);
if (response.Contains("\r\n"))
{
if (response.Contains("begin") && response.Contains("stop"))
{
temp = response;
t = new Thread(new ThreadStart(ReceiveFile));
t.Start();
}
else
{
this.rbox.Invoke(new EventHandler(delegate
{ rbox.AppendText(response); rbox.ScrollToCaret(); }));
}
}
}
...全文
145 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljwklt 2010-06-08
  • 打赏
  • 举报
回复
感谢13L,终于发现是串口设置问题
gohappy2008 2010-06-06
  • 打赏
  • 举报
回复
学习一下
ljwklt 2010-06-06
  • 打赏
  • 举报
回复
回7l,11L,边调试边看变化似乎是自从连接建立以后串口就没有收到任何数据(另一边超级终端也在按各种字母),即使程序这边乱发,超级终端那边也没有收到任何消息
ljwklt 2010-06-06
  • 打赏
  • 举报
回复
哇,LS列举的东西好多啊,
回12L,那句话要用到什么库啊?提示找不到SerialDataReceivedEventHandler
兔子-顾问 2010-06-06
  • 打赏
  • 举报
回复
尝试不使用轮询机制来读取数据。
同时,发送命令等待应答的方式稍微的修改一点。
诶,偷懒好久了。看来要吧这个系列补全……
还差
ascii分析
ascii,binary混合分析
引入的抽象分析类,提供命令发送等待应答和界面互斥的方法
蓝牙,网络的整合
最终的“万金油”通讯库
硬件到软件之间的中间层
创建自己的三层架构通讯程序,稳定,利于扩展的开发。
好多……

C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
C# 串口操作系列(2) -- 入门篇,为什么我的串口程序在关闭串口时候会死锁 ?
C# 串口操作系列(3) -- 协议篇,二进制协议数据解析
hhc123 2010-06-06
  • 打赏
  • 举报
回复

serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);

先简单化问题
hhc123 2010-06-06
  • 打赏
  • 举报
回复
你先不用管信息格式,发送随便的几个数据试一下有没有收到。如有有收到证明是你的程序处理协议有问题
ljwklt 2010-06-06
  • 打赏
  • 举报
回复
测试了好几次,都没有一次收到…………
ljwklt 2010-06-06
  • 打赏
  • 举报
回复
现在关于2的问题是,无论程序发,超级终端收还是超级终端发,程序收,都没有任何消息被收到,除非两边都用超级终端才能收到……
ljwklt 2010-06-06
  • 打赏
  • 举报
回复
回复6L,的确有程控交换机
兔子-顾问 2010-06-06
  • 打赏
  • 举报
回复
不过还真不知道2个猫可以。貌似真可以?
算了,这古董,不管了。

试试这样修改。
你修改timer的enabled不行的。你修改的时候如果timer正在操作,你就会错过一次数据,造成并发读操作丢失返回结果。

bool listen = false;
private void message_Click(object sender, EventArgs e)
{
listen = true;
timer1.Enabled = false;
serialPort1.Write(sbox.Text + System.Convert.ToChar(13).ToString() + System.Convert.ToChar(10).ToString());
Thread.Sleep(300);
byte[] data = new Byte[serialPort1.BytesToRead];
serialPort1.Read(data, 0, data.Length);
string response = System.Text.Encoding.ASCII.GetString(data);
this.rbox.Invoke(new EventHandler(delegate
{ rbox.AppendText(response); rbox.ScrollToCaret(); }));
timer1.Enabled = true;
listen = false;
}

private void timer1_Tick(object sender, EventArgs e)
{
if(listen) return;
byte[] data = new Byte[serialPort1.BytesToRead];
serialPort1.Read(data, 0, data.Length);
string response = System.Text.Encoding.ASCII.GetString(data);
if (response.Contains("\r\n"))
{
if (response.Contains("begin") && response.Contains("stop"))
{
temp = response;
t = new Thread(new ThreadStart(ReceiveFile));
t.Start();
}
else
{
this.rbox.Invoke(new EventHandler(delegate
{ rbox.AppendText(response); rbox.ScrollToCaret(); }));
}
}
}
兔子-顾问 2010-06-06
  • 打赏
  • 举报
回复
。。。
楼主,很傻很天真哦。
你当猫是可以做服务器的么?2个猫如何互播呢。如果对联是不行的,猫需要拨号链接到一个服务器,可以是程控交换机,也可以是电话交换机,如果2个电脑之间。你直接用串口线接起来就可以了。2边都串口收发数据,顶一个数据结构就能通讯或传文件了。
hhc123 2010-06-06
  • 打赏
  • 举报
回复
那还不是和蓝牙差不多吗
ljwklt 2010-06-06
  • 打赏
  • 举报
回复
1,想要两机互相发送接收消息,就必须先通过命令连通,否则只能和猫交流,而无法和另一台机交流啊
hhc123 2010-06-06
  • 打赏
  • 举报
回复
我正关注有关串口通信的问题啊。UP
足球中国 2010-06-06
  • 打赏
  • 举报
回复
不是只要试两边的猫可以发送和接收信息就可以了嘛??

公司买的是U口的猫。我还没搞清楚,怎么用U的来发信息??

110,534

社区成员

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

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

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