找回密码
 注册
关于网站域名变更的通知
查看: 289|回复: 1
打印 上一主题 下一主题

锂离子电池组监控系统研究与实现 — 上位机程序设计

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-7-18 07:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
锂离子电池组监控系统研究与实现 — 上位机程序设计
8 s' w* c2 B9 n' w( M3 R3 O" `+ z
4 ?) \% X& O) O7 j
% k: T- |8 l! W6 z& v
在锂离子电池监控系统中,除了下位机单片机系统电路板及其程序设计外,还需要上位机程序对锂离子电池系统的进行各种监控管理设置。根据系统要求,上位机程序的主要功能有以下几个:
1.接收并显示下位机采集的各路数据信息,包含16路锂电池电压、主回路充放电电流、4路温度、电量等数据信息;
2.设置下位机工作时需要配置的系统参数;
3.校正下位机上传的各路数据;
4.根据需要保存下位机上传的数据。- B" X, d6 r7 v6 I( q0 A! j

; N5 ~. k: ^' e3 f9 A- F' p该上位机程序采用VC++6.0编程工具进行程序设计,本章对上位机程序的设计思想和内容进行了描述。) z7 g: ?  A4 E$ ^3 w2 t$ c
! b# ^9 T" Y5 `, R
5.1上位机程序
开发平台及相关技术上位机程序采用非常流行的可视化编程工具VC++6.0进行开发,为完成相应的显示和设置功能,程序采用了许多VC++6.0自带的控件,同时应用了多线程编程技术。: w4 e1 q. o, _# Y' v5 d& o* }

' U4 K! ~8 q& Z6 n3 _4 a! u2 u2 ~  f5.1.1 VC++6.0简介
VC++6.0是微软公司开发的编程平台,具有强大的功能。本软件是基于Windows系统开发的,编程语言采用的是C++语言,并且微软给该软件提供了功能强大的MFC(Microsoft Foundation Class)类库。MFC中封装了大部分Windows API函数和Windows控件,它包含的功能涉及到整个Windows操作系统。MFC不仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件,这样,开发人员不必从头设计创建和管理一个标准Windows应用程序所需的程序,而是从一个比较高的起点编程,故节省了大量的时间。另外,它提供了大量的代码,指导用户编程时实现某些技术和功能。因此,使用VC++可以使程序员更加方便的进行应用程序开发。6 [" t8 B2 x# Y. @

; X' i8 ^6 f7 y0 f# E5.1.2相关控件介绍
系统使用了Edit Box控件、Static Text控件、Button控件、Group Box控件、Check Box控件、Combo Box控件、Tab Control控件和MSComm控件八个控件,本部分对这些控件进行简单介绍。
7 p/ b, `: Y- i$ l; D8 G! D% _0 C8 d3 l  O) _7 c; U. D+ O' \; x
1.Edit Box控件CEdit类提供了Windows编辑控件中的功能。编辑控件是一个子窗口矩形,用户可以向其中输入文本。可以通过对话模板或直接从代码中创建一个编辑控件。
5 J9 ?% G  [. Y; j2 O4 }4 C' R6 K# h. N
在两种情形下,首先调用CEdit构造程序构造CEdit对象,再调用Create成员函数创建Windows编辑控件并将其与CEdit对象连接。" [0 I& q. Q, z6 W
+ q1 N' n# ?1 \* b; U  A
2.Static Text控件CStatic类提供了一个Windows静态控件的性能。一个静态控件用来显示一个文本字符串、框、矩形、图标、光标、位图或增强的图元文件。它可以被用来作为标签、框或用来分隔其它的控件。一个静态控件不接收输入,也不提供输出;但是,如果它是用SS_NOTIFY风格创建的,则它可以通知其父有关设备点击的消息。; n7 U/ N" {4 v2 n% A
  |4 i0 a3 S& C2 S3 i' R& r6 s
3.Button控件类CButton提供了对Windows按钮控件的操作。按钮控件是一个小的矩形子窗口,可以通过单击选中(按下)或不选中。按钮可以单独使用,也可以成组使用,它还可以具有文本标题。在用户单击它的时候,按钮通常要改变显示外观。
$ h2 J2 P: d% ^/ E. U' Q2 t5 w$ {
* i$ \  J3 V( i典型的按钮控件有:复选框、单选钮和下压式按钮(push button)。一个CButton对象可以是它们中的一种,这由它的按钮风格和成员函数Create的初始化决定。* P' X6 _8 G2 t

* F5 S$ W. H  X4.Check Box控件CheckBox控件就是我们一般所说的复选框,通常用于某选项的打开或关闭。% S0 ?1 R; I" x1 q6 Z/ _. v

0 z$ n9 M7 z" C4 C: {; i: ~大多数应用程序的“设置”对话框内均有此控件。我们看到的可以打勾的就是CheckBox.该控件表明一个特定的状态(即选项)是选定(on,值为1)还是清除(off,值为0)。在应用程序中使用该控件为用户提供“True/False”或“yes/no”的选择。因为CheckBox彼此独立工作,所以用户可以同时选择任意多个CheckBox,进行选项组合。# H, F! u2 S, N3 J) a6 K
9 Q8 H; |: B# I# z2 u! O& x3 e( j
5.Combo Box控件类CCombo Box封装了Windows组合框。组合框由一个列表框和一个静态控件(或编辑控件)组成。列表框部分可以是一直显示的,也可以是隐藏的,在用户单击编辑控件边上的按钮(下拉箭头)时下拉该列表框。列表框中当前选中的项(如果有的话)显示在静态控件或编辑控件中。如果组合框带有下拉风格,则当用户在编辑框中输入列表项的开始字符时,对应项(如果有的话)中的第一个将会加亮显示。
* s# I5 r6 U, M4 g
; l) r/ V+ Z4 R+ O3 F可以从对话框模板中建立一个CComboBox对象,也可以直接在代码中创建。
4 f+ K4 o4 E7 W
- p- ~* Y9 S* s  x2 b0 e. N无论采用哪种方法,都要先调用CComboBox的构造函数构造一个CComboBox对象,然后调用成员函数Create创建控件并在CComboBox对象上应用它。
# X+ \* C) p% I" T+ U  g! r& F  x6 ]4 A4 i$ @! p% \
消息映射入口的格式如下:
ON_Notification( id,membeRFxn ), o4 ?# t( Z. `) @) [+ F. f) ^% a4 h
5 a# g- r8 @; ?9 J9 g& K
其中id指定了发送通知的组合框控件的子窗口ID,而memberFxn是用于处理该通知的父成员函数的名字。
; c* X! m: _  |; E- i" @0 @2 L; A. F0 T+ r# J3 P0 L! F) Z
父窗口的函数原型的格式如下:
afx_msg void memberFxn( );
6.Tab Control控件一个“标签控件”类似于一个笔记本中的分隔器,或一个文件柜上的标签。通过使用标签控件,应用程序可以将一个窗口或对话框的相同区域定义为多个页面。
! D( d9 }" g1 q  M, ~! P2 m
& C  P7 c. u: ~2 m" O  c( ?每一页包含了一套信息或一组控件,当用户选择了相应的标签时应用程序就会显示相应的信息或控件。一种特殊类型的标签控件把标签显示得像按钮一样。点击一个按钮将立即执行一条命令而不是显示一个页。8 _# E, ?; J- M6 O+ L$ O% {$ b) ?

: L4 U( i+ r* O% ~- M: s8 oCTabCtrl类提供了Windows通用标签控件的性能。这个控件(也就是CTabCtrl类)只对运行在Windows 95和Windows NT 3.51或更新版本下的程序来说是可用的。5 J4 ], o7 ~, T5 o$ W
4 e& Z7 y- {# [
7.Group Box控件Group Box控件本质上确实是class CStatic的一个实例化对象。在一个对话框上布置好一个Group Box控件后,默认ID为IDC_STATIC,这时候是无法在代码里动态地控制它的隐藏/显示属性。必须给它一个新的ID号,比如IDC_GROUPBOX1,最后再给它关联一个CStatic控件变量(这个你应该自己会吧),然后就可以在必要时候(另一个控件被选择)调用ModifyStyle(0,SWP_HIDEWINDOW/*SWP_SHOWWINDOW*/);实现Group Box的隐藏/显示状态的动态切换。8 M1 E  Z' M2 x* p5 l9 p
( ^) g- Q6 ~' U- N4 n& t5 i
8. MSComm控件Visual C++为我们提供了一种好用的ActiveX控件Microsoft Communications4 @" z3 ]3 m6 l- x& T, G7 e/ c
0 t8 h8 d4 n7 Y- c, I5 O
Control(即MSComm)来支持应用程序对串口的访问,在应用程序中插入MSComm控件后就可以较为方便地实现对通过计算机串口收发数据。
2 D6 X$ Q3 K- }. ^' v( Z& Z$ P: V
使用VC++提供的串行通信控件MSComm进行编程,首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project ——>Add to Project——> Components and Control插入即可,再将该控件从工具箱中拉到对话框中。此时,你只需要关心控件提供的对Windows通讯驱动程序的API函数的接口。换句话说,只需要设置和监视MSComm控件的属性和事件。
. Y6 Z' k8 ]/ a5 F, t7 q' e2 l, u7 [9 _& t$ O1 L
在ClassWizard中为新创建的通信控件定义成员对象(CMSComm m_Serial),通过该对象便可以对串口属性进行设置,MSComm控件共有27个属性,这里只介绍其中几个常用属性:CommPort设置并返回通讯端口号,缺省为COM1. Settings以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
; R" q* |: j0 m2 C7 C% q
  P$ g6 r' \2 R( l: ^- y' vPortOpen设置并返回通讯端口的状态,也可以打开和关闭端口。8 [: p- G* A" b+ h# K  C" ?

; m0 c2 g( `" B% D6 q! v% M8 ~Input从接收缓冲区返回和删除字符。
# e& C0 u# _3 b: h" p. u
$ T0 r2 @' \% l! UOutput向发送缓冲区写一个字符串。8 L7 i$ {- i( e" l' K* [0 u
& L* V$ O5 j% m# n4 Q6 W0 u
InputLen设置每次读入的字符个数,缺省值为0,表明读取接收缓冲区中的全部内容。$ X9 u/ n4 V  D% |% C
) A3 q4 `' N* r
InBufferCount返回接收缓冲区中已接收到的字符数,将其置0可以清除接收缓冲区。
8 |7 @* ~+ f1 ]# C/ l" Z& |( e
, G4 A% ?- {$ W6 LInputMode定义Input属性获取数据的方式(为0:文本方式;为1:二进制方式)。1 ]3 p& \6 ^3 x
" x3 R, [- n/ c1 h7 g" ]# G
RThreshold和SThreshold属性,表示在OnComm事件发生之前,接收缓冲区或发送缓冲区中可以接收的字符数。
1 A. o  L( f$ D- A1 W# c- [1 l$ @0 g
2 @% q1 B# @0 K+ V/ a0 P打开所需串口后,需要考虑串口通信的时机。在接收或发送数据过程中,可能需要监视并响应一些事件和错误,所以事件驱动是处理串行端口交互作用的一种非常有效的方法。使用OnComm事件和CommEvent属性捕捉并检查通讯事件和错误的值。发生通讯事件或错误时,将触发OnComm事件,CommEvent属性的值将被改变,应用程序检查CommEvent属性值并作出相应的反应。
8 V7 G- v6 U9 I0 R1 P
8 d7 w( j5 e  L% j5 D* J9 x) w5.2上位机程序方案
上位机程序主要完成数据显示、参数设置、存储器读取、数据校正等功能。
1 \2 C. n: R3 n7 z7 B( V- S2 @  F# V
! j7 G. g' a# u$ x0 A$ |$ O( r" b该程序通过串口与下位机板进行通信,将需要显示的信息和设置的参数等信息进行传输。
- `3 N/ w9 N% f; N
( d1 \+ T4 |4 K上位机程序功能框图如下图5.1所示。- Q0 M  G: \' n7 q8 d
7 N# U; m# r# J$ Y+ T% d, M1 ^' z

# e* I( M2 w1 R) I1 |, R/ j' i, F7 i9 \
图中下位机通过串口与上位机进行数据通信。根据通信协议,将双方传输的数据进行转换,得到对应的数值,在进行相应的操作。. S& q! C, B+ ]# S- f3 q
9 W5 m5 h  `7 |0 u0 i" `
下面分别对数据显示、参数设置、数据保存、数据校正等功能进行如下分析。% D7 T# M- T# ?3 n
2 d- r3 |% v: W$ C! U
5.2.1数据显示
上位机程序的数据显示功能直接放置在主程序界面上,如下图5.2所示。
5 V- w5 y  j! k2 f7 |  d. f* o4 f0 p: G  u$ S

* T! R* Q. T% F0 Q3 y* l; Q7 ^. L3 e/ B" b& A5 @) ^
主界面主要包含显示锂电池电压、温度、电流、电量、状态等信息的文本控件和参数设置、数据校正、存储器读写的按钮以及保存数据的选项,另外还可对串口号进行选择。& e+ W  j+ |% _& ]9 g! Q7 x) [

2 i8 s& E2 k0 \$ t: L5.2.2参数设置
参数设置子窗口如图5.3所示。由于需要设置的参数较多,所以在参数设置子窗口中将所有参数分为系统参数、电流参数、电压参数、温度参数、均衡参数、电量参数和版本参数共七类,在一个复选页中进行显示和设置。2 D2 o; U& M8 i8 j) i

0 T) X( {( R& f( b6 ~) D4 I+ ?8 w) e5 q, X
* C( E6 n" B5 i& \
系统参数包含电池类型、电池数、电池内阻、数据采样频率、睡眠模式使能、睡眠模式唤醒时间、用户权限、系统密码等。8 h! v$ t% u, c' C
3 t8 Z8 r6 Q3 T8 X9 Q1 o
电流参数包含充电过载电流、放电过载电流、判断过载电流持续时间、短路电流、放电过流恢复时间、充电过流恢复时间、短路恢复时间等。9 X' h" a3 a  j0 E
# y# y* ^% N5 [! g  `' p( K
电压参数包含过充电压、释放过充电压、过放电压、释放过放电压、最大不平衡电压、判断过充过放电压持续时间等。: x& D9 ]7 g9 Q; d) I6 p

* W9 [2 g$ |) ]4 |6 X温度参数包含外部温度通道1使能、外部温度通道2使能、判断温度超范围持续时间、可承受外部最高温度、释放可承受外部最高温度、可承受外部最低温度、释放可承受外部最低温度、可承受内部最高温度、释放可承受内部最高温度、可承受内部最低温度、释放可承受内部最低温度等。
4 i0 U" _3 [) S
! W* u; V' n2 D- y均衡参数包含均衡使能、每组均衡电池数、均衡模式、均衡开始电压、均衡压差等。7 ^- @: t& i* @" B+ X5 o4 w0 D

: G; Y4 F; p! I2 _( ~电量测量参数包括电量测量电压一、测量电压二、测量电压三、测量电压四、测量电压五等。
$ E  u1 ], }3 r) ?9 @
+ ^' x$ ~9 g/ }% p6 ?. ?! e% Y3 M4 S另外,还有版本版本号、工厂名、设备编号等。
, l; N* A- `/ I+ X6 O& m
+ m5 \) e  {+ e4 h# B% J5.2.3数据校正
数据校正子窗口如图5.4所示。
+ }3 C9 p+ m  J4 O, V' H
  t4 Q" i. W8 l- R6 z% g+ i  H7 v5 E' R' ?
4 V  m' j7 M0 X9 _1 v/ [1 V" r
校正采用线性修复法,即利用公式:A=K*S+B进行校正,其中A表示实际测量值,S表示通过系统获取的原始采样值,K为修正系数,B为修正基址。3 W6 @; \0 I  Z7 k1 ?: G; q
: P6 L( s* s% Z2 W: U+ ^9 T
校正过程中对,对每一路采样电路的采样值和实测值进行若干组采集。根据上述公式,每两组组成一个二元一次方程,计算出若干个修正系数和修正基址并求平均值,获得本路采样电路的修正系数和修正基址。6 j- Q3 N" f9 R. i

* U2 P4 R- g4 l在上位机软件中,接收下位机传送过来的21路信号的实测值和采样值。通过两次接收,可分别得到21路采样信号的两组实测值和采样值,按上述计算方法分别计算出各路采样电路的修正系数和修正基址,按通信协议发送给下位机。7 C4 h+ O' z5 l( L$ p1 @; N
! p; ~: \! d( C$ i6 {5 y
5.2.4存储器读写
存储器读写子窗口如图5.5所示。) i/ `  V, c& \
$ y; s$ C  E; c" A3 _8 }

# d- e/ N' H& Z7 U
/ P: \3 w( J! m. f3 ~+ D5 e在存储器读写子窗口中,有读存储器、写存储器、存储器擦除三个按钮,可分别读出指定存储单元的数据、将指定数据写入指定单元、擦除存储器所有单元。
; n- \: o6 t6 m8 [9 B, ~( R: V3 c$ D
5.3上位机程序测试
' u+ W/ z: U" q( S4 V  ?5 O$ A" u# V
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-5 21:52 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表