当前位置: 首页 > 科技观察

物联网平台Modbus协议采样命令下发并发性能测试方法

时间:2023-03-20 23:47:28 科技观察

Part01采样命令Modbus协议也是物联网平台上流行的协议之一。采样命令是Modbus协议的主要功能。主要流程是设备在平台上设置周期采样命令,平台会周期性主动向在线设备发送采样命令。我们在为雄安搭建物联网平台时,恰好平台具备Modbus能力,所以平台的交付需要测试Modbus采样命令的并发性。物联网平台下发Modbus协议采样命令的流程如下:创建一个设备,在平台上为该设备设置采样命令:采样周期、功能号、从机地址、数据长度等信息。设备上线后,平台根据采样周期周期性向设备发送采样命令。设备接收到采样命令后,将寄存器数据返回给平台,并保存采样数据。通常我们做性能测试的时候,都是客户端发起服务请求,响应客户端,而Modbus的采样命令正好相反。我们过去使用的性能测试工具是行不通的。如何测试服务采样命令的并发度?Part02测试方法为了测试物联网平台Modbus协议采样命令的并发性能,我们开发了高并发采样命令并发性能测试方法。该方法采用异步IO方式,批量模拟设备连接服务器,接收采样命令和响应命令,统计每秒接收的命令数。技术实现细节如下:1.通过API批量创建Modbus设备,为每个设备创建n个采样命令。即不需要提前创建设备和设备采样命令;2、批量初始化设备的socket连接,设置socket为非阻塞,并生成socket列表。使用异步IO减少多线程线程切换带来的资源消耗,提高CPU利用率;3、同时启动以下三个线程:①批量设备注册线程:批量上报注册消息,设备注册完成后线程退出;②采样命令数统计线程:所有设备注册成功后,每秒统计一次最近1秒内接收到的采样命令数;③采样命令接收处理线程:使用select批量管理设备socket列表,接收并立即响应采样命令,并实时记录采样命令数量。select模型是非阻塞IO,可以在一定程度上减少服务器的并发线程数,从而提高CPU执行效率;Python代码示例(片段)4.根据运行设备数和平均每秒接收到的采样命令数判断平台是否满足当前采样命令的处理性能。在满足性能的情况下,预期的结果是每秒接收的预期命令数≈设备数*n,逐渐增加设备数。当预期的每秒接收命令数>设备数*n时,服务已经达到瓶颈。那么最终测试服务的采样命令的最大并发数就是满足预期结果时的最大连接设备数*n。这种测试方式的优点:1、无需为创建设备和设备添加单独的采样命令,简化了Modbus协议采样命令性能测试的准备工作;2.设备端统计并发,服务端不增加任何统计逻辑;3、使用模拟设备,无需准备大量真实设备,降低了Modbus协议采样命令性能测试的成本;4、通过非阻塞IO,显着提升Modbus协议采样命令并发性能测试的设备响应速度,解决Modbus协议采样命令并发性能问题。测试高并发状态下的资源浪费问题;5、设备响应速度的提升,可以有效提高Modbus协议采样命令并发性能测试的准确性。配合我们这样写的Python代码,单个脚本可以支持1秒内10000+条命令的处理能力。在雄安物联网平台的性能测试中发挥了很好的作用,同时运行10个脚本,完成了雄安平台上10万条并发Modbus协议采样命令的测试。