这两天花了一点时间,把基于esp8266的内置编程网页的简易PLC一体机改为基于w5500可以通过网页连接的设备。
目的在于考虑到有一些场合,可能2.4G的wifi连接不稳定,需要通过有线或者是5.8G的wifi连接。
内置编程网页的有线连接的PLC的一体机的成功研发使得PLC的应用覆盖了该使用场景。
将esp8266上采用freertos操作系统的tcp client和tcp server以及http server,web网页前端等移植到stm32f103RET6处理器上,并且纯裸奔未使用操作系统,还是比较考验软件设计的功底。
难度主要在于,
1) 基于esp8266的PLC相当于有两核在同时运行,一核处理tcp/ip通信以及http协议,而另一核则专门处理plc逻辑。
而采用w5500开发,虽然w5500实现在tcp/ip协议栈,但是mcu仍然需要处理tcp client以及tcp server的socket对接以及管理,同时需要处理http协议栈,以及网页前端的管理。
所以需要充分使用包括uart 以及spi dma在内的硬件资源,将其性能发挥到极致。
2)考虑到空间和效率问题,不能再使用freertos操作系统提供的一些库函数,特别是字符串处理函数,需要完全自己重写,所幸我自己整理了一套适用于MCU的函数库,可直接使用,省去了不少时间。
3) 连接的并发处理,设计了几级缓存:tcp client以及tcp server的接收缓存,http协议处理缓存,tcp client以及tcp server的发送缓存。
3) 网页的下载和存储空间的安排,512KByte的ROM空间,低256K用于存储bootloader, 用户程序、固件升级的备份、PLC程序以及用户配置数据,前256Kbyte用于存储编程网页,在工厂生产和调试时通过st utility的命令行ST-LINK_CLI -P page.bin 0x8040000将网页烧写至mcu,对于用户端的升级,则增加远程下载的软件处理逻辑,并修改下载软件,使得用户可以通过专用软件远程升级网页。
在移植完代码并做了一系统改进之后,修改visual studio开发的测试软件,启动3个客户端同时以几秒一次的间隔访问tcp server,测试了几天几夜,未发现有中断的情况。
用浏览器打开网页,访问速度达到了与esp8266的一样的顺畅爽滑。