我试图通过配置为8n1的rs485连接与win ce设备进行通信,并且没有握手。问题是,该设备有两种工作模式,作为接收器或发射机。为了在两种操作模式之间进行切换,我需要打开/关闭rts。我试过这样做,但设备永远不会改变模式,除非我使用断点,rts是启用或禁用。这使我相信,有一个时间问题,rts是开关之前,我设法发送任何东西(默认模式是接收)。我试着翻阅之前关于这个话题的问题,也尝试过谷歌,但到目前为止,我还没有遇到任何问题。有人能帮忙吗?
这是我的代码:
public static ushort Send_rs485(byte[] ToSend)
{
try
{
rs485.Write(ToSend, 0, ToSend.Length);
}
catch (TimeoutException)
{
MessageBox.Show("COM port error");
}
return (0);
}
private void button2_Click(object sender, EventArgs e)
{
if (COM_opened)
{
bool CTS = false;
rs485.RtsEnable = true;
rs485_Execute_cmd(on_off);
on_off = !on_off;
rs485.RtsEnable = false;
}
else
{
MessageBox.Show("COM port not opened");
}
//rs485.RtsEnable = false;
}发布于 2014-04-28 16:08:36
最基本的问题是Write不会等待所有的数据被传输。当您以合理的方式进行通信时,这并不是一个大问题,因为它仍然在等待数据被缓冲(所以您不会尝试发送100个MiB/s),但是如果您还在执行简单的读写(在您的例子中是更改引脚)之外的其他事情,则会产生同步问题。
这意味着您必须等待-而串行端口上的通信通常非常慢。要获得等待的时间,您需要知道发送的数据量和波特率。例如,要通过9600波特端口发送12个字节,您需要等待10 ms。
我不确定你能不能用什么东西让这感觉不那么脏。
https://stackoverflow.com/questions/23343791
复制相似问题