需要与上层的通信接口和下层的接口支持。
接口定义:
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接口一次控制过程”实现
配置协议(接收的上层指令)
华为电源PSM—A10配置协议
1. 取数命令:
8581: 地址 命令类型 0x00 0x00 0x00 0x00 0x00 校验和
8582:7E 地址 命令类型 0x00 0x00 0x00 0x00 0x00 校验和
地址:8581/8582地址 命令类型:0x03
校验和:为除7E以外的前7个字节的算术累加和
2.控制命令:
8581: 地址 命令类型 控制码 0x00 0x00 0x00 0x00 校验和
8582:7E 地址 命令类型 控制码 0x00 0x00 0x00 0x00 校验和
地址:8581/8582地址 命令类型:0x01 校验和:同上
注;控制码见配置表的控制配置部分
3.设置命令:
1 2 3 4 5 6 7 8
8581: 地址 命令类型 参数代码 XX XX XX XX 校验和
8582:7E 地址 命令类型 参数代码 XX XX XX XX 校验和
地址:8581/8582地址 命令类型:0x02/0x20 校验和:同上
第4和5字节为参数值,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.1、7.2.2
表7.2.1
序号 | 符号 | 表示意义 | 备注 |
1 | SOI | 起始标志位(START OF INFORMATION) | (7EH) |
2 | VER | 通讯协议版本号 |
|
3 | ADR | 设备地址描述(1-254,0、255保留) |
|
4 | CID1 | 控制标识码(设备类型描述) |
|
5 | CID2 | 命令信息:控制标识码(数据活动作类型描述)相应信息:返回码RTN(见返回码表7.2.2) |
|
6 | LENGTH | INFO字节长度(包括LENID和LCHKSUM),数据格式见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 | 所有的累加和 |
第4和5字节为参数值,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 忽略