龙亿

------ 细细口味人生中的每一杯苦咖啡.

导航

国家电网新标准推出了,最近刚拿到一些资料,由于公司没有研发团队,加上国网给的DLL没有DEMO,很多东西只好自己边看一边试;

看到有些人也和我刚接触这东西一样不知道从何处下手.

今天感冒了,没什么思绪来写程序,特写一篇文章出来,希望对大家有帮助.同时也希望大家都能一起来多交流交流;

--------------------------------龙亿

本人现在写的是远程费控智能电表,所以只需用到以下二个函数(其他函数还没测试,不过听说"充值函数"返回值和说明不一致)

主站函数说明
说明:以下函数在 TestZhuzhan.dll 中,测试时请在RD-1000 读
卡器中插上测试母卡。
1. 身份认证函数
函数名称 IdentityAuthentication(char *Div,char *RandAndEndata)
函数功能身份认证取随机数和密文
Div,输入参数,8 字节分散因子,16 进制字符串。
参数说明 RandAndEndata,输出参数,字符型,8 字节随机数+8 字节
密文。
成功标志 0,成功;
200,连接加密机失败;
201,取随机数1 失败;
202,取随机数2 失败;
203,密钥分散失败;
204,数据加密失败;
205,取密文失败;
2.远程控制函数
函数名称 UserControl(char *RandDivEsamNumData,char *dataOut)
函数功能远程控制
RandDivEsamNumData,输入参数,字符型,4 字节随机数
参数说明 +8字节分散因子+8字节ESAM序列号+数据明文。
dataOut,字符型,20 字节密文
成功标志 0,成功;
200,连接加密机失败;
201,写卡失败;
202,读卡失败;
203,计算密文失败;

注:这个DLL在C#和VB里都是不可以直接引用的,需要通过DllImport来引用他

通信流程:

clip_image002[7]

从上图中可以看出我们要设计的流程是:

1.取8 字节分散因子,16 进制字符串(可以是自己设一个固定8字节数);

 

 

2.调用TestZhuZhan.dll接口上的IdentityAuthentication函数得到随机数1和密文1;

3.将得到的随机数1和密文1发送到电表中,电表将返回4字节随机数2和8字节ESAM序列号;

4.调用TestZhuzhan.dll接口安全认证函数UserControl(char *RandDivEsamNumData,char *dataOut) , 得到20字节密文;

  参数1中:数据明文为:1字节控制码N1+1字节保留字段+大于当前时间的日期yyMMddHHmmss(书上写的是ssmmHHddMMyy是指密文,明文是不用倒的,这里害我调试了半天才好);

             N1=1AH代表跳闸,N1=1BH代表合闸允许,N1=2AH代表报警,N1=2BH代表报警解除,N1=3AH代表保电,N1=3BH代表保电解除

5.将密文发送到电表,结束

注:1,2,3步安全认证只需发一次,

控制主要在4,5二步

具体操作代码将在下一篇中和大家讨论.----龙亿(2009-12-08 16:32)