java通过tcp网络转串口发送什么数据可以令有stm32f103vet6开发板的开发板上面的LED亮,新手在点亮第一盏灯,求教

哪位高手为浮躁而悲哀_基于EncEthernet的FreeModbus-TCP 在stm32上的移栽与测试_求解关于通过js异步绑定类似Treeview控件的树形菜单解决方法__脚本百事通
稍等,加载中……
^_^请注意,有可能下面的2篇文章才是您想要的内容:
哪位高手为浮躁而悲哀
基于EncEthernet的FreeModbus-TCP 在stm32上的移栽与测试
求解关于通过js异步绑定类似Treeview控件的树形菜单解决方法
哪位高手为浮躁而悲哀
谁为浮躁而悲哀?今天看了看国内的有关苹果的论坛,著名的有, Macx,chinamac,macfans,kenapple等等几个,其中热门要数黑苹果和软件(下载等)部分了,而一些小技巧方面更是热门中的热门,比如各种桌面主体,美化,黑苹果的驱动,网络电视,软件破解和下载,系统安装等等各种应用和技巧类的,都是被追捧的对象,只要你是发布这样的帖子,就被成为大师,其他人都自称学生。
比如在maiyadi里面的“ mac os x系统下运行win系统exe注册机的简单方法(升级为图片版)(Adobe CS3注册) ”有1900多回复,相比较,软件开发类的,企业应用类的等等真正体现系统价值的,都是寥寥无几。比如,maiyadi的苹果开发技术 总主题才770,帖子不满8,000, 而苹果新闻 分别是14,000和5,6000,而 苹果电脑综合讨论 分别是24,800和276,000, 软件下载是11,000和646,000。在Macx里,软件开发才不到6,000,相比较第二最不景气分板块的非编和音频(素材,手册,技巧类的)的21,600多,少了太多。还有Macfans里面的Mac编程 分别是361和少于5,600,而黑苹果技术 也有多于,而他的母论坛综述苹果软件技术 分别是:34,000和296,000,可以看出它占的比例之少。
从上面的统计看,国内用户对于技术和企业应用等系统方面深入探讨类的是应着了了,大家都忙着表面的东西,看着漂亮,软件盗版和技巧类的,这些都是花拳绣腿,就是所说的浮躁的表现。
在看看各种应用教学网站,什么Photoshop/CorelDraw的,GIF美化,网站美化的,使用Linux建立网站的,WordPress或者Office软件使用说明,什么AutoCAD,Flash,3DMax制作3D等等都是如何使用软件的教程,他们充斥各种教程网站,当然了Java,C++,C#,PHP等,而面对系统的解剖和分析,了了无几,比如你使用各种滤镜制作特效图片,为什么没有研究图像处理原理呢?为什么没人研究滤镜的开发呢?你使用他人的Flash技术,为什么没有像微软那样自己研究Silverlight一样,自己研究一个自己的解决方案呢?。难怪山寨那么多,没有自己的产品和技术,都是使用别人的技术,不想自己做自己的产品。
中国的产品有,比如会计软件和报表,那是老牌的支柱,比如输入法,可喜的是游戏产业最近起来了,其实IT也有好多可以自己发展的方向,
还有微软有Office,而中国好不容易有自己的Office软件公司,却于最近破产了,从官到民,从商到知识界,都是重小尚表,这个社会的风气就是,不让人可以静下心来做点事情,你做点事情,别人还看不起你,什么民间游资,也都是重视当前利益,极少有长远眼光的。他们的宗旨就是,挣到钱就跑。这样社会风气的结果就是,大家没有精力研究自己的核心竞争力,而使用别人技术的最终结果就是给人打工,总是跟着别人的脚步在后面小跑紧跟。当你小步块跑跟着他人开发步调的时候,不觉得自己就像深宫里的太监跟着皇帝一样的吗?
不要说中国人没有创新能力,还嘲笑他人的进步尝试。就说山寨,虽然技术上的门槛不高,但是从定位设计开发集成到生产,总是一整套的流程,有人做了,有很差的,也有好的山寨,这些产品的形成,不是那些花拳绣腿们可以比肩的,而正是他们这些没有本事的人,却嘲笑人家山寨产品,殊不知,此时的山寨,发展壮大后,很有可能就是未来的Apple和IBM,对比一下日本和韩国的发展之路,那些嘲笑他人做自己产品的人,应该为自己的花拳绣腿感到羞耻,应该为自己的行为感到无地自容。有人嘲笑QQ,没有创新,那么我问你,世界上除了苹果的系统,哪个应用层面的软件可以像QQ这样的多功能集成,你能做个网页美化的就嘲笑别人做系统开发的?这真实笑话!还有人看不起华为,我说,你使用个CSS和Photoshop就洋洋自得了,怎么不见你看看HTML5是怎么挑战你的神经的?这样的人就没有前途,一辈子做奴隶的命,眼高手低一事无成。写个英文还老错,把苹果的Mac电脑写成MAC,还为MAC好用与否争吵的你死我活,我说,你们怎么就那么的有时间扯淡呢?
看看什么PHP,RoR,P2P等等的发展,就是一些人的热情和执著,才有的现在的成果,对比那些所谓的ERP系统集成,其实就是拿别人产品来倒卖的商贩,也就是农贸市场摆摊的;看看Apple的发展,多少年的执著,留下的是一步一步的坚实的脚印;对比Nokia和RIM的失势,是不思进取者的前车之鉴。当然,每个人通过劳动获得的果实,我从来不鄙视或者看不起,那是个人双手劳动的结果,双手得到的果实都是值得尊敬的,但是我不能容忍对创新和做实事者的贬低,请我们大家不要对创造性劳动者的劳动妄加评价甚至贬低,毕竟他们的劳动更能推进社会的进步和发展。如果中国没有鼓励创造和创新的环境,那么大家终归是生活在被破坏的环境/被污染的饮食/被无情抛弃的打工仔等噩梦中,得不到他人彻底的尊重,没有独立的人格,没有人正视你,没有人care你!
现在的社会就是浮躁的社会。还有不知多少人戏弄“和谐社会‘的提法,那么我真应该说,你就值得生活在脏乱差的狗窝里,喝三氯奶粉,膨化剂,冤吗?不知道为社会贡献,反而讥讽向往社会美好的,是什么动物不如?还有脸说娱乐圈潜规则,谁让你钻尖了脑袋往里钻的,钻进去的想着潜规则别人,没钻进去的的就说潜规则黑暗,不就是一点钱闹得把自己当孙子吗,一边看着裸照兴奋,一边大骂不是人;一边大骂贪官丧尽天良,一边设计自己如何索贿受贿贪污腐-败;一边臭骂贪官玩女人,一边往妓-女裤裆下钻。到底是谁不是人?
而当,你,被这些浮躁所绑架而嘲笑他人的时候,谁应该为此悲哀?当你嘲笑其它中国人的时候,你是不是睡觉都会笑出声?
花拳绣腿最终是他人的奴隶。醒醒吧,不愿做奴隶的人们!
基于EncEthernet的FreeModbus-TCP 在stm32上的移栽与测试
基于EncEthernet的FreeModbus-TCP 在stm32上的移植与测试基于EncEthernet的FreeModbus-TCP
在stm32上的移植与测试
DanielLee_USTB
昨天移植好了modbus-RTU,今晚开始在EncEthernet上的free modbus-TCP的移植,使用的开发板为火牛开发板,stm32f103+enc28j60网络方案。主流的TCP/IP协议栈包括uIP、LwIP等,EncEthernet协议栈是一款比较简单的协议栈,由厂家提供在stm32的开发板已经移植好,所以就直接使用,其他的协议的移植方法应该都大同小异。
一、相关知识
Modbus TCP/IP数据帧除了TCP已经有的包头外,还有modbus TCP协议数据单元(ADU),包括MBAP帧头以及与RTU数据内容相同的应用数据单元(PDU),地址码除外。
其中与单纯的TCP/IP或是modbus-RTU相比,多的内容就是一个MBAP报文头,这是个什么东西,规定了什么内容呢?先来看看都包含哪些东西。
MBAP报文头定义
可以看出来,MBAP报文头主要添加了以下附加信息,为了识别是请求还是响应而设置的事务元标识符、为了判断协议类型设置的协议标识符、为了区分可变长度数据帧结束的数据帧长度、还有用于标识从站地址,与RTU不同的是,从地址放在了MBAP帧头里。
二、代码移植
前两天已经基于BARE工程移植好RTU模式,仿照相应思路实现TCP的一些函数功能,在mbtcp.c中可以发现,包括TCP初始化(xMBTCPPortInit)、TCP启动(eMBTCPStart)、TCP停止(eMBTCPStop)、TCP接收一个数据包(xMBTCPPortGetRequest)、TCP发送一个数据包(xMBTCPPortSendResponse)等,为了实现free-modbus与EncEthernet对接,在port文件夹下建立porttcp.c文件,在其中包含头文件ip_arp_udp_tcp.h。
(1) xMBTCPPortInit( ucTCPPort )
这是以太网TCP端口初始化函数,怎么觉得参数有点少呢,绑定TCP端口至少需要mac地址、ip地址以及端口地址吧,这里面只与端口有关,看来只能把他们隐藏了。
enc28j60Init(mymac);
enc28j60PhyWrite(PHLCON,0x476);
init_ip_arp_udp_tcp(mymac,myip,mywwwport);
这个几个函数作为TCP端口初始化。
(2) eMBTCPStart
其实在EncEthernet中只要进行了协议栈的初始化,就已经启动了协议栈,可直接使用。
(3) eMBTCPStop
这个函数是作为TCP端口关闭的函数,其实在modbus中调用它的是eMBClose,而在协议中没有调用eMBClose把modbus给关掉,所以这个函数不用去实现。
(4) xMBTCPPortGetRequestTCP接收一个数据包
调用enc28j60PacketReceive(BUFFER_SIZE, buf)进行判断,当然希望移植的modbus除了能处理modbus-TCP包外还能对一些正常数据包进行响应,比如arp请求、ping命令等,所以在之后添加了包头验证,当确定传入包是有数据的TCP/IP包才返回TRUE。
(5) xMBTCPPortSendResponse TCP 发送一个数据包
封装xMBTCPPortSendResponse发送写好的TCP包即可。
接口部分移植完毕,下面软件仿真一下看看modbusTCP运行的流程。
先看main函数:
eMBErrorCode
SystemInit();
SPI_Enc28j60_Init();
eStatus = eMBTCPInit(502 );
eStatus =eMBEnable(
for( ;; ){
( void)eMBPoll(
usRegInputBuf[0]++;
与modbus-RTU模式类似,只是多了对ENC28J60SPI端口的初始化函数,使用eStatus = eMBTCPInit( 502 )对TCP/IP协议栈进行初始化,进入到eMBPoll()。到这里的时候发现在
if( xMBPortEventGet(&eEvent ) == TRUE )条件一直为假,也就是事件队列没有事件,RTU模式下是定时器触发的,TCP模式下到底应该谁去触发它呢? TCP模式没有控制状态转换状态机有木有!没有东西修改队列检索事件的函数xMBPortEventGet,就不能被eMBPoll周期性地调用!这可是个大问题。
由于网络数据包这里并不是用的中断方式,所以只能有以下解决方法:在eMBTCPStart中加上一个xMBPortEventPost(EV_FRAME_RECEIVED),那么这样进入到eMBPoll的时候就会调用eMBTCPReceiveàxMBTCPPortGetRequest去读取数据包,如果是modbus-TCP包的话就把返回MB_ENOERR,再对MBAP帧头进行判断,查看协议类型,跳过MBAP帧头,传递了正确的数据包后进入EV_EXECUTE状态就会调用相应的函数进行处理,如果不是广播帧则返回处理后的TCP数据包,调用完xMBTCPPortSendResponse再发送事件xMBPortEventPost(EV_FRAME_RECEIVED)即可。如果不是想要的TCP数据包,在xMBTCPPortGetRequest里面也加入xMBPortEventPost(EV_FRAME_RECEIVED),进入下一轮查询,这样可以响应ARP、PING命令的数据包等。
测试下ping命令,设置开发板ip地址为222.28.40.18,与我的电脑接在同一个路由器上,可以看到返回的响应了!
Ping 目标板响应
三、运行流程
不过还不能高兴的太早,能测试通ping只能是TCP/IP的功能,那么接收以太网发来的modbus-TCP帧后是如何处理的呢?接下来分析一下,既然modbus-TCP发出来的数据包时TCP/IP包对modbus数据帧的封装,那么在调用peMBFrameReceiveCur(xMBTCPPortGetRequest)获得的数据包是带各种包头的,要把带以太网帧头、IP头、TCP头去掉才行,除此以外还需要实现TCP协议的三次握手功能,这还得在xMBTCPPortGetRequest中修改,主要去判断数据长度、是否为
arp请求、是否为空ip包、对ping命令做出响应、实现TCP协议的三次握手功能、以及获得modbus-TCP的MBAP帧头。
通过对代码的整体分析可以得出数据流在modbus协议栈是这样流动的,如图所示:
Freemodbus-TCP中数据流向
数据接收:
由于在eMBPoll中数据是逐渐调用的,这里不妨从数据接收的源头开始理清思路。当一帧数据到来之后,通过enc28j60PacketReceive接收到了一个完整的TCP包,包括以太网头、IP头、TCP头以及modbusTCP/IP 应用数据单元ADU。接着被xMBTCPPortGetRequest调用去掉了各种header,然后经过eMBTCPReceive(peMBFrameReceiveCur)对MBAP的分析,将指向MBAP报文头的指针传到eMBPoll:EV_FRAME_RECEIVED中。
数据处理:
在eMBPoll :EV_EXECUTE状态下调用对应的处理函数,这里以读入寄存器状态为例,调用的是eMBFuncReadInputRegister,对命令内容进行分析译码,调用eMBRegInputCB 填好请求的数据。
数据发送:
如果不是广播包的话,需要对数据进行回复,调用eMBTCPSend(peMBFrameSendCur)填好MBAP帧头的长度信息,再传给xMBTCPPortSendResponse enc28j60PacketSend填好header以及校验发送出去。
在EV_FRAME_RECEIVED接收完数据后,发现一个问题,按RTU的思路还要比较接收地址是不是给我们的地址,但是我们之前并没有制定我们自己的设备地址ucMBAddress,在xMBTCPPortInit初始化的时候只绑定了端口,就给地址设置带来不便,只有在TCP端口初始化像设定mac地址、ip地址那样设置从地址了,我们移植的原则是尽量不去修改下载的源码,一切修改都在接口的实现中完成。寻根溯源,在eMBTCPReceive看到这样的定义:
eMBTCPReceive: *pucRcvAddress =MB_TCP_PSEUDO_ADDRESS;
#defineMB_TCP_PSEUDO_ADDRESS
255 原来设备从地址居然是一个宏定义!协议栈是这样解释的:
/* Modbus TCP does not useany addresses. Fake the source address such
* that the processing partdeals with this frame.*/
原来modbus-TCP根本不需要从地址,因为已经有IP地址以及MAC地址进行了绑定!
四、通信测试
移植分析完毕,把程序下载到stm32板子中进行测试。
(1)测试工具
上位机采用TCP&UDP测试工具建立服务器
以及抓包工具wireshark
Wireshark 抓包工具
(2)测试内容
由于EncEthernet原协议TCP端口号只支持了一个字节,而modbus-TCP要用到502端口,超出了这一范围,稍加改动就可以正常与上位机连接了。
在wireshark中可以捕获到TCP协议三次握手连接以及断开过程如下图所示:
TCP三次握手建立连接
使用上位机TCP&UDP测试工具发送读取寄存器指令00
04 00 00 00 01
使用上位机发送的TCP数据帧
来读取GPIOA的数据,可是没有数据返回,先Debug一下看看板子有没有收到这个数据包,从结果看来确实收到了这个数据包,原来是数据发送有问题,修改xMBTCPPortSendResponse函数,先发送一个ACK应答包,再发送数据,就可以了!注意数据的格式。在wireshark中抓包如下图所示:
Wireshark收到的Modbus-TCP数据帧
上位机收到的modbus-TCP帧数据
更改上位机指令,使其发送读取3个寄存器(GPIOA-GPIOC)的值:
更改指令读取3个寄存器返回的数据
至此,经过了三天时间modbus-TCP模式终于能够正常通信了,真高兴!其实无论是移植EncEthernet,或是uIP、Lwip基本思路都是一样的,弄清楚数据接收以及发送的整个过程很重要,可以很好的帮助理解协议栈是如何运行的。
求解关于通过js异步绑定类似Treeview控件的树形菜单解决方法
求解关于通过js异步绑定类似Treeview控件的树形菜单很久之前做过一个项目,是通过将一个公司中的人员编制组成等数据绑定到Treeview控件上,进行显示,但是对于人数不多的中小公司,一般情况下页面显示受影响程度并不高,但是对于人数较多的公司,使用Treeview绑定数据在页面渲染时所产生的Viewstate以及页面中的HTML代码使得页面很臃肿,现在正在想办法进行优化,当然前提是脱离调微软的控件,通过js在页面中生产HTML代码,
在csdn里看到sallay的一篇名为《利用Ajax实现树的动态加载》的文章中用到的方法,对本人来说很实用
http://blog.csdn.net/sallay/article/details/2985204
想要实现的效果和下面的截图类似
目前想找一些更灵活的方法,大家 有什么推荐么
PS:本人才疏学浅,对自己编写控件不在行;希望大家推荐一些通过好的绑定树形下拉菜单的方法,或者是推荐一些你曾经用过的且效率不错的UI(例如 ligerui、extjs等,当然我没有测试过它们的效率)
------解决方案--------------------easyui jquery tree------解决方案--------------------记得js有treeview控件,自己找个去吧
如果您想提高自己的技术水平,欢迎加入本站官方1号QQ群:&&,&&2号QQ群:,在群里结识技术精英和交流技术^_^
本站联系邮箱:君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于STM32的UART-WiFi模块的设计与实现
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口}

我要回帖

更多关于 stm32f103rct6开发板 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信