深圳宏电 虚拟 DTU 开发
2010-07-28 15:30 Creative dream 阅读(2576) 评论(0) 收藏 举报本文实现模拟深圳宏电H7118 GPRS模块上线、下线、发送数据功能。
- 开发工具:VS 2008 CN
- 开发语言:Visual C#
- 工具包:宏电提供的”虚拟DTU软件“、“DSC服务器软件”和“UDP抓包工具(网上可下载)”
- 服务器IP:192.168.128.222
- DTU编号:13900000000
最近要做一个虚拟DTU程序,主要是虚拟DTU模块上线、下线和向服务器端发送数据,在网上找了好久,没找到资料,看来还是自己动手好了。
要实现通讯,必须了解双方的通讯协议,首先利用虚拟DTU软件模拟上线、下线和发送数据,UDP抓包工具截取UDP包,以下是截取到的数据:
上线注册包数据:
7B // {
01 // 功能码 01注册包
00 16 // 数据长度(在数据包中,除掉发送的数据之外的长度,也就是最后一个“7B”之前的长度)
31 33 39 30 30 30 30 30 30 30 30 // DTU编号
C0 A8 80 DE //服务端IP
13 89 // 客户端端口
7B // }
协议 以“{”开始“}”结束
这里主要看"31 33 39 30 30 30 30 30 30 30 30",数数正好11位,把十六进制换算成字符类型就很明显地看出来“13900000000”,为DTU编号,C0 A8 80 DE 这一行,换算成十进制为“192.168.128.222”,正好为服务器地址。在这里发送02 03 01 54 00 1F 44 1D,截获的包为
7B 09 00 10
31 33 39 30 30 30 30 30 30 30 30
7B
02 03 01 54 00 1F 44 1D
很明显,02 03 01 54 00 1F 44 1D为发送的数据
下线注销包数据:
7B // {
02 // 功能码 02 注销包
00 10 // 数据长度
31 33 39 30 30 30 30 30 30 30 30 // DTU编号
7B // }
下面是实现的C#代码:
byte[] signIn; // 登录数据
byte[] signOut;// 注销数据
// 初使化
signIn = new byte[22]
{
0x7B, 0x01, 0x00, 0x16,
0x31 ,0x33 ,0x39 ,0x30 ,0x30 ,0x30 ,0x30 ,0x30 ,0x30 ,0x30 ,0x30 ,
0xC0 ,0xA8 ,0x80 ,0xDE ,0x13 ,0x89 ,
0x7B
};
signOut = new byte[]
{
0x7B ,0x02,0x00 ,0x10 ,
0x31 ,0x33 ,0x39 ,0x30 ,0x30 ,0x30 ,0x30 ,0x30 ,0x30 ,0x30 ,0x30 ,
0x7B
};
在这里新一个方法SendData(byte[] data)用于发送数据
private void SendData(byte[] data)
{
Socket _socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint _ip = new IPEndPoint(IPAddress.Parse("192.168.128.222"), 5002);
//设置socket是否允许发送广播
_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
//发包
_socket.SendTo(data, _ip);
_socket.Close();
}
登录:
SendData(singOn);
注销
SendData(signOut);
发送数据相同方法实现
浙公网安备 33010602011771号