本文主要是介绍山特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个,包括:输入电压和频率、输出电压和频率、负载有功功率和视在功率、电池电压和预计待机时间、电池温度、负载百分比。
使用串口抓包软件,获取数据包如下:
通过分析数据,了解到以下内容:
- 发送命令为字符串,返回数据也是字符串,没有二进制编码。
- 数据发送以\CR,也就是回车作为结束符,16进制编码0D。
- 接收数据以(开头,二进制编码28,以\CR,也就是回车作为结束符,16进制编码0D。
- 循环发送命令Q6、WA、WC、RT,再加上一个不固定的循环命令。
- 不固定的循环命令包括EB?、TD?、LM?、BM?、BO?、SL?、BV?、QP,这几个组成一个打的循环,也就是发送完上面4个命令,就发送EB?,然后再发送一次上面4个命令,发送TD?,一直循环到最后一个命令QP,然后再到EB?。
- 其中Q6为主要数据查询命令,返回的数据包含了大部分显示的内容。
循环发送命令返回的数据分析如下:
- Q6命令
返回数据为输入电压,后面两个可能是异常电压的高值和低值,也可能是保留的其他内容。然后是输入频率。输出电压,保留内容两个,输出频率。013不知道是什么数据。081.9是电池电压,是6节12V电池的总电压。保留字节不知道什么内容。39.0是温度。后面几个数字都不知道什么含义。两个00000000应该是状态字。全是零代表状态正常。后面11不知道什么含义。
- WA命令
前面不知道什么含义,010为负载百分比,00000000应该是状态码。
- WC命令
0239代表有功功率239W,0322代表视在功率322VA。
- RT命令
应该是设备信息,版本之类的数据。
不固定的循环命令,返回数据都不知道具体含义:
EB?、TD?、LM?、BM?、BO?、SL?、BV?、QP
-
数据重现
通过串口通讯软件,发送串口数据,结果如下:
分析发现以下几点内容:
- 串口发送已知的指令,返回内容格式和抓包内容格式一致。
- 命令发送,直接回车换行,带\CR\LF也可以发送成功,获得返回内容。
- 有时候会返回NAK,只需要重新发送一遍就可以正确获取到返回内容。
- 原来的文章介绍的命令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 电池电压 温度 状态码
进一步测试,发现以下内容:
- Q1到Q8指令,只有Q1、Q4、Q6指令有效。
- Q4指令除了已知的Q1内容,多了电池总电压,其他内容,361、358应该是输入的相角,其他的猜不出来什么内容。
- 无效指令返回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串口通讯协议研究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!