首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >串行通信.配置rts

串行通信.配置rts
EN

Stack Overflow用户
提问于 2014-04-28 14:29:13
回答 1查看 308关注 0票数 0

我试图通过配置为8n1的rs485连接与win ce设备进行通信,并且没有握手。问题是,该设备有两种工作模式,作为接收器或发射机。为了在两种操作模式之间进行切换,我需要打开/关闭rts。我试过这样做,但设备永远不会改变模式,除非我使用断点,rts是启用或禁用。这使我相信,有一个时间问题,rts是开关之前,我设法发送任何东西(默认模式是接收)。我试着翻阅之前关于这个话题的问题,也尝试过谷歌,但到目前为止,我还没有遇到任何问题。有人能帮忙吗?

这是我的代码:

代码语言:javascript
复制
    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;

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-28 16:08:36

最基本的问题是Write不会等待所有的数据被传输。当您以合理的方式进行通信时,这并不是一个大问题,因为它仍然在等待数据被缓冲(所以您不会尝试发送100个MiB/s),但是如果您还在执行简单的读写(在您的例子中是更改引脚)之外的其他事情,则会产生同步问题。

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

我不确定你能不能用什么东西让这感觉不那么脏。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23343791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档