串口通讯;配置rts

时间:2014-04-28 14:29:13

标签: c# .net

我正在尝试通过配置为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;

    }

1 个答案:

答案 0 :(得分:2)

基本问题是Write没有等待所有数据传输IIRC。当您以合理的方式进行通信时,这不是一个大问题,因为它仍然在等待数据被缓冲(因此您不会尝试发送100 MiB / s),但如果您和除了简单的读写操作(在你的情况下,更改引脚)之外,还要做其他事情,这会产生同步问题。

这意味着你必须等待 - 通过串口进行通信通常很慢。要获得必须等待的时间,您需要知道您要发送的数据量和波特率。例如,要通过9600波特端口发送12个字节,您需要等待10毫秒。

我不确定是否有一些东西可以让你感觉不那么脏。