发表于:2002-10-29 17:21:00
楼主
我现在编写一个双绞线模块和51单片机之间的串口通信程序。双绞线收发模块里的Neuron 芯片使用10MHz晶振,单片机用11.0592得晶振。波特率是4800bps。采用Neuron芯片向单片机发送命令,然后等待应答的方式。按照协议,单片机返回的最大的数据包有126个字节。
Neuron C程序语句如下:
{
io_out(s_out,t_mcu_buf,t_mcu_len);
watchdog_update();
// 发送完后,等着接收数据
r_num=io_in(s_in,r_mcu_buf,126);
watchdog_update();
}
另外定义了三个网络变量,nv_in是输入网络变量,可以在lonmaker browser里输入下发给单片机的命令;nv_out是输出网络变量,是双绞线模块返回给计算机的数据;nv_r_mcu_buf是输出网络变量,用以显示收到的单片机返回的数据包里的前31个字节。
程序编译下载到控制模块里运行,通过lonmaker browser来输入命令,监测网络变量。当单片机返回的数据包在30个字节时,没有什么异常。但是如果单片机返回的数据包是128个字节,nv_in输入命令后,browser上各个网络变量的值在一瞬间显示为“?”,过一下又显示为正常的值,查看nv_r_mcu_buf可以看出接收到的数据包正确,通讯成功。为什么在那一时间网络变量会显示为问号“?”,如果这时用上位软件通过LNS来访问这些网络变量,就会返回“network error”的错误。
请教这是什么原因,有什么改进的方法。谢谢!