本人用232转USB读取数据正确,但是485转USB读取数据出错,用调试助手都可以正常接收数据。 usb-232 usb-485 收发端如果硬件匹配,则在逻辑上没有差别,你的问题看起来似乎是信号传输不可靠,但你又说串口助手没有问题,那就有些奇怪了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我是使用modbus协议的主从方式的,从机接收到命令才响应,并回复相应的数据,同时,我使用定时器定时发送命令给从机,时间足够长。所以时序上应该不会有问题吧?那么冲突也就不可能了。所以想请您在说具体点 发送的数据应该是一样的,因为接收的单片机已经规定死了接收命令,我是可以接收到数据的,所以可以确定发送的数据是正确的问题就是出在我在窗口上显示的数据有时候是正确的,有时候是错误的。。单步调试发现接收到的数据长度又是正确的,就是数据从缓存取出数据就错了,,我使用了{m_ctrlComm.SetInputLen(0);m_ctrlComm.GetInput();}这个函数当做清除输入缓存的数据。这样保证下次接收不会有数据影响,所以想问问我这样可以清除吗?还是我的错误与缓存无关?希望您可以在帮帮我谢谢 m_ctrlComm.SetInputLen(0);这个是清除缓存区的指令,怎么能放在读数据之前? 预读缓存区用以清除残留数据,这个函数是放在每次显示完数据之后的这个不是我真正读取数据的函数,真正的读取放在if(2==m_ctrlComm.GetCommEvent()) { Sleep(400); //延时加在这个位置//下面是对数据的处理variant_inp = m_ctrlComm.GetInput();safearray_inp = variant_inp;len = safearray_inp.GetOneDimSize();for(k = 0;k<len;k++){safearray_inp.GetElement(&k,rxdata+k); } 这个代码应该是放在OnComm里面把?这应该会有问题接收字节数到的时候可能或多次触发事件,前面数据被读走,最后一次读的数据就会不完整 这个是放在OnComm这个响应函数里的。没接收一个字符就触发一次。。那请问应该怎么改写这个程序呢,,求指点 这个是放在OnComm这个响应函数里的。没接收一个字符就触发一次。。那请问应该怎么改写这个程序呢,,求指点每接收一个字节就触发,就不用sleep,将每次接收的放入一个全局变量连接在一起。这样的问题是你不知道什么时候该结束实际上你可以按以下模式处理,而不在OnComm里接收发送sleep(n)//一般50-100即可接收 这个是放在OnComm这个响应函数里的。没接收一个字符就触发一次。。那请问应该怎么改写这个程序呢,,求指点每接收一个字节就触发,就不用sleep,将每次接收的放入一个全局变量连接在一起。这样的问题是你不知道什么时候该结束实际上你可以按以下模式处理,而不在OnComm里接收发送sleep(n)//一般50-100即可接收好的谢谢,,我试试。。现在我准备用API来写算了,,这个问题我是真心解决不了了。之前之所以使用sleep主要是在别人的电脑上面读不出正确数据,是因为当接收的字符超过8个,会多次调用中断函数,所以加了一个延时使接收完数据在处理。就解决了别人电脑上读出错误信息的问题。。非常感谢您的耐心指导。。谢谢 这个是放在OnComm这个响应函数里的。没接收一个字符就触发一次。。那请问应该怎么改写这个程序呢,,求指点每接收一个字节就触发,就不用sleep,将每次接收的放入一个全局变量连接在一起。这样的问题是你不知道什么时候该结束实际上你可以按以下模式处理,而不在OnComm里接收发送sleep(n)//一般50-100即可接收很感谢您的指导,我使用API从新编写了一下就没问题了 急!在线等!雷达运行时间越长,CPU占用越多!! 一个奇怪的问题,各大侠请进。。。。 各位高手过来看一下这段代码,关于遍历bmp像素 怎么在编辑框中显示多行文字 《DirectShow实务精选》兼容性问题 完成端口中的 Accetp 疑问 怎么用程序建一个3D的CStatic?大哥们能不能帮我写一个例子? 急,关于连接的问题。 我要把一个字模文件存成BMP文件,想请问怎样画点? 如何用VC做出多语言版本的程序? 关于把VC++中的数写入txt文件中的问题 List control 添加文件和文件夹显示文件名和路径
{
m_ctrlComm.SetInputLen(0);
m_ctrlComm.GetInput();
}这个函数当做清除输入缓存的数据。这样保证下次接收不会有数据影响,所以想问问我这样可以清除吗?还是我的错误与缓存无关?希望您可以在帮帮我谢谢
这个是清除缓存区的指令,怎么能放在读数据之前?
if(2==m_ctrlComm.GetCommEvent()) {
Sleep(400); //延时加在这个位置
//下面是对数据的处理
variant_inp = m_ctrlComm.GetInput();
safearray_inp = variant_inp;
len = safearray_inp.GetOneDimSize();
for(k = 0;k<len;k++)
{
safearray_inp.GetElement(&k,rxdata+k);
}
接收字节数到的时候可能或多次触发事件,前面数据被读走,最后一次读的数据就会不完整
sleep(n)//一般50-100即可
接收
sleep(n)//一般50-100即可
接收
好的谢谢,,我试试。。现在我准备用API来写算了,,这个问题我是真心解决不了了。之前之所以使用sleep主要是在别人的电脑上面读不出正确数据,是因为当接收的字符超过8个,会多次调用中断函数,所以加了一个延时使接收完数据在处理。就解决了别人电脑上读出错误信息的问题。。非常感谢您的耐心指导。。谢谢
sleep(n)//一般50-100即可
接收
很感谢您的指导,我使用API从新编写了一下就没问题了