山特UPS串口通讯协议研究

2024-01-28 08:40

本文主要是介绍山特UPS串口通讯协议研究,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      山特中高端UPS默认配备串口通讯,可以通过串口获取UPS运行信息,通过自带电源管理软件WinPower可以实现断电远程关机功能。

        网上关于山特UPS串口通讯协议,有一些简单的文档和研究,但是通过深入了解,发现这些文档已经和现在的实际情况有较大的出入。因为山特官方没有串口通讯协议相关文档可以公开下载,所以把能获取到的信息分享一下。

目录

硬件准备

数据分析

通过分析数据,了解到以下内容:

循环发送命令返回的数据分析如下:

不固定的循环命令,返回数据都不知道具体含义:

数据重现

分析发现以下几点内容:

进一步测试,发现以下内容:

断电测试,查看故障码

总结


  • 硬件准备

        山特UPS一台,型号C3K,机身内自带12V/9AH电池6节。如果是C3KS,则不带内置电池,需要外挂电池柜。

        山特C3K,3000VA输出待机4.5分钟,2400W输出待机10.5分钟。这里VA是视在功率的单位,用S表示;W是有功功率的单位,用P表示;还有一个Var是无功功率的单位,用Q表示。有功功率P/视在功率S就是功率因数。

   串口通讯,串口配置为串口波特率2400,数据位8位,停止位1位,无校验位。需要注意串口线为直连线,不能用交叉线。现在电脑没有串口,用USB转串口默认是交叉线,所以连接后始终无反应,只能找了一台台式机,用直连线连接。

  • 数据分析

        在电脑上安装WinPower软件,运行后按照操作说明,搜索到UPS,具体UPS运行数据如下图所示。

        数据共六组10个,包括:输入电压和频率、输出电压和频率、负载有功功率和视在功率、电池电压和预计待机时间、电池温度、负载百分比。

 

        使用串口抓包软件,获取数据包如下:

 

通过分析数据,了解到以下内容:

  1. 发送命令为字符串,返回数据也是字符串,没有二进制编码。
  2. 数据发送以\CR,也就是回车作为结束符,16进制编码0D。
  3. 接收数据以(开头,二进制编码28,以\CR,也就是回车作为结束符,16进制编码0D。
  4. 循环发送命令Q6、WA、WC、RT,再加上一个不固定的循环命令。
  5. 不固定的循环命令包括EB?、TD?、LM?、BM?、BO?、SL?、BV?、QP,这几个组成一个打的循环,也就是发送完上面4个命令,就发送EB?,然后再发送一次上面4个命令,发送TD?,一直循环到最后一个命令QP,然后再到EB?。
  6. 其中Q6为主要数据查询命令,返回的数据包含了大部分显示的内容。

循环发送命令返回的数据分析如下:

  1. Q6命令

 

        返回数据为输入电压,后面两个可能是异常电压的高值和低值,也可能是保留的其他内容。然后是输入频率。输出电压,保留内容两个,输出频率。013不知道是什么数据。081.9是电池电压,是6节12V电池的总电压。保留字节不知道什么内容。39.0是温度。后面几个数字都不知道什么含义。两个00000000应该是状态字。全是零代表状态正常。后面11不知道什么含义。

  1. WA命令

 

        前面不知道什么含义,010为负载百分比,00000000应该是状态码。

  1. WC命令

 

        0239代表有功功率239W,0322代表视在功率322VA。

  1. RT命令

 

        应该是设备信息,版本之类的数据。

不固定的循环命令,返回数据都不知道具体含义:

        EB?、TD?、LM?、BM?、BO?、SL?、BV?、QP

 

 

 

  • 数据重现

        通过串口通讯软件,发送串口数据,结果如下:

 

分析发现以下几点内容:

  1. 串口发送已知的指令,返回内容格式和抓包内容格式一致。
  2. 命令发送,直接回车换行,带\CR\LF也可以发送成功,获得返回内容。
  3. 有时候会返回NAK,只需要重新发送一遍就可以正确获取到返回内容。
  4. 原来的文章介绍的命令Q1仍可以使用,返回内容和文章介绍一致。

以下是原来的分析文章拿过来的内容,即Q1指令返回内容格式:

(   MMM.M   NNN.N   PPP.P   QQQ RR.R    S.SS    TT.T    U

(   237.1   237.9   220.0   006 49.9    2.29    28.8    00000001

起始码0x28  输入电压    输入故障电压    输出电压    负载%   市电频率Hz  电池电压    温度    状态码

进一步测试,发现以下内容:

 

  1. Q1到Q8指令,只有Q1、Q4、Q6指令有效。
  2. Q4指令除了已知的Q1内容,多了电池总电压,其他内容,361、358应该是输入的相角,其他的猜不出来什么内容。
  3. 无效指令返回NAK,有时候有效指令也会返回NAK,重新查询一次就可以获取正确的返回数据。

断电测试,查看故障码

 

        Q1命令返回故障码10000000,Q6返回故障么00000088。

  • 总结

        上面的测试,虽然很多数据不知道具体含义,但是也足够用了。

        WinPower界面显示的六组10个数据,包括:输入电压和频率、输出电压和频率、负载有功功率和视在功率、电池电压和预计待机时间、电池温度、负载百分比。

        Q6命令,可以获取6个数据:输入电压和频率、输出电压和频率、电池电压、电池温度。

        WA命令,可以获取1个数据:负载百分比。

 

        WC命令,可以获取到两个数据:负载有功功率和视在功率。

 

        Q1命令,可以获取到输入电压、输出电压和频率、电池温度、负载百分比,相比Q6命令,多了负载百分比,少了输入频率和电池电压。

        Q4命令,可以获取到输入电压、输出电压和频率、电池温度、电池电压、负载百分比,相比Q6命令,多了负载百分比,少了输入频率。

 

        WinPower界面显示唯一获取不到的,是预计待机时间。通过数据推算,可能的公式如下:

(电池电压-电池终止电压7V*6节电池)*电池容量9AH/输出功率瓦

        具体数据计算为:

(81.9-7*6)*9/238 = 1.5088 = 1小时30分。

        这里取电池终止电压为7V,取值太低,所以以电池终止电压10.5V计算,实际待机时间为:

(81.9-10.5*6)*9/238 = 0.7147 = 43分。

        如果负载百分比为100%,即2400瓦,则待机时间为

(81.9-10.5*6)*9/2400 = 0.0708 = 4.25分。

        这个数值,和产品说明中的2400瓦计算不符,反而符合3000VA的说明值。

        外接电源关闭后,至少需要2分钟来确认是真正的停电,短时间无法送电。剩下2分钟根本来不及关机。所以负载为50%左右较为合理。

        如果负载百分比为50%,即1200瓦,则待机时间为

(81.9-10.5*6)*9/1200 = 0.1418 = 8.5分。

        剩余关机时间为5分多钟。

这篇关于山特UPS串口通讯协议研究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/653086

相关文章

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

Java Websocket实例【服务端与客户端实现全双工通讯】

Java Websocket实例【服务端与客户端实现全双工通讯】 现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏 览器需要不断的向服务器发出请求,然而HTTP

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

生信圆桌x生信分析平台:助力生物信息学研究的综合工具

介绍 少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 生物信息学的迅速发展催生了众多生信分析平台,这些平台通过集成各种生物信息学工具和算法,极大地简化了数据处理和分析流程,使研究人员能够更高效地从海量生物数据中提取有价值的信息。这些平台通常具备友好的用户界面和强大的计算能力,支持不同类型的生物数据分析,如基因组、转录组、蛋白质组等。

开题报告中的研究方法设计:AI能帮你做什么?

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 大家都准备开题报告了吗?研究方法部分是不是已经让你头疼到抓狂? 别急,这可是大多数人都会遇到的难题!尤其是研究方法设计这一块,选定性还是定量,怎么搞才能符合老师的要求? 每次到这儿,头脑一片空白。 好消息是,现在AI工具火得一塌糊涂,比如ChatGPT,居然能帮你在研究方法这块儿上出点主意。是不

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备

研究人员在RSA大会上演示利用恶意JPEG图片入侵企业内网

安全研究人员Marcus Murray在正在旧金山举行的RSA大会上公布了一种利用恶意JPEG图片入侵企业网络内部Windows服务器的新方法。  攻击流程及漏洞分析 最近,安全专家兼渗透测试员Marcus Murray发现了一种利用恶意JPEG图片来攻击Windows服务器的新方法,利用该方法还可以在目标网络中进行特权提升。几天前,在旧金山举行的RSA大会上,该Marcus现场展示了攻击流程,

Science Robotics 首尔国立大学研究团队推出BBEX外骨骼,实现多维力量支持!

重复性举起物体可能会对脊柱和背部肌肉造成损伤,由此引发的腰椎损伤是工业环境等工作场所中一个普遍且令人关注的问题。为了减轻这类伤害,有研究人员已经研发出在举起任务中为工人提供辅助的背部支撑装置。然而,现有的这类装置通常无法在非对称性的举重过程中提供多维度的力量支持。此外,针对整个人体脊柱的设备安全性验证也一直是一个缺失的环节。 据探索前沿科技边界,传递前沿科技成果的X-robot投稿,来自首尔国立