试验平台: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。
分享到:
相关推荐
关于.Net Micro Framework 的tcp/ip的开发描述
The Microsoft .NET Micro Framework is a small and efficient .NET runtime environment used to run managed code on devices that are too small and resource constrained for Windows CE and the Compact ...
《玩转.NET Micro Framework移植-基于STM32F10x处理器》源程序
.NET Micro Framework 电子书
.net micro framework关于文件操作的例子,非常详细。还包括了点击等东西
三菱FX5UJ和艾莫迅远程模块实现TCP/IP通讯,程序包含多种功能吗的实现
expert .net micro frameworkexpert .net micro frameworkexpert .net micro framework
.NET Micro Framework自动化测试工具,需.NET Micro Framework3.0和.NET Micro Framework Test Kit支持...
Microsoft .NET Micro Framework 2.5 SDK。 这个我暂时没用,权当放在这里存放,需要的,自己动手。
近来有些刚入门的用户,不太了解.NET Micro Framework开发板的使用,所以写了这篇文档,以期缩短用户对开发板的熟悉时间。
这是我自己改造的.Net Micro Framework模拟器,比windows自带的漂亮多了。 覆盖该目录下的同名文件(路径以实际开发包安装位置为准)即可。 C:\Program Files\Microsoft .NET Micro Framework\v2.0.3036\Tools 支持...
micro framework 4.0 SDK,最新开发工具包
http://item.taobao.com/item.htm?id=7117999726 .NET Micro Framework开发板的Key文件的部署说明。
.NET Micro Framework 电子书
《玩转.NET Micro Framework 移植-基于STM32F10x处理器》一书所有的源代码。其它更多的资源可以访问我的blog:http://blog.csdn.net/norains 谢谢!
.NET Micro Framework开发板原理图(红牛开发板)
.NET Micro Framework开发板使用手册(红牛开发板)
如何顺利编译.Net Micro Framework Porting Kit 4.1 安装路径不能有空格
.NET Micro Framework for Windows 7(X64) USB驱动安装说明,包含相应的驱动程序