【.Net MF网络开发板研究-06】以太网转串口

简介:
     以太网转串口是工控领域最常见的智能通信模块,有的是一网口转 1串口,有的是一网口转 4串口,最多的可以达到一转 16串口(好像有的最多可以支持 32串口)。如果该类模块做的足够完善,可以提供一个 windows系统的设备驱动,安装后,在 windows系统上就可以看到虚拟出的串口了。不过这样做,虽然简便了开发,但是性能有些问题,所以有的模块还支持直接用 TCPUDP进行连接,不同端口号对应不同的串口,这样编程可以达到一个比较高的数据吞吐量(我在上个公司用 Moxa 5630模块开发隧道广告的数据通信时,就遇到类似问题,也就是最大限度地提高单位时间的数据吞吐量)。

       现在我们就用 .NET MF网络开发板做一个一网口转 1串口示例演示。
核心代码如下:
       public ProcessClientRequest(Socket clientSocket, Boolean asynchronously)
        {
            sp.Open();
            sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
            //--
            m_clientSocket = clientSocket;
            if (asynchronously) // Spawn a new thread to handle the request.
                new Thread(ProcessRequest).Start();
            else ProcessRequest();
        }
        void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {         
            if (sp.BytesToRead > 0)
            {
                byte[] bytData = new byte[sp.BytesToRead];
                sp.Read(bytData, 0, bytData.Length);
                string s = new string(System.Text.UTF8Encoding.UTF8.GetChars(bytData));
                System.TinyGUI.Graphics.Print("<<< " + s + "\r\n"); //显示串口接收的数据
                m_clientSocket.Send(bytData);     //把串口接收的数据通过网络发送出去             
            }
        }
        private void ProcessRequest()
        {
            const Int32 c_microsecondsPerSecond = 1000000;
            // 'using' ensures that the client's socket gets closed.
            using (m_clientSocket)
            {
                while (true)
                {
                    // Wait for the client request to start to arrive.
                    Byte[] buffer = new Byte[1024];
                    if (m_clientSocket.Poll(5 * c_microsecondsPerSecond, SelectMode.SelectRead))
                    {
                        // If 0 bytes in buffer, then the connection has been closed,
                        // reset, or terminated.
                        if (m_clientSocket.Available == 0) return;
                        // Read the first chunk of the request (we don't actually do
                        // anything with it).
                        Int32 bytesRead = m_clientSocket.Receive(buffer, m_clientSocket.Available, SocketFlags.None);
                        byte[] bytData = new byte[bytesRead];
                        Array.Copy(buffer, bytData, bytData.Length);
                       
                        string s = new string(System.Text.UTF8Encoding.UTF8.GetChars(bytData));
                        System.TinyGUI.Graphics.Print(">>> "+s+"\r\n"); //显示网络接收的数据                     
                        //---------------------------
                        if (sp.IsOpen)
                        {
                            sp.Write(bytData, 0, bytData.Length); //通过串口发送出去
                            sp.Flush();
                        }
                        //---------------------------
                    }
                }
      }
 把代码部署开发板后执行,我们直接用我们的 TCP Client工具进行测试(下载地址如下: http://www.sky-walker.com.cn/MFRelease/Tools/YFTCPClient.rar)。
打开任意一个串口调试工具,设置波特率 115200,准备和 TCP Client进行通信。
(开发板有两个串口,其中 COM1我们把它设为 Debug口,所以不能使用了,我们用的是 COM2口)。
测试过程图如下:
      
可以看出 TCP Client工具所发出的信息,串口调试助手已经收到,同样,串口调试助手所发的数据, TCP Client也可以收到。
此时开发板运行状态图如下:
      
其实,我们比较“牛”一点的是一个网口可以转 6个串口(其中一个连接 Zigbee,一个是 RS485,还带若干 IO)的物联网网关模块(如下图),该系统基于 STM32F207,正在调试过程中。
          
 








本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/657623 ,如需转载请自行联系原作者
相关文章
|
28天前
|
机器学习/深度学习 算法 机器人
【PID】基于人工神经网络的PID控制器,用于更好的系统响应研究(Matlab&Simulink代码实现)
【PID】基于人工神经网络的PID控制器,用于更好的系统响应研究(Matlab&Simulink代码实现)
159 15
|
2月前
|
数据采集 算法 数据挖掘
模块化控制协议(MCP)在网络中增强智能体执行效率的研究
随着Web3技术的迅速发展,去中心化应用和智能体在各种领域的应用逐渐增多。MCP(Modularized Control Protocol,模块化控制协议)作为一种增强智能体执行能力的关键技术,为Web3场景中的智能体提供了更强的灵活性和可扩展性。本文将探讨如何利用MCP技术提升智能体在Web3场景中的执行能力,并通过实例代码展示其实现路径。
172 22
|
1月前
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
|
25天前
|
机器学习/深度学习 传感器 运维
【电机轴承监测】基于matlab声神经网络电机轴承监测研究(Matlab代码实现)
【电机轴承监测】基于matlab声神经网络电机轴承监测研究(Matlab代码实现)
|
6月前
|
监控 算法 安全
基于 PHP 语言深度优先搜索算法的局域网网络监控软件研究
在当下数字化时代,局域网作为企业与机构内部信息交互的核心载体,其稳定性与安全性备受关注。局域网网络监控软件随之兴起,成为保障网络正常运转的关键工具。此类软件的高效运行依托于多种数据结构与算法,本文将聚焦深度优先搜索(DFS)算法,探究其在局域网网络监控软件中的应用,并借助 PHP 语言代码示例予以详细阐释。
111 1
|
26天前
|
算法 安全 网络安全
【多智能体系统】遭受DoS攻击的网络物理多智能体系统的弹性模型预测控制MPC研究(Simulink仿真实现)
【多智能体系统】遭受DoS攻击的网络物理多智能体系统的弹性模型预测控制MPC研究(Simulink仿真实现)
|
29天前
|
机器学习/深度学习 数据采集 算法
【水质预测】基于模糊神经网络FNN水质预测研究(Matlab代码实现)
【水质预测】基于模糊神经网络FNN水质预测研究(Matlab代码实现)
|
2月前
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
72 4
|
2月前
|
监控 算法 安全
基于 C# 基数树算法的网络屏幕监控敏感词检测技术研究
随着数字化办公和网络交互迅猛发展,网络屏幕监控成为信息安全的关键。基数树(Trie Tree)凭借高效的字符串处理能力,在敏感词检测中表现出色。结合C#语言,可构建高时效、高准确率的敏感词识别模块,提升网络安全防护能力。
72 2
|
2月前
|
机器学习/深度学习 边缘计算 算法
基于BP神经网络的电池容量预测方法研究
基于BP神经网络的电池容量预测方法研究

热门文章

最新文章