c# – 如何等待正确的时刻写?

c# – 如何等待正确的时刻写?,第1张

概述我正在尝试向我的rs232设备发送多个SerialPort.Write命令.但是,我不认为它可以同时处理多个WRITE命令. 目前,我只是使用Thread.Sleep(500)在WRITE之间延迟,但有没有办法检测何时发送的最佳时间是?还是用缓冲区? 示例代码 接口 private void btn_infuse_Click(object sender, RoutedEventArgs e) { 我正在尝试向我的rs232设备发送多个SerialPort.Write命令.但是,我不认为它可以同时处理多个WRITE命令.

目前,我只是使用Thread.Sleep(500)在WRITE之间延迟,但有没有办法检测何时发送的最佳时间是?还是用缓冲区?

示例代码

接口

private voID btn_infuse_Click(object sender,RoutedEventArgs e) {        cmd.SetTargetInfusionVolume(spmanager,double.Parse(tBox_targetvolume.Text));        cmd.StartInfuse(spmanager);//cmd object of Command class}

命令类

public voID StartInfuse(SPManager spm){        spm.Write("RUN");//spm object of serialportmanager class    }    public voID SetTargetInfusionVolume(SerialPortManager spm,double num) {        spm.Write("MLT " + num.ToString());    }

SerialPortManager类

public voID Write(string sData) {        if (oSerialPort.IsOpen) {//oSerialPort object of SerialPort class            try {                oSerialPort.Write(sData + "\r");            }            catch { MessageBox.Show("error"); }        }    }
解决方法 如果您的串口设置(特别是Hans Passsant提到的,流量控制)是正确的,那么速度问题很可能是您的设备无法足够快地处理消息,以便在发送速度过快时与您保持联系,或者它期望消息之间存在“无声”差距以便描述它们.

在这种情况下,Sleep()引入传输延迟是一种非常合理的方法.您需要找到明智的延迟,以确保设备成功处理您的消息,理想情况下不会拖延您的应用程序太长时间.

这通常涉及试验和错误,但请查阅设备的文档,因为相当多的设备在传输中使用间隙来指示消息包的结束(例如,通常他们可能希望您在一段时间后保持沉默.消息,例如,如果他们在2400bps链路上指定了10比特的“静默时间”,则这将对应于10/400ths或仅超过4毫秒).但是,这可能会受到windows的影响,因为它往往会缓冲数据(即它会挂起几毫秒,看看你是否会要求它传输更多) – 你可能因此需要一个延迟显着超过应该严格要求的延迟 – 可能15-20ms.当然,我可能会咆哮错误的树,你可能会发现你需要500毫秒左右才能让它工作.

总结

以上是内存溢出为你收集整理的c# – 如何等待正确的时刻写?全部内容,希望文章能够帮你解决c# – 如何等待正确的时刻写?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1229107.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存