用Delphi开发DLL来代替8581协议控制和采集华为PSM—A10电源

需要与上层的通信接口和下层的接口支持。

接口定义:

PROC_RPTSIGNAL= function (nMoudleIdx:integer;nType:integer; nChannel:integer;fVal:single):boolean;stdcall;

用于报告分解的各参数数据

  nMoudleIdx:模块序号

  nType:参数类型

  nChannel:通道号

 fVal:数据值

 

       PROC_RPTRUNTIMEMSG= function (nMoudleIdx:integer;nType:integer;pBuf:pointer; nLen:integer):boolean;stdcall;

   用于报告采集的收发过程

  nMoudleIdx:模块序号

nType:报告类型 0采集发1采集收2控制发3控制收

pBuf:数据缓冲

nLen:数据长度

      

PROC_QUERY= function(hComm:longword;

                                        nModuleIdx:longint;

                                        nMAddr:longint;

                                        proc:PROC_RPTSIGNAL;procRpt:PROC_RPTRUNTIMEMSG;Aportmethod:byte=1):longint;stdcall;

  DLL接口一次采集过程

   HComm:通讯句柄

   NModuleIdx:模块序号

   NMAddr:模块地址

   Proc:回调接口(报告分解)

   ProcRpt:回调接口(报告收发过程)

  Aportmethod:通讯模式

 

       PROC_CMD= function(hComm:longword;nMAddr:longint;nModuleIdx:longint;pBufCmd:pointer;procRpt:PROC_RPTRUNTIMEMSG;Aportmethod:byte=1):longint;stdcall;

DLL接口一次控制过程

   HComm:通讯句柄

   NModuleIdx:模块序号

   NMAddr:模块地址

PBufCmd:数据缓冲

ProcRpt:回调接口(报告收发过程)

  Aportmethod:通讯模式

 

DLL开发:主要是将“DLL接口一次采集过程”和“DLL接口一次控制过程”实现

配置协议(接收的上层指令)

华为电源PSMA10配置协议

1. 取数命令:

8581    地址 命令类型  0x00   0x00  0x00  0x00  0x00  校验和

85827E  地址 命令类型  0x00   0x00  0x00  0x00  0x00  校验和

地址:8581/8582地址     命令类型:0x03

校验和:为除7E以外的前7个字节的算术累加和

2.控制命令:

8581    地址  命令类型 控制码  0x00  0x00  0x00  0x00  校验和

85827E  地址  命令类型 控制码  0x00  0x00  0x00  0x00  校验和

地址:8581/8582地址     命令类型:0x01  校验和:同上

     注;控制码见配置表的控制配置部分

3.设置命令:

1     2      3     4  5   6  7    8  

    8581    地址  命令类型 参数代码  XX  XX  XX  XX  校验和

85827E  地址  命令类型 参数代码  XX  XX  XX  XX  校验和

地址:8581/8582地址     命令类型:0x02/0x20  校验和:同上

45字节为参数值,4字节为低位,5字节为高位;

7字节的最高位为符号位:0---正数,1---负数

7字节的最低位为小数位:0---无小数,1---有小数

(待续)

与智能设备通信的格式

序号

1

2

3

4

5

6

7

8

9

字节数

1

1

1

1

1

2

X

2

1

格式

SOI

VER

ADR

CID1

CID2

LENGTH

INFO

CHKSUM

EOI

基本格式的注解见表面7.2.17.2.2

7.2.1

序号

符号

表示意义

备注

1

SOI

起始标志位(START OF INFORMATION)

(7EH)

2

VER

通讯协议版本号

 

3

ADR

设备地址描述(1-254,0255保留)

 

4

CID1

控制标识码(设备类型描述)

 

5

CID2

命令信息:控制标识码(数据活动作类型描述)相应信息:返回码RTN(见返回码表7.2.2

 

6

LENGTH

INFO字节长度(包括LENIDLCHKSUM),数据格式见7.3

 

7

INFO

命令信息:控制数据信息COMMAND INFO

应答信息:应答数据信息DATA INFO

 

8

CHKSUM

校验和码,数据格式见7.3

 

9

EOI

结束码

CR(0DH)

涉及笔记:

2006-0617

数值均为16进止   按顺序对应

1.控制命令:

1.1 遥调:(13)

从采集程序得到命令:

 

地址1

命令类型1

参数代码1

命令参数4

累加和1

 

0x02

1->13

xx   xx   xx   xx

所有的累加和

45字节为参数值,4字节为低位,5字节为高位;

7字节的最高位为符号位:0---正数,1---负数

7字节的最低位为小数位:0---无小数,1---有小数

 

解析后下发:

2字节是整形,4字节是浮点型

1.1.1  在参数代码是1-5的时候 5

序号

1

2

3

4

5

6

7

8

9

字节数

1

1

1

1

1

2

5

2

1

格式

SOI

VER

ADR

40

48

60 0A

80-84

+4字节数据

CHKSUM

EOI

 

响应信息

序号

1

2

3

4

5

6

7

8

9

字节数

1

1

1

1

1

2

LENID/2

2

1

格式

SO1

VER

ADR

40H

RTN

LENGTH

 

CHKSUM

EOI

注:LENID=00H

 

1.1.2  在参数代码是6-7的时候 2

序号

1

2

3

4

5

6

7

8

9

字节数

1

1

1

1

1

2

3

2

1

格式

SOI

VER

ADR

42

49

A0 06

80-81

+2字节数据

CHKSUM

EOI

 

浮点的时候是42 48 +4字节数据  60 0A

响应信息

序号

1

2

3

4

5

6

7

8

9

字节数

1

1

1

1

1

2

LENID/2

2

1

格式

SO1

VER

ADR

42H

RTN

LENGTH

 

CHKSUM

EOI

 

1.1.3  在参数代码是8-13的时候 6

序号

1

2

3

4

5

6

7

8

9

字节数

1

1

1

1

1

2

3

2

1

格式

SOI

VER

ADR

42

49

A0 06

E0-E5

+2字节数据

CHKSUM

EOI

 

浮点的时候是42 48 +4字节数据 60 0A

 

响应信息

序号

1

2

3

4

5

6

7

8

9

字节数

1

1

1

1

1

2

LENID/2

2

1

格式

SO1

VER

ADR

42H

RTN

LENGTH

 

CHKSUM

EOI

注:LENID=00H

 

1.2遥控:(86)

       

从采集程序得到命令:

地址1

命令类型1

控制码1

命令参数4

累加和1

 

0x01

0x01->0x56

0x00  0x00  0x00  0x00

所有的累加和

 

1.2.1  在控制码是0x01-0x04的时候 4

序号

1

2

3

4

5

6

7

8

9

字节数

1

1

1

1

1

2

2

2

1

格式

SOI

VER

ADR

41

45

C0 04

10  xx

1F  xx

11  xx

E4  xx

CHKSUM

EOI

xx表示任意,会被设备忽略

 

响应信息

序号

1

2

3

4

5

6

7

8

9

字节数

1

1

1

1

1

2

LENID/2

2

1

格式

SO1

VER

ADR

41H

RTN

LENGTH

 

CHKSUM

EOI

 

 

1.2.2  在控制码是0x05-0x06的时候 2

序号

1

2

3

4

5

6

7

8

9

字节数

1

1

1

1

1

2

1

2

1

格式

SOI

VER

ADR

E1

80

E0 02

0xE1

0xE0

CHKSUM

EOI

 

响应信息

序号

1

2

3

4

5

6

7

8

9

字节数

1

1

1

1

1

2

LENID/2

2

1

格式

SO1

VER

ADR

E1

RTN

LENGTH

 

CHKSUM

EOI

LENID=0X0

 

1.2.3  在控制码是0x07 0x09..0x55(0x07->0x56之间的奇数)的时候 40

序号

1

2

3

4

5

6

7

8

9

字节数

1

1

1

1

1

2

2

2

1

格式

SOI

VER

ADR

41

45

C0 04

20 1~28

CHKSUM

EOI

 

响应信息

序号

1

2

3

4

5

6

7

8

9

字节数

1

1

1

1

1

2

LENID/2

2

1

格式

SO1

VER

ADR

41H

RTN

LENGTH

 

CHKSUM

EOI

注:LENID=00H

 

1.2.4  在控制码是0x08 0x0A..0x56(0x07->0x56之间的偶数)的时候 40

序号

1

2

3

4

5

6

7

8

9

字节数

1

1

1

1

1

2

2

2

1

格式

SOI

VER

ADR

41

45

C0 04

2F 1~28

CHKSUM

EOI

 

响应信息

序号

1

2

3

4

5

6

7

8

9

字节数

1

1

1

1

1

2

LENID/2

2

1

格式

SO1

VER

ADR

41H

RTN

LENGTH

 

CHKSUM

EOI

注:LENID=00H

 

2:查询命令:

2.1 查询VER通信版本号

发送到设备:

序号

1

2

3

4

5

6

7

8

字节数

1

1

1

1

1

1

2

1

格式

SOI

xx

ADR

CID1

4F

00

CHKSUM

EOI

 

设备返回:

序号

1

2

3

4

5

6

7

8

字节数

1

1

1

1

1

1

2

1

格式

SOI

VER

ADR

CID1

RTN

00

CHKSUM

EOI

采集状态

匹配地址:

交流模拟量 11 cid1=40 cid2=41

一个交流屏 两路交流

I是所得到的包头  7E

回报350包偏移

内容

返回报地址

30-31

输出电流A

I+85~I+92

32-33

输出电流B

I+93~I+100

34-35

输出电流C

I+101~I+108

36-37

1路交流A相电压

I+17~I+24

38-39

1路交流B相电压

I+25~I+32

40-41

1路交流C相电压

I+33~I+40

42-43

1路交流输出频率

I+41~I+48

44-45

2路交流A相电压

I+51~I+58

46-47

2路交流B相电压

I+59~I+66

48-49

2路交流C相电压

I+67~I+74

50-51

2路交流输出频率

I+75~I+82

 

转化方法:

DataBuf[0] DataBuf[1] DataBuf[2] DataBuf[3] DataBuf[4] DataBuf[5] DataBuf[6] DataBuf[7]

 

 


floatTemp[0]       floatTemp[1]       floatTemp[2]        floatTemp[3]

 

 

                                *10  再取整

 

 

                integerTemp[0]  integerTemp[1]

 

使用Round()函数来执行取整操作

 

交流开关量:cid1=40 cid2= 43  查看现场数据得 6个字节

序号

内容

字节

1

检测的开关数量M=0

1

M+2

用户自定义状态数量P=3

1

M+3

交流切换状态(自动E0H或手动E1H

1

M+4

照明状态(关E3H或开E2H

1

M+5

当前工作路号

第一(E4),第二(E5),第三(E6

1

 

 

 

 

回报350包偏移

内容

返回报地址

6.1

交流切换状态

I+19~I+20

6.2

照明状态

I+21~I+22

 

0手动  1自动

0关闭  1工作

添加循环控制的问题  出错三次抛出错误

 

 

添加双字节转换为单字节的过程

{--------------得到转化字节的过程------------------------------------}

{-------@param input1: Byte 数据高位---------------------------------}

{-------@param input2: Byte 数据低位---------------------------------}

{-------@param reAssign: Byte 得到的数据-----------------------------}

{-------2005-06-27 add by Fane---------------------------------------}

procedure change2to1(input1,input2:byte;var reAssign: Byte);

 

reAssign声明为var,使用传引用方式传递参数

 

 

交流告警量:cid1=40 cid2=44  查看现场数据得 24个字节

 

序号

内容

字节

 

本屏交流配电系统数量M

1

 

1路输入线/相电压AB/A

1

 

1路输入线/相电压BC/B

1

 

1路输入线/相电压CA/C

1

 

1路频率

1

 

1路检测熔丝(或开关)数量M

1

 

1路用户自定义告警数量P=8

1

 

1路用户自定义字节

8×1

 

2路输入线/相电压AB/A

1

 

2路输入线/相电压BC/B

1

 

2路输入线/相电压CA/C

1

 

2路频率

1

 

2路检测熔丝(或开关)数量M

1

 

2路用户自定义告警数量P=0

1

 

A相输入电流

1

 

B相输入电流

1

 

C相输入电流

1

 

第一个自定义P=8 2个自定义是0  20 20 忽略

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值