充电桩的三种网络接入方案介绍

充电桩的三种网络接入方案介绍

博客
1、充电桩网络化实现功能 1)IC刷卡系统联网、安全加密; 2)对充电桩工作环境(温度、湿度等)、工作状态检测、警报,远程维护,监控; 3)接充电站打印机,打印消费凭据; 4)动端查询当下可用充电桩位置; 5)LED远程广告投放功能; 6)作为WiFi基站,有助于提高无线覆盖面积,方便用户等待无聊时上网。   2、三种实现方案 方案一:每个充电桩通过RJ45或者光纤分别接入以太网,连接充电站管理中心,再接入互联网管理中心和数据库。   优点:有线以太网主要优点是数据传输可靠、网络容量大; 缺点:布线复杂、扩展性差、施工成本高、灵活性差。 方案二:充电站内部通过工业串行总线(RS485/RS232/CAN)接入集中器,再由集中器通过RJ45或者光纤接入以太网或移动数据接入服务连接服务管理平台和数据库。   优点:数据传输可靠,设计简单; 缺点:布网复杂、扩展性差、施工成本高、灵活性差、通信容量低。 方案三:无线方式 无线方式主要采用移动运营商的移动数据接入业务,如:GRPS、EVDO、CDMA等。 优点:无需复杂的布线、灵活性强、施工成本低; 缺点:采用移动运营商的移动数据业务需要将电动汽车充电桩这一电网内部设备接入移动运营商的移动数据网络,需要支付昂贵的月租和年费,随着充电桩数量的增加费用将越来越大;同时数据的安全性和网络的可靠性都受到移动运营商的限制,不利于设备的安全运行;其次,移动运营商的移动接入带宽属共享带宽,当局部区域有大量设备接入时,其接入的可靠性和每个用户的平均带宽会恶化,不利于充电桩群的密集接入、大数据量的数据传输。
Read More

Matrixtsl有趣的电子积木网络连接板

博客
    项目描述   电子积木网络板 by matrixtsl   Matrixtsl 开发了一系列电子积木板,同时提供多种单片机:PIC,AVR及ARM搭配使用。其中一款电子积木板,使用了WIZnet产品 W5100 和 WizFi610提供网络连接。 另外,电子积木可以使用IDE开发,将使用流程图的方法来代替编程语言。   电子积木网络模块 EBlock 网络模块 – WIZ810MJ or NM7010 基于WIZnet -W5100全硬件TCP/IP协议栈芯片,这个电子积木板为现存的微处理器增加了网络功能,免去了开发软件TCP/IP协议栈的困扰。同时,以太网提供高达10/100的网络连接,以及大量协议包括 UDP,IP,ARP,ICMP,DHCP,ARP,DLC以及MAC。单元微处理器接口使用I2C串口通信。板子上的跳线可以允许多个以太网模块连接I2C接口。用于电子积木的 Flowcode的宏,已在Flowcode专业版中提供。 EBlock 网络模块 – WizFi610     无线局域网板提供标准无线网络接入。板载TCP/IP协议栈使单片机免去了TCP/IP协议栈开发的需要,实现了简易通信。这个板子可以在网络中作为客户端或者服务器,这个意味着电子积木也可以提供无线网络。板子同时支持html和JavaScript两种网页模式,还与无线局域网 Flowcode组件兼容。 带网络模块的电子积木 例程 下载: * http://www.matrixtsl.com/resources/getresoure.php?id=266 * http://www.matrixtsl.com/resources/getresoure.php?id=267 文档:http://www.matrixtsl.com/resources/files/datasheets/EB921-82-07.pdf 博客:http://www.matrixtsl.com/blog/internet-of-things-made-simple-flowcode-simulated-webserver-tcp-comms/ Wiki:http://www.matrixtsl.com/wiki/index.php?title=Component:_ID_9e68a715_edc2_4a98_be64_c0d02f700135 了解更多:http://http//www.matrixtsl.com
Read More

基于W5500的NetBIOS应用实例

博客
已刊登在《无线电》2月刊 一 实例背景 最近一个做智能家居的朋友面临这样的一个烦恼,他想让用户通过智能手机在家里方便地控制家居设备,又想让用户免除下载安装App的麻烦,通过浏览器直接打开设备内嵌的网页便可实现控制。但是设备的IP地址都是通过家里的路由器自动获得的,设备上又没有屏幕来显示其IP地址。问我有没有办法不输入IP地址来实现浏览器访问该设备网页的办法,就是类似DNS之类,但是无需连外网,只在家庭网络内能访问即可。 这使我想起一个古老的协议,NetBIOS(Network Basic Input/Output System)。这个在上世纪80年代由IBM开发的协议,主要用于数十台左右计算机组成的小型局域网,该协议的主要用途之一就是把计算机名称解析为相应IP地址。如果每个设备有一个固定名字,在实现了NetBIOS的前提下,用户在浏览器里输入该设备的名字,然后通过NetBIOS解析,便可实现访问该设备网页的这个功能了。而且NetBIOS占用系统资源少,在单片机上运行不成问题。于是推荐这个朋友在他的设备上实现了NetBIOS协议,解决了他的烦恼。 除了智能家居,在当下物联网时代,想必还有其他应用也会遇到类似问题,就拿手头的WIZnet-W5500评估板实现了一下NetBIOS,希望能对做网络设备开发的朋友有所帮助。在用W5500实现之前,我们还是先在PC上看一下NetBIOS到底是一个什么东西。 二 NetBIOS协议 我们知道在DOS 命令下可以通过PING主机名获得另外一台电脑的IP地址,实际上就是通过 NETBIOS进行的。在Windows操作系统中,默认情况下在安装TCP/IP协议后会自动安装NetBIOS。查看方法如下:本地连接属性的中“高级TCP/IP设置”窗口中选择“WINS”选项卡,在“NetBIOS设置”区域中就可以设置相应的NetBIOS,如图1: 图1 WINS下的NetBIOS设置 Ping主机名的第一个数据包就是NBNS(NetBIOS Name Server),协议包,它是 TCP/IP 上的 NetBIOS (NetBT) 协议族的一部分,它在基于 NetBIOS 名称访问的网络上提供主机名和地址映射方法。NBNS是动态DNS的一种,Microsoft的NBNS实现称为WINS。NetBIOS的报文类型较多、结构复杂,不同的网络环境及不同的用途中,会使用不同报文,可用端口进行区分,WINS协议中,NetBIOS名字报文、数据报报文及会话报文分别使用TCP 137、138和139端口。 NetBIOS 数据报有很多不同格式,主要取决于服务和信息类型,以及用以传送 NetBIOS 数据报的传输协议。 NetBIOS 协议架构可见图2,其中包含三种基本服务: NAME、SESSION 和 DATAGRAM ,其中NAME所用协议就是NBNS协议。  图2:NetBIOS协议架构 下面看一下WINS协议使用的报文NETBIOS的名字报文(NAME)的总体格式如表1: 表1 NetBIOS名字报文格式 事物ID(2bytes) 通用标志(2bytes) 问题记录个数(2bytes) 回答记录个数(2bytes) 权威记录个数(2bytes) 附加记录个数(2bytes) 问题记录(若干字节) 回答记录(若干字节) 权威记录(若干字节) 附加记录(若干字节)   报文的前12字节总称为NETBIOS名字报文的首部,通过首部我们可以判断出是否为名字查询的报文。 NETBIOS名字报文中最常见的是携带问题记录的报文,问题记录的格式如表2: 表2 NetBIOS名字报文中问题记录格式 问题名称(若干字节) 问题类型(2 bytes) 问题类别(2bytes)   通过携带问题记录的报文,我们可以得到要查询的名字字符,如果和本机名相符,就发送报文响应,响应中带有IP地址,发送广播的主机就会得到该IP地址。 三 W5500EVB实现NETBIOS名字报文解析 了解了NETBIOS协议之后,下面就让我们通过W5500EVB做一个嵌入NetBIOS的简单实验。 实验目的:通过在DOS下ping该设备名“WIZNRTW5500”,可以得到开发板的IP地址。 硬件环境 单片机:STM32F103RC,256K字节Flash,48K字节SRAM,2K字节EEPROM 以太网控制器:W5500,SPI接口与单片机相连 电源:USB供电 硬件外设:板载LED 开发工具: Keil 测试软件:串口调试助手,网络调试助手看代码之前,我们还是先来了解一下整个的程序流程,如图3所示整个程序采用查询方式,通过DHCP子程序成功获取IP后可执行NBNS服务。同时W5500EVB设置成HTTP Server,可以接收,并处理TCP Client发来的数据   图3:主程序流程图 本文主要讨论如何在单片机上实现NETBIOS名字解析服务,DHCP和TCP Server相关部分子程序在此不再详细介绍,根据NETBIOS名字解析服务子程序流程图(如图4示),我们可以得知当查询到137端口收到网络的UDP数据包时,读取数据包并进行判断是否为NETBIOS名字报文,如果是就将解析出的名字与本机名比较,如果一致就回复报文。 图4:NBNS程序流程图 在此贴出NETBIOS部分代码,要获取完整代码,请到http://pan.baidu.com/s/1nt9MQKh上进行下载。 void do_netbios(void) {   unsigned char state;   unsigned int len; 1  state = getSn_SR(NETBIOS_SOCK);   switch(state)   {   case SOCK_UDP: 2    if((len=getSn_RX_RSR(NETBIOS_SOCK))>0)     {       unsigned char rem_ip_addr[4];       uint16 rem_udp_port; 3     char netbios_name[NETBIOS_NAME_LEN+1]; 4     NETBIOS_HDR* netbios_hdr; 5     NETBIOS_NAME_HDR* netbios_name_hdr; 6      len=recvfrom(NETBIOS_SOCK,(unsignedchar*)&netbios_rx_buf,len,rem_ip_addr,&rem_udp_port);       printf("rem_ip_addr=%d.%d.%d.%d:%d\r\n",rem_ip_addr[0],rem_ip_addr[1],rem_ip_addr[2],rem_ip_addr[3],rem_udp_port); 7      netbios_hdr =…
Read More