我是刚刚开始做驱动开发的
公司交给我一个电源驱动的说明说
通信电源集中监控通讯协议
一、 监控PC机命令格式:
短命令格式:系统编号+回车符+命令内容+回车符+结束符
长命令格式:系统编号+回车符+命令内容+回车符+数据+
回车符+结束符
1. 设备编号:D** 其中** 为ASCⅡ码。**为01—99
2. 回车符: d (二进制数)
3.结束符: 4 (二进制数)
二、 监控PC机命令内容:
1. 查询命令:短命令格式
POL 系统查询,查询系统数据及系统状态,包括故障状态。
POL0 查询机桂1—机桂8整流器的状态,整流器电流。
POL1 查询电池状态。
POL2 查询直流分路状态。
2. 系统参数设置命令:长命令格式
1) ECT: 设均充时间: ECT/XX/
2) ECP: 设均充周期: ECP/XX/
3) EFC: 均浮转换电流: EFC/XXXX/(带有符号)
4) FCV: 设浮充电压: FCV/XX.X/
5) ECV: 设均充电压: ECV/XX.X/
6) LVV: 欠压值: LVV/XX.X/
7) OVV: 过压值: OVV/XX.X/
8) TPF: 温度系数: TPF/XXXX/
9) TPR: 参考温度: TPR/XX.X/
10) CCL: 设置充电限流值: CCL/XXXX/(带有符号)
其中参数均为ASCⅡ码。
8.系统控制命令: 短命令格式
1) BAT1: 启动电池实验: BAT1/
2) BAT0: 关闭电池实验: BAT0/
3) ECH1: 启动均充: ECH1/
4) ECH0: 关均充: ECH0/
5) ONR: 系统开机: ONR/
6) OFF: 系统关机: OFF/
7) ONS: 单个模块开机 格式为ONS+机柜号+模块号+odh+04
8) OFS: 单个模块关机 格式为OFS+机柜号+模块号+odh+04
三、 系统应答命令格式:
短命令格式: 系统编号+回车符+状态标示符+回车符+结束符
长命令格式: 系统编号+回车符+数据标识符+回车符+数据+回车符
+结束符
1.设备编号D** 其中**为ASCⅡ码, **为01—99
2.回车符: d (二进制数)
3.结束符: 4 (二进制数)
四、 数据和状态标示符:
长命令格式:
1) AVU、AVW、AVV:三相电压
UNI、VNI、WNI:三相电压
2) PW1: 市电电压1
PW2: 市电电压2
GNR: 油机电压
3) ECT: 均充时间: ECT/XXX/
ECP: 均充周期: ECP/XX/
CCL: 充电限流值: CCL/XXXX/(带有符号)
4) EFC: 均浮转换电流: EFC/XXXX/(带有符号)
5) ECV: 均充电压: ECV/XX.X/
6) FCV: 浮充电压: FCV/XX.X/
7) COB: 电池电流: COB/XXXX/(带有符号)
8) AHV: 安时数: AHV/XXXX/(带有符号)
9) FCR: 负载电流: FCR/XXXX/(带有符号)
10) TPF: 温度系数: TPF/XXXX/
TPR: 参考温度: TPR/XX.X/
11) COR: 系统电流: COR/XXXX/
12) DCV: 直流电压: DCV/XXXX/
13) ACV: 交流电压: ACV/XXX/
14) OVV: 过压值: OVV/XX.X/
15) LVV: 欠压值: LVV/XX.X/
16) COB1-COB8 8路电池状态
17) FCR1-FCRG表示16路直流分路状态
短命令格式:
1) OFF: 系统关机: OFF/
ONR: 系统开机: ONR/
2) ECH: 均充状态: ECH/
3) BAT: 电池实验: BAT/
4) 故障码
UNB: 交流不平衡
ACB: 交流超限: ACB/
OOV: 过压: OOV/
LBV: 欠压: LBV/
BBF: 熔丝: BBF/
BOB: 分路故障: BOB/
BOR: 整流器故障: BOR/
FIR: 火警: FIR/
THF: 匪警: THF/
五、 监控PC机命令与系统控制器应答关系说明
1、 对应监控PC机系统参数设置命令系统控制器无应答
2、 对应监控PC机控制命令系统控制无应答
3、 对应监控PC机查询命令POL的应答为:
AVU、AVW、AWW、
UNI、VNI、WNI、
PW1、PW2、GNR、
ECT、ECP、FCR、
AHV、TPF、TPR、
COR、COB、
DCV、ACV、
ECV、FCV、
以上数据以“数据编号+回车符+数据+回车符”的格式连续发回给监控PC机。
同时,OFF、ONR、ECH、BAT 和其余故障也以 状态标示符+回车符的格式发回,直到出现结束符。缺省的数据和状态为正常或系统无此设置。
4、POL0应答:
系统编号+机柜号+回车+模块号+状态+电流值+回车+结束。
缺省模块号没装
状态:0-没装 1-正常 2-故障 3-关机
5、对应于监控PC机查询命令POL1查询电瓶状态,系统控制器应答为:COB1—COB8
系统编号+(COB“N”+回车+状态+带正负号四位整数+回车)+结束。
状态:0-没装 1-正常 2-故障
同时发回的还有:
OFF、ONR、ECH、BAT 和故障码
缺省的项表示无此路电池。
6、对应于监控PC机查询命令POL2查询直流分路状态,系统控制器应答为:
FCR1—FCRG “1”表示通, “0”表示断
同时发回的还有:
OFF、ONR、ECH、BAT和故障码,
缺省的项表示无此分路。
六、 传输特性参数:
1. 波特率:
RS232格式为1200bps RS485格式为4800 bps
2. 字结构
一个起始位,七个数据位,一个偶校验位,一个停止位,共十位。
3. RS232、RS485接口定义:
引 脚 号 定 义
RS232:
1,4,5 接 地
3 发 送
2 接 收
7 CD
8 DTR
RS485:
1,4 负 端
2,3 正 端
我根据同事的帮助建立如下定义表
驱动程序通道定义表
设备名称 北京动力源科技股份有限公司通信电源 驱动名称
参数格式 PxAy 备 注 y表示设备地址,不加该参数默认为1
电气标准 波特率 起始位 校验位 数据位 停止位 接线方式 设备 23 14 设备 1,4,5 2 3 7 8
232 1200 1 1偶 7 1 485 正 负 232 地线 接受 发送 CD DTR
485 4800
通道定义
机架 组 通道号 通道名称 类型 对应值意义 备注
0 0 0 协议通信状态 DI 0:通信正常
1 1 1 开机 DI
1 1 2 关机 DI
1 1 3 启动电池实验 DI 0:关,1:开
1 1 4 启动均充 DI 0:关 1:开
1 1 5 单个模块开关 DI
1 1 6 单个模块关机 DI
1 1 7 电瓶状态 SI 0-没装 1-正常 2-故障
1 1 8 直流分路状态 DI “1”表示通“0”表示断
1 1 9 模块状态 DI 0-没装 1-正常 2-故障 3-关机
1 1 10 交流不平衡 DI
1 1 11 交流超限 DI
1 1 12 过压 DI
1 1 13 欠压 DI
1 1 14 熔丝 DI
1 1 15 分路故障 DI
1 1 16 整流器故障 DI
1 1 17 火警 DI
1 1 18 匪警 DI
数字输出量
1 2 1 市电电压 sI 1:市电电压12:市电电压23:油机电压
1 2 2 三相电压 SI 1: AVU2: AVW3: AVV
1 2 3 三相电压 SI 1:UNI、2:VNI、3:WNI
1 2 4 均充时间 DI
1 2 5 均充周期 DI
1 2 6 充电限流值 DI
1 2 7 均浮转换电流 DI
1 2 8 均充电压 DI
1 2 9 浮充电压 DI
1 2 10 电池电流 DI
1 2 11 安时数 DI
1 2 12 负载电流 DI
1 2 13 温度系数 DI
1 2 14 参考温度 DI
1 2 15 系统电流 DI
1 2 16 直流电压 DI
1 2 17 交流电压 DI
1 2 18 过压值 DI
1 2 19 欠压值 DI
1 2 20 8路电池状态 DI
1 2 21 16路直流分路状态 DI
2 1 1 POL查询状态 AO 参数设置范围:(空),0,1,2
2 1 2 设均充时间 AO 参数设置范围:整数值
2 1 3 设均充周期 AO 参数设置范围:正整数
2 1 4 均浮转换电流 AO 参数设置范围:带符号
2 1 5 设浮充电压 AO 1. 参数设置范围:01—99(只能设置为整数)
2 1 6 设均充电压 AO 2. 参数设置范围:01—99(只能设置为整数)
2 1 7 欠压值 AO 3. 参数设置范围:01—99(只能设置为整数)
2 1 8 过压值 AO 4. 参数设置范围:(只能设置为整数01—99)
2 1 9 温度系数 AO 5. 参数设置范围:时间值(01—99)
2 1 10 参考温度 AO 6. 参数设置范围:(只能设置为整数01—99)
2 1 11 设置充电限流值 AO 7. 参数设置范围:(只能设置为整数01—99)
下面是我建立的vc++工程的一个中心类
// BeiJingPow_drv.h: interface for the BeiJingPow_drv class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_BEIJINGPOW_DRV_H__EAD7D70A_7D06_4966_A364_5FAC444BF02D__INCLUDED_)
#define AFX_BEIJINGPOW_DRV_H__EAD7D70A_7D06_4966_A364_5FAC444BF02D__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "StdAfx.h"
#include "CommonDrv.h"
#include "string.h"
//////判断命令是否相同
inline BOOL CodeCom(BYTE *p1,BYTE *p2,int n)
{
for(int i = 0;i < n;i++)
if(*(p1 + i) != *(p2 + i)) return FALSE;
if(3 == i) return TRUE;
}
class BeiJingPow_drv:public CCommonDrv
{
public:
BOOL DecodeFrame(BYTE *pData,int nLen);
WORD CRC16(BYTE *pData,int nCount);
int m_typeflag_int;
virtual BOOL OnSendCommand(CSetCmd &cmd, BYTE * pWData, int &nWLen);
virtual BOOL OnReceiveResponse(BYTE *pRData, int nRLen);
virtual BOOL OnSendDataRequest(BYTE * pWData, int &nWLen);
virtual BOOL OnCreate (CString &strFileName);
virtual BOOL OnReset(tagCOMMINFO *pCommInfo);
virtual void OnError(BYTE *pReadBuff, int nReadSize);
virtual void OnRspTimeout();
BeiJingPow_drv();
virtual ~BeiJingPow_drv();
private:
BYTE m_cAddr;
int m_nRequestId;
protected:
BYTE GetBitOfWORD(WORD wData,BYTE index);
};
#endif // !defined(AFX_BEIJINGPOW_DRV_H__EAD7D70A_7D06_4966_A364_5FAC444BF02D__INCLUDED_)
这个类中我只要实现虚函数的具体内容就可以了,公司已经把主要的内容写好了我只需调用就可以了
请问我如何写收发信息函数啊//
我看了好长时间一直不明白到底如何写收发函数??
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)