将tcp/IP点对点长连接改为udp广播开发记录

将tcp/IP点对点长连接改为udp广播,修改原因:tcp/IP长连接会对本地服务器带来压力

udp广播分为广播、组播、单播。

 

现在分析采用何种通信方式

控制没有采用指定的协议方式,比如http协议,仅是发送数据包所以接受到数据后都会做解析包处理。如果采用广播的形式,势必得在包中指定设备编号,控制器会一直处理接收的数据,所以这种方式舍弃。

控制器中没有业务上的不一样,所以也不采用组播的形式

最后只能采用单播的形式,指定IP指定端口,这样控制器处理的数据比较少,而且也不用在数据包中对控制器进行编号。本地服务器只需轮训指定IP指定端口发送即可

所以采用udp的单播方式

 

同步问题

由于应用场合问题,得考虑画面是否同步的原因,影响同步的因素有以下几方面:

1、控制器从接收到数据到处理显示出来所用时间   

        里面有个10ms的延时,这个延时是否可以减短有待考究。预计本部分时间20ms最多了

2、服务器轮寻发送数据包的时间

       这个时间没有了解过,不过对于电脑来说,10ms也是最长时间了。

所以加起来也就30ms的延时,要求刷新率为30帧的话,已经足够了。

 

 

同步分为两种同步,

1、相邻控制器之间的时间差 

      从上面分析的,这部分顶多不到1ms,所以不用考虑

2、首尾之间的时间差

    从上面考虑,这个时间是量的问题,每个控制器从接收到数据到驱动显示,几乎时间相差不大,本地服务器轮询发送数据包时间估计不到1ms就算我给10Ms一百个控制器1000ms,估计有问题了

如果同步有问题,解决同步的方法

控制器在上电和半夜的时候进行时间查询,查询互联网时间,进行本地时间校对, 本地开一个1ms定时器进行计时,数据包中加入何时刷新数据包的时间

不知道能不能用上,为了保险,在数据包中加入是否启动时间刷新功能

 

推力不会用到,同步的时间是精确到秒。本地要求刷新到30帧的话,差不多30ms刷新一次,30ms内不可能指定时间

数据包格式

为了可扩展,数据包增加包类型

包头		数据长度	数据类型	数据	校验位				
0XFFFFFF	0XFFFFFF	0X****			0X****				
									
									
数据类型	功能	数据							
		像素颜色	像素颜色	像素颜色	像素颜色				
0x01	全部改变数据,不刷新	0X******	0X******	……	0X******				
		位置	像素颜色	位置	像素颜色				
0X02	改变指定位置数据,不刷新	0X****	0X******	0X****	0X******				
		像素颜色							
0x03	改变所有位置颜色一样,不刷新	0X******							
		开始位置	终止位置	像素颜色	像素颜色	像素颜色	开始位置	终止位置	像素颜色
0x04	改变区间位置颜色,不刷新	0xf***	0xf***	0x******	0x******	0x******	0x0***	0x0***	0x******
									
0x05	刷新命令	可以通过广播发出来							
		像素颜色	像素颜色	像素颜色	像素颜色				
0x11	全部改变数据,并刷新	0X******	0X******	……	0X******				
		位置	像素颜色	位置	像素颜色				
0X12	改变指定位置数据,并刷新	0X****	0X******	0X****	0X******				
		像素颜色							
0x13	改变所有位置颜色一样,并刷新	0X******							
		开始位置	终止位置	像素颜色	像素颜色	像素颜色	开始位置	终止位置	像素颜色
0x14	改变区间位置颜色,并刷新	0xf***	0xf***	0x******	0x******	0x******	0x0***	0x0***	0x******

具有局部刷新,指定刷新等功能,减少数据量,添加只刷新数据和刷新数据和刷新画面功能还有单独刷新界面命令,这样通过广播发出刷新界面的命令,可以改善多个控制器画面的不同步问题。

 

 

你可能感兴趣的:(ws2813B网络控制器,stm32学习,嵌入式webserver)