9SX UPS串口SHUT通讯协议

9SX UPS通讯协议

  • SHUT通讯协议
    • 串口定义
    • 同步
    • SHUT数据帧
    • UPS Commands
      • GET REPORT command
  • SHUT通讯实例

在改造中碰到了某公司的9SX UPS串口通讯。原来的控制器采用了C语言编程。因为不想费事,向原厂家询问通讯协议。前台的小姐很骄傲的说他们不提供通讯协议了,要想通讯就要采购他们公司的硬件卡,提供通讯协议。我问他们这个国际公司还要脸吗?让我鄙视。在这里把调试的经过和大家说一下,供大家参考。

SHUT通讯协议

SHUT是Sirail HID UPS Transfer的缩写。写HID的都知道,是USB设备的定义。在这里USP厂家把设备描述用在串口通讯上,实现UPS的数据通讯。

串口定义

Default settings of a UPS SHUT serial port are :

  • Baud rate : 2400
  • 8 data bits
  • No parity
  • 1 stop bit
  • Flow control : none

同步

主机可以向UPS发送同步信息,发送同步信息是发送一个, 字符<0x16, ^V>。UPS收到同步信息在200ms之内会返回一个信息。

按照2,3,和5接线,用串口助手就可以实验这个功能。发送一个0x16的16进制数字。在串口助手上就会收到一个0x16的返回信息。

SHUT数据帧

经过同步后,开始发送数据帧,并从UPS侧接收数据帧。

帧类型数据长度Data byte D0…DnChecksum-8
1 byte1 byte1-8 bytes1 byte

帧类型:

  • 0x01 <^A> ---- 请求(从主机到UPS)
  • 0x04<^D> ---- 响应(从UPS到主机)
  • 0x05<^E> ---- 通知(UPS主动通知主机)
  • 在类型字节上+0x80表示是最后一帧。

数据长度:
在这个字节中定义帧的数据长度。如果要发送5个字节的数据,设置这个字节为0x55. 允许的长度设定值为:0x11,0x22,… , 0x88。

校验和:
对发送的数据,注意,不是全部的帧,而是数据进行异或校验。
Chk = XOR XOR … XOR

UPS Commands

GET REPORT command

FieldRequest Type 1Request Type 2Report IDReport TypeInter LSBInter MSBLenght LSBLength MSB
Data0xA10x01变量0x030x000x000x080x00

这里面数据起变化的是Report ID,对应不同的报告。UPS侧接到GET REPORT命令后返回:

Byte 0:Report ID
Byte 1…n: 数据。

这里要说明的是在发送的自己中对数据进行XOR校验,但在返回的报文中,对Byte 0… Byte n进行XOR异或校验。

SHUT通讯实例

字节号事件描述Host DataUPS Data
0主机发送同步信息,字符0x160x16
1UPS回答信息,字符0x160x16
2开始SHUT帧,发送0x01,请求帧,由于是最后的帧0x840x81
3数据长度,0x88, GET REPORT命令,8个字节0x88
4GET REPORT帧,Request Type 10xA1
5GET REPORT帧,Request Type 20x01
6GET REPORT帧,Report ID0x06
7GET REPORT帧,Report type0x03
8GET REPORT帧,Interface #,总是00x00
9GET REPORT帧,Interface #,总是00x00
10GET REPORT帧,字节长度,0x080x08
11GET REPORT帧,帧字节MSB0x00
12帧校验和0xBD
13UPS回答0x06
14UPS发送RESPONSE,最后一个字节0x840x84
15UPS发送回答数据长度0x66
15UPS剩余能量0x64
16UPS剩余时间LSB,秒为单位0x)C
17UPS剩余时间,中间字节0x7B
18UPS剩余时间,中间字节0x00
19UPS剩余时间,MSB0x00
20校验和0x15

通过查询,得到:
剩余能量:100%
剩余时间 = 0x0C + SHL(0x7B, 8) = 31500 秒

通过定时发送询问帧,就可以得到当前的剩余容量和剩余时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/12890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何建立Docker私有仓库?

文章目录 docker私有仓库harborHarbor仓库部署Harbor仓库使用 docker私有仓库 Docker 私有仓库是一个用于存储和管理 Docker 镜像的私有存储库。它允许你在内部网络中创建和管理 Docker 镜像&#xff0c;并提供了更好的安全性和控制&#xff0c;因为你可以完全控制谁能够访问和…

MFC 透明窗体

如何制作透明窗体 &#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f; 使用SetLayeredWindowAttributes可以方便的制作透明窗体&#xff0c;此函数在w2k以上才支持,而且如果希望直接使用的话&#xff0c;可能需要下载最新的SDK。不过此函数在w2k的user32.dll里有实…

ansible自动化运维(一)

&#x1f618;作者简介&#xff1a;正在努力的99年公司职员。 &#x1f44a;宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。 &#x1f64f;创作不易&#xff0c;…

机器学习 day31(baseline、学习曲线)

语音识别的Jtrain、Jcv和人工误差 对于逻辑回归问题&#xff0c;Jtrain和Jcv可以用分类错误的比例&#xff0c;这一方式来代替单单只看Jtrain&#xff0c;不好区分是否高偏差。可以再计算人类识别误差&#xff0c;即人工误差&#xff0c;作为基准线来进行比较Jtrain与baselin…

JAVA Date 类型的对象,只想保留 “yyyy-MM-dd“ 格式的部分

Date 类型的对象&#xff0c;如果你只想保留 "yyyy-MM-dd" 格式的部分 1.创建一个 SimpleDateFormat 对象&#xff0c;并设置日期格式为 "yyyy-MM-dd"。 import java.text.SimpleDateFormat; import java.util.Date;Date date new Date(); SimpleDateFo…

回归预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现TCN-BiLSTM时间卷积…

Thymeleaf入门

Thymeleaf是前端开发模板&#xff0c;springboot默认支持。前端模板用法大多数是类似的jsp、thymeleaf、vue.js都有while\for\if\switch等使用&#xff0c;页面组件化等。 1.前端模板区别 jsp是前后端完全不分离的&#xff0c;jsp页面写一堆Java逻辑。 thymeleaf好处是html改…

非Spring环境 | Mybatis-Plus插入数据返回主键两种方式(注解或XML)

废话不多说&#xff0c;直接撸代码: <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace&qu…

【Spring】什么是Bean的生命周期及作用域,什么是Spring的执行流程?

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE进阶 在前面的播客中讲解了如何从Spring中存取Bean对象&#xff0c;那么本篇我们来讲解Bean对象的生命周期是什么&#xff0c;Bean对象的6种作用域分别是什么&#xff0c;都有哪些区别&#xff…

filebeat吃爆内存问题

filebeat吃了很多内存&#xff0c;直接导致了系统OOM 原因分析&#xff1a;https://developer.aliyun.com/article/241161#slide-0 官网配置文件解析&#xff1a; filebeat.reference.yml | Filebeat Reference [8.9] | Elastic 定义每个采集器在获取文件时使用的缓冲区大小…

通过STM32内部ADC将烟雾传感器发送的信号值显示在OLED上

一.CubeMX配置 首先我们在CubeMX配置ADC1, 设置一个定时器TIM2定时1s采样一次以及刷新一次OLED&#xff0c; 打开IIC用于驱动OLED显示屏。 二.程序 在Keil5中添加好oled的显示库&#xff0c;以及用来显示的函数、初始化函数、清屏函数等。在主程序中初始化oled,并将其清屏。…

linux-----用户的一些操作

1介绍 用户指的是能够正常登录Linux或Windows系统(可以理解为你租了房子&#xff0c;能够正常入驻) Linux系统则允许同一时刻多个用户同时登陆&#xff0c;登陆后相互之间操作并不影响。但是Windows不允许同一时刻多个用户登陆系统。具体介绍可以&#xff1a; 6-Linux用户管…

【RTT驱动框架分析02】-串口驱动分析

串口驱动学习 0.串口驱动的使用方法 //定义一个时间 struct rt_event system_event; #define SYS_EVENT_UART_RX_FINISH 0x00000001 /* UART receive data finish event *//*串口接收回调函数 Receive data callback function */ static rt_err_t uart_input(rt_device_t …

掌握Python的X篇_16_list的切片、len和in操作

接上篇掌握Python的X篇_15_list容器的基本使用&#xff0c;本篇进行进一步的介绍。 文章目录 1. list的索引下标可以是负数2. 切片&#xff08;slice&#xff09;2.1 切片基础知识2.2 如何“取到尽头”2.3 按照步长取元素2.4 逆序取值 3. len函数获取lis的元素个数4. in操作符…

rocketmq客户端本地日志文件过大调整配置(导致pod缓存cache过高)

现象 在使用rocketmq时&#xff0c;发现本地项目中文件越来越大&#xff0c;查找发现在/home/root/logs/rocketmqlog目录下存在大量rocketmq_client.log日志文件。 配置调整 开启slf4j日志模式&#xff0c;在项目启动项中增加-Drocketmq.client.logUseSlf4jtrue因为配置使用的…

手把手教你从0入门线段树~

1. 什么是线段树? 1.1 初探线段树 定义&#xff1a;线段树是一种用于解决区间查询问题的数据结构&#xff0c;是一种广义上的二叉搜索树。 原理&#xff1a;它将一个区间划分为多个较小的子区间&#xff0c;并为每个子区间存储一些有用的信息&#xff0c;例如最大值、最小值…

从苏宁电器到卡巴斯基(第二部)第32篇:我当高校教师的这几年 VIII

目录 我的评教排名竟然这么高 合约结束X无法转正X原来都没有编 寻求出路

如何降低TCP在局域网环境下的数据传输延迟

以Ping为例。本案例是一个测试题目&#xff0c;只有现象展示&#xff0c;不含解决方案。 ROS_Kinetic_26 使用rosserial_windows实现windows与ROS master发送与接收消息_windows 接收ros1 消息 什么是ping&#xff1f; AI&#xff1a; ping是互联网控制消息协议&#xff08;…

有关bind一些困惑解答

先看如下代码&#xff1a; double my_divide (double x, double y) {return x/y;}class A { public:void fun_3(int k,int m) {std::cout << "print: k "<< k << ", m " << m << std::endl;} }; int main() {A a;//f5的类…

【每日一题Day280】LC141环形链表 | 快慢指针 哈希表

环形链表【LC141】 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的…