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

简介: 有的模块还支持直接用TCP或UDP进行连接,不同端口号对应不同的串口,这样编程可以达到一个比较高的数据吞吐量(我在上个公司用Moxa 5630模块开发隧道广告的数据通信时,就遇到类似问题,也就是最大限度地提高单位时间的数据吞吐量)。

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

现在我们就用.NET MF网络开发板做一个一网口转1串口示例演示。

简单期间,网络部分的代码,我们可以借用《Socket编程之服务端》中介绍的代码,串口部分的代码,我们可以参考《远程PLC读写控制》和《PC通过Modbus协议远程操控开发板》中的串口代码来进行改写。

核心代码如下:

       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口)。

测试过程图如下:
image.png

       

可以看出TCP Client工具所发出的信息,串口调试助手已经收到,同样,串口调试助手所发的数据,TCP Client也可以收到。

此时开发板运行状态图如下:
image.png

      

其实,我们比较“牛”一点的是一个网口可以转6个串口(其中一个连接Zigbee,一个是RS485,还带若干IO)的物联网网关模块(如下图),该系统基于STM32F207,正在调试过程中。
image.png

     

 ---------------------------------------------------------------------------------------------------------------------------------------------

本文源码:http://www.sky-walker.com.cn/MFRelease/Sample/YFMFTCP2Serialport.rar

MF简介:http://blog.csdn.net/yefanqiu/article/details/5711770

官方网站:http://www.sky-walker.com.cn/

相关文章
|
2月前
|
网络架构
.NET 网络唤醒
【9月更文挑战第5天】在网络管理中,.NET 可以实现 Wake-on-LAN,即通过发送特定数据包(魔术包)唤醒睡眠或关机状态的计算机。首先需引入命名空间(System.Net, System.Net.Sockets),然后编写 WakeUpComputer 方法,构造并发送含有目标计算机 MAC 地址的魔术包,最后调用此方法即可。使用前,请确认目标计算机及网络设备支持此功能。
37 12
|
3月前
|
机器学习/深度学习 数据可视化 数据挖掘
【Macos系统】安装VOSviewer及使用VOSviewer教程!!以ESN网络的研究进行案例分析
本文介绍了如何在MacOS系统上安装VOSviewer软件,并以ESN(Echo State Network)网络的研究为例,通过VOSviewer对相关科学文献进行可视化分析,以深入了解ESN在学术研究中的应用和发展情况。
251 0
【Macos系统】安装VOSviewer及使用VOSviewer教程!!以ESN网络的研究进行案例分析
|
4月前
|
网络协议 算法 程序员
网络必修课:以太网报文格式详解
嗨,大家好!今天,我要带大家深入了解以太网报文格式,这是现代网络通信的重要基础。无论你是网络工程师、开发者,还是对技术感兴趣的朋友,这篇文章都将为你揭开以太网的神秘面纱,让你更好地理解和应用这一关键技术。准备好了吗?让我们开始吧!
125 4
|
3月前
|
网络协议
网络工程师必看 | 某高校实验作业:以太网帧分析
网络工程师必看 | 某高校实验作业:以太网帧分析
|
5月前
|
网络协议 Java 程序员
TCP/IP协议栈是网络通信基础,Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用
【6月更文挑战第23天】 **TCP/IP协议栈是网络通信基础,它包含应用层(HTTP, FTP等)、传输层(TCP, UDP)、网络层(IP)、数据链路层(帧, MAC地址)和物理层(硬件信号)。Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用,如Socket和ServerSocket用于客户端和服务器通信。**
53 3
|
5月前
|
安全 网络安全 数据安全/隐私保护
网络安全威胁分析与防护技术研究
网络安全威胁分析与防护技术研究
50 0
|
5月前
|
域名解析 网络协议 程序员
网络原理(7)——以太网数据帧和DNS协议(数据链路层和应用层)
网络原理(7)——以太网数据帧和DNS协议(数据链路层和应用层)
176 0
|
6月前
|
机器学习/深度学习 安全 网络安全
利用机器学习优化数据中心能效的研究数字堡垒的构建者:网络安全与信息安全的深层探索
【5月更文挑战第29天】在云计算和大数据时代,数据中心的能效问题成为关键挑战之一。本文通过集成机器学习技术与现有数据中心管理策略,提出了一种新型的智能优化框架。该框架能够实时分析数据中心的能耗模式,并自动调整资源分配,以达到降低能耗的目的。研究结果表明,应用机器学习算法可以显著提升数据中心的能源使用效率,同时保持服务质量。
|
6月前
|
JSON API 定位技术
.NET集成DeveloperSharp实现http网络请求&与其它工具的比较
该内容介绍了一个支持.NET Core 2.0及以上和.NET Framework 4.0及以上的HTTP请求调用方法,主要讨论了POST和GET两种形式。POST请求较为常见,涉及调用地址、发送参数、HTTP请求头和编码格式设置。文中提供了一个使用DeveloperSharp库发送POST请求的C#代码示例,用于发送短信,其中`IU.HttpPost`方法用于执行POST请求。此外,还提到了`HttpPost`方法的参数和返回值说明。最后简要提及了GET请求,通常用于URL带有查询参数的情况,并给出一个简单的GET请求示例。
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
38 7

热门文章

最新文章