使用 VSPE 的 WPF 中的串行端口通信问题

2023-12-26

我开发了一个用于串口通信的wpf应用程序。我使用Windows 7的模拟器VSPE。我可以成功发送和接收数据。我未来的目的是将设备连接到我的 USB 驱动器。我将向我的 USB 发送一个字符串值,并且它会发送回一个字符串作为确认结果。我可以使用与串行端口通信相同的代码吗?我将在此处包含我的代码。

public partial class MainWindow : Window
{     
    FlowDocument mcFlowDoc = new FlowDocument();
    Paragraph para = new Paragraph();

    SerialPort serial = new SerialPort();
    string recieved_data;

    public MainWindow()
    {
        InitializeComponent();
        InitializeComponent();
        //overwite to ensure state
        Connect_btn.Content = "Connect";
    }

    private void Connect_Comms(object sender, RoutedEventArgs e)
    {
        if (Connect_btn.Content == "Connect")
        {
            //Sets up serial port
            serial.PortName = Comm_Port_Names.Text;
            serial.BaudRate = Convert.ToInt32(Baud_Rates.Text);
            serial.Handshake = System.IO.Ports.Handshake.None;
            serial.Parity = Parity.None;
            serial.DataBits = 8;
            serial.StopBits = StopBits.One;
            serial.ReadTimeout = 2000;
            serial.WriteTimeout = 50;
            serial.Open();
            serial.DtrEnable = true;

            //Sets button State and Creates function call on data recieved
            Connect_btn.Content = "Disconnect";
           serial.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(Recieve);

        }
        else
        {
            try // just in case serial port is not open could also be acheved using if(serial.IsOpen)
            {
                serial.Close();
                Connect_btn.Content = "Connect";
            }
            catch
            {
            }
        }
    }

    #region Recieving

    private delegate void UpdateUiTextDelegate(string text);
    private void Recieve(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        // Collecting the characters received to our 'buffer' (string).
        recieved_data = serial.ReadExisting(); 
        Dispatcher.Invoke(DispatcherPriority.Send, new UpdateUiTextDelegate(WriteData), recieved_data);
    }
    private void WriteData(string text)
    {
        // Assign the value of the recieved_data to the RichTextBox.
        para.Inlines.Add(text);
        mcFlowDoc.Blocks.Add(para);
        Commdata.Document = mcFlowDoc;
    }

    #endregion


    #region Sending        

    private void Send_Data(object sender, RoutedEventArgs e)
    {
        SerialCmdSend(SerialData.Text);
        SerialData.Text = "";
        serial.Close();
    }
    public void SerialCmdSend(string data)
    {
        if (serial.IsOpen)
        {
            try
            {
                // Send the binary data out the port
                byte[] hexstring = Encoding.ASCII.GetBytes(data);
                //There is a intermitant problem that I came across
                //If I write more than one byte in succesion without a 
                //delay the PIC i'm communicating with will Crash
                //I expect this id due to PC timing issues ad they are
                //not directley connected to the COM port the solution
                //Is a ver small 1 millisecound delay between chracters
                foreach (byte hexval in hexstring)
                {
                    byte[] _hexval = new byte[] { hexval }; // need to convert byte to byte[] to write
                    serial.Write(_hexval, 0, 1);
                    Thread.Sleep(1);
                }
            }
            catch (Exception ex)
            {
                para.Inlines.Add("Failed to SEND" + data + "\n" + ex + "\n");
                mcFlowDoc.Blocks.Add(para);
                Commdata.Document = mcFlowDoc;
            }
        }
        else
        {
        }
    }

    #endregion

}

如果您计划使用虚拟串行端口适配器(串行转 USB 电缆),那么可以!

否则,可能不会。这实际上取决于您将如何使用 USB。 USB HID 设备将需要不同的代码。

当我使用串行设备进行开发并转移到别的东西之后。在面向对象的世界中,这是接口的主要候选者!

public IDevice
{
    IDeviceConnection Connect(int timeout);
}

public IDeviceConnection: IDispose //Dispose() disconnects your device. Enables using() statements
{
    int WriteData();
    byte[] ReceiveData();
}

正确实现这两个版本,您可以通过您选择的任何机制交换串行和 USB 版本。请注意,需要将代码分成类才能完成此操作。将所有内容都放在表单的代码文件中是不好的做法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 VSPE 的 WPF 中的串行端口通信问题 的相关文章

随机推荐

  • 如何在 Jetpack Compose 中禁用和启用 LazyColumn/LazyRow 中的滚动?

    我想以编程方式动态启用和禁用滚动LazyColumn 好像没有相关功能LazyListState或相关参数LazyColumn本身 我怎样才能在 Compose 中实现这一目标 Since 1 2 0 userScrollEnabled范围
  • 如何从 QVBoxLayout 中删除(子)布局项?

    我找到了很多关于从 QVBoxLayout 中删除小部件的答案 但我没有找到任何有关删除布局的答案 我知道我可以将我的子布局放入 QWidget 中 我只是想了解更多 layout QtGui QVBoxLayout item in lay
  • 使用 OpenCV 读取 mp4 (Go Pro) 视频

    在 Visual Studio 2013 中使用带有 C 接口的 OpenCV 时 我在读取某些视频文件时遇到困难 我已经能够读取其他视频格式 因此相信我的代码没问题 问题视频文件是使用 Go Pro 拍摄的 格式为 mp4 我可以在使用
  • 为什么我的表单无法在 Internet Explorer 9 中上传文件?

    欢迎收看第 32 342 343 集 为什么 Internet Explorer 这么糟糕 我看到很多报道称 IE9 在上传文件方面表现不佳 显然 它有很多关于何时有效或无效的警告 如果有人有明确的列表 我很乐意看到它 然而 我发现的大多数
  • Mixpanel 人物个人资料头像图片

    我已经在互联网上搜索了此问题的解决方案 但无济于事 是否可以将我们用户的个人资料图片设置为 Mixpanel 人员报告中的个人资料图片 我尝试在声明 Mixpanel 用户属性的方法中调用我们的用户图片对象 但它没有更新照片 这里有最佳实践
  • Mean.js req.isAuthenticated 显示失败?

    我已经下载了meanjs 电子邮件受保护 cdn cgi l email protection我使用了两台服务器作为前端 我使用了 Angular 和 ionic 它在 localhost 3000 中运行 对于后端 我使用了meanjs
  • 从数组循环渲染组件

    在我的 app component ts 中 我有一个包含组件标签的数组 compData app component one app component two app component three 然后在我的 app componen
  • 链接:致命错误 LNK1104:无法打开文件“D:\...\MyProj.exe”

    使用 Visual Studio 2010 当我在短时间内构建 运行我的应用程序时 经常会收到以下错误 如果我等一两分钟再试一次就可以了 Unlocker http www emptyloop com unlocker 声称没有句柄锁定可执
  • 如何检查nodejs中的标头?

    这是运行良好的实际代码 但我想检查我的标头是否很好地传输到我的 api var request require request var express require express var router express Router GE
  • 多人网络游戏中的同步?

    最近我一直在开发一个多人网络应用程序 我已经使用 Bonjour 服务和 NSStream 对象成功实现了客户端服务器模型 双向通信已成功完成 我面临的问题是 运行该应用程序的两个设备通过本地 wifi 连接 从客户端向服务器发送消息时存在
  • 如何从 DynamoDB 获取每个主分区键的最新数据?

    我在 dynamodb 中有一张表 它存储帐户统计信息 帐户统计数据可能每天会更新多次 所以表记录可能如下所示 account id record id views stars 3 2019 03 16 1 29 3 2 2019 03 1
  • 将 numpy.stack() 与 numba njit 一起使用时出现打字错误

    最初的问题与使用有关np linspace使用数组作为开始和停止参数 尽管现在我遇到了我想出的解决方法的问题 采取以下措施 from numba import njit import numpy as np njit def f1 star
  • Rails 3.1 使文件夹公开

    你好 我是 Rails 新手 在我的 RoR 应用程序文件夹中 我有一个文件夹 app FOLDER 我想公开 有需要从浏览器获取的脚本文件 我该怎么做 在最新的 Rails 中 文件应存在于以下位置之一 app assets lib as
  • Intellij IDEA。始终显示maven的`target`目录

    使用Intellij IDEA创建maven项目时 默认情况下target目录在项目资源管理器中不可见 但我可以通过将其从模块设置中的排除文件夹中删除来使其可见 但它的作用时间很短 10 15分钟后target目录再次不可见 所以我需要再次
  • tinymce 无法在 Firefox 上运行

    我有三个文本区域 使用tinymce 作为文本区域 它们都可以在 Chrome 上运行 但不能在 Firefox 上运行 我正在使用 php 代码从 mysql 加载文本 第一个文本区域加载正常并且可以工作 但其他两个文本区域会短暂闪烁内容
  • Web Share API 级别 2 DOMException:权限被拒绝

    我正在获取一个 img 将其转换为一个文件 然后尝试共享该文件 我在 Android 上最新的 Chrome 目前唯一支持此 API 的浏览器 上测试了代码 if shareimg navigator canShare share asyn
  • 为什么我收到“UserWarning:模块 dap 已从 None 导入...”

    I have python matplotlib and python mpltoolkits basemap从 Ubuntu 软件包安装 安装中python mpltoolkits basemap还安装python dap作为依赖 当我导
  • React.lazy 无法在生产模式下工作

    我有一个正在运行的 React 应用程序 我想使用 React lazy 添加基于路由的代码分割 目前我的代码是 import PureComponent cloneElement Suspense lazy from react expo
  • 使用文件系统作为离线播放的视频源

    我正在尝试向我的 HTML5 视频播放器添加离线功能 我正在尝试将文件作为 blob 写入 chrome 文件系统 然后从那里读取它们 我相信我遇到了一个问题 文件实际上并未被写入 只是文件名 由于我的以下代码目前已构成 因此它可以工作 但
  • 使用 VSPE 的 WPF 中的串行端口通信问题

    我开发了一个用于串口通信的wpf应用程序 我使用Windows 7的模拟器VSPE 我可以成功发送和接收数据 我未来的目的是将设备连接到我的 USB 驱动器 我将向我的 USB 发送一个字符串值 并且它会发送回一个字符串作为确认结果 我可以