试验平台:Digi MF开发板
关于网络通信方面,Digi提供了两个程序,一个是TCP Server运行在Digi的开发板上,一个是TCP Client程序,运行在PC上,通过网络,上位机很容易控制Digi开发的IO信号。客户端程序运行后的界面如下:

(图MF071029004.jpg)
如果仅仅运行一下示例程序,那显然不过瘾!既然串口实现了Modbus Rtu协议,那么网口就实现Modbus Tcp协议吧,实现的Modbus Tcp协议比我们用串口实现Modbus Rtu的指令要多一个,不仅实现了3号命令,也实现了16号命令,这样我们就可以通过Modbus Tcp读写Digi开发板的数据了。这次我们操作的是Digi开发板上的5个LED灯。用OutputPort对象去操作。
操作GPIO的相关代码如下:
//读GPIO信号
DataBuff[0] = 0;
DataBuff[1] = (byte)((output[0].Read() ? 1 : 0) | (output[1].Read() ? 2 : 0) | (output[2].Read() ? 4 : 0) | (output[3].Read() ? 8 : 0) | (output[4].Read() ? 16 : 0));
//写GPIO信号
bool[] bFlag = new bool[5];
bFlag[0]=(DataBuff[1] & 0x01)>0 ? true:false;
bFlag[1]=(DataBuff[1] & 0x02)>0 ? true:false;
bFlag[2]=(DataBuff[1] & 0x04)>0 ? true:false;
bFlag[3]=(DataBuff[1] & 0x08)>0 ? true:false;
bFlag[4]=(DataBuff[1] & 0x10)>0 ? true:false;
for (i = 0; i < 5; i++)
{
output[i].Write(bFlag[i]);
}
网络操作相关源码如下:
using System;
using Microsoft.SPOT;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using Microsoft.SPOT.Hardware;
namespace MFModbusTcp
{
public class ModbusTcpSlave
{
//MF开发板 IO灯
private OutputPort[] output=new OutputPort[5];
Cpu.Pin[] pin = new Cpu.Pin[5] { (Cpu.Pin)0, (Cpu.Pin)1, (Cpu.Pin)2, (Cpu.Pin)5, (Cpu.Pin)6 };
private Socket socketServer;
private Socket s = null;
//变量缓冲区
private byte[] m_bytData = new byte[256];
private byte[] m_InputTCPBuf = new byte[1024];
private byte[] m_OutputTCPBuf = new byte[1024];
public byte[] DataBuff = new byte[1024];
//启动Modbus Tcp服务
public void Run()
{
//初始化 GPIO
for (int i = 0; i < 5; i++)
{
output[i] = new OutputPort(pin[i], false);
}
socketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socketServer.Bind(new IPEndPoint(DottedDecimalToIp(0, 0, 0, 0), 502));
socketServer.Listen(1);
Debug.Print("Modbus Tcp Slave Started");
while (true)
{
s = socketServer.Accept();
while (s != null)
{
if ((int)s.GetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Error) != 0) goto ExitServer;
if (s.Available > 0)
{
TCP_DealwithCommand();
}
Thread.Sleep(10);
}
}
ExitServer:
s.Close();
s = null;
Debug.Print("Modbus Tcp Slave Exit");
}
//数据解析
private void TCP_DealwithCommand()
{
int i = 0;
int lngSendNum = 0;
int lngDataNum = 0;
int lngDataAddr = 0;
//接收数据
int intRet=s.Receive(m_InputTCPBuf);
//Debug.Print("Receive Num:" + intRet.ToString());
for (i = 0; i < 12; i++) m_OutputTCPBuf[i] = m_InputTCPBuf[i];
//---------------------------------------------------------------
//Modbus 读命令
if (m_InputTCPBuf[7] == 3)
{
… …
}
//---------------------------------------------------------------
//Modbus 写命令
if (m_InputTCPBuf[7] == 16)
{
… …
}
}
//IP地址转化
private long DottedDecimalToIp(byte a1, byte a2, byte a3, byte a4)
{
return (long)((ulong)a4 << 24 | (ulong)a3 << 16 | (ulong)a2 << 8 | (ulong)a1);
}
}
}
程序部署运行后,我们就可以用标准的Modbus Tcp Client程序测试了,我使用的是YFIOServer。
1、 先配置Modbus Tcp驱动程序

(图MF071029001.jpg)
2、 再配置IO连接变量

(图MF071029001.jpg)
3、 开始读写GPIO,此时GPIO灯的亮灭,完全被写入的数据控制了。

(图MF071029001.jpg)
总论:很难想像,操作TCP的代码比C#的代码还要简洁高效,不到十几分钟,就把一个C#代码改造为MF代码,并且在很短的时间内就调试成功。微软的下一个战略看来马上就成为现实:全世界的每一个智能设备都用MF上网J。
分享到:
相关推荐
3. **.NET Micro Framework栈(MSSTACK)**:这是.NET MF自带的TCP/IP实现,专为微控制器设计,简化了API,同时提供了必要的网络服务。MSSTACK包含了一系列的HAL(硬件抽象层)和PAL(平台抽象层)接口,这些接口...
7. **网络编程**:讲解如何利用.NET Micro Framework进行TCP/IP通信,支持HTTP、FTP等网络协议。 8. **安全与加密**:讨论嵌入式系统中的安全问题,包括数据保护、身份验证和加密技术。 9. **实时性与并发**:分析...
5. **网络与通信**:介绍.NET MF中的网络功能,如TCP/IP协议栈、HTTP协议、WebSocket支持,以及如何实现设备间的通信。 6. **安全与固件更新**:讲解.NET MF的安全特性,如代码签名、加密,以及如何实现固件的远程...
6. **网络通信**:讲解.NET MF支持的各种网络协议,如TCP/IP、HTTP和WiFi,以及如何实现网络功能。 7. **安全与加密**:探讨.NET MF中的安全特性,包括代码签名、安全策略和加密技术,以保护嵌入式设备免受恶意攻击...
### GHI .NET MICRO FRAMEWORK入门教程 #### 关于本书 本书主要介绍如何利用Microsoft .NET Micro Framework(简称.NETMF)进行嵌入式系统的开发。.NET Micro Framework将.NET平台的强大功能与Visual Studio的高效...
例如,网络库可以支持TCP/IP协议栈,允许设备进行网络通信;而文件系统库则提供了读写文件的能力,便于数据存储和检索。 C#是.NET Micro Framework的主要编程语言。它是一种类型安全、面向对象的语言,拥有丰富的...
然而,值得注意的是,.NET Micro Framework的TCP/IP通信堆叠和加密库的源代码并未开放。这部分代码由于涉及外部授权(TCP/IP堆叠来自EBSNet)或超出框架本身的应用范围(加密库),因此不包含在开源项目中。微软建议...
S7.Net动态链接库DLL是专门针对西门子S7系列PLC设计的一种通信库,它允许用户通过.NET Framework进行编程,实现与各种型号的西门子PLC(包括S7-200、S7-300、S7-400、S7-1200和S7-1500)的高效通信。这个DLL库为...
C#标签可能意味着VxWorks与.NET Micro Framework或者.NET Compact Framework的集成,或者是通过C#来开发VxWorks应用。 1. **VxWorks基本概念**:VxWorks的核心特点是其微内核设计,包括任务管理、内存管理、中断...
OpenNETCF.Desktop.Communication是针对C#开发者的一个开源库,特别设计用于在终端设备(如Windows CE、Windows Mobile或.NET Compact Framework支持的其他设备)和PC之间进行通信同步。这个库涵盖了2.8.1到2.9.4的...
这个框架主要针对Windows CE、Windows Mobile和.NET Micro Framework等资源有限的环境。M2Mqtt.NetCF39.dll是专为这些平台设计的版本,它使得在这些平台上实现MQTT协议变得容易且高效。 MQTT协议的核心特点是其简单...
它拥有强大的处理能力,支持多种网络协议栈,包括TCP/IP协议族,因此非常适合进行网络通信。 在s3c6410处理器上实现UDP通信,首先需要了解并配置其内部的网络控制器,如以太网控制器。这通常涉及到设置MAC地址、...
它支持TCP/IP协议栈,以及蓝牙、Wi-Fi等多种无线通信方式,使得设备能够接入互联网或者与其他设备进行数据交换。 安全性是任何系统都不能忽视的部分。Windows Embedded CE提供了安全策略和加密服务,如SSL/TLS协议...
- **网络支持**:包括TCP/IP协议栈,提供网络连接和通信功能。 - **设备驱动程序模型**:允许开发者为各种硬件编写驱动程序,确保硬件兼容性。 - **应用程序框架**:如.NET Micro Framework,支持.NET应用程序的...
5. **网络功能**:WEC7具有强大的网络支持,包括TCP/IP协议栈、HTTP/HTTPS服务器和客户端,以及SMTP、POP3等邮件协议,便于实现设备间的通信和数据交换。 6. **多媒体支持**:集成了DirectX技术,可以处理音频、...
2. **编程语言**:程序可能由各种编程语言编写,如C/C++、Python、Java或特定的嵌入式语言如C# for .NET Micro Framework等。选择哪种语言取决于系统需求和资源限制。 3. **电机控制**:搅拌机的运行可能需要精确的...
此外,课程可能还会涉及其他相关主题,如实时操作系统(RTOS)、嵌入式系统的硬件设计、固件更新、通信协议(如串口、USB、TCP/IP)以及传感器和执行器的接口技术。这些都是构建复杂嵌入式系统不可或缺的知识。 总...
2. .NET Micro Framework:对于.NET开发者,可以利用此框架在CE上开发C#和VB.NET应用。 3. 设备驱动程序:开发者可以使用DDK(Driver Development Kit)编写驱动程序,实现对硬件的控制。 五、部署与更新 1. 部署...
2. **西门子的通信协议**:S7-200PLC支持多种通信协议,如PPI(Protocol for Peripheral Interconnection)、MPI(MultiPoint Interface)、TCP/IP和USS(Universal Serial Interface)。VB程序需要根据选定的协议来...
10. **应用程序框架(Application Frameworks)**:Windows Embedded CE 6.0提供了多种应用程序框架,如.NET Micro Framework和Windows CE .NET。本章可能讨论了如何利用这些框架开发和部署应用程序。 由于提供的...