按645规约读电表的问题

sharealltoyou 2005-04-16 01:26:05
我的程序就是读电表中的数据,硬件条件是一台PC,通过RS232接到一个转换器(232-485),然后转换器的485的双绞线连接到电表的485接线口上。新问题又出现了,设置电表地址后,根本就没有任何反应,根本就没有返回数据,电表的地址也没设上(通过电表的按钮可以查看到),电表的说明书上说,在设置地址时,要按住2#按钮,我也按了,发送命令前到结束都按着。过5秒才放手,可还是没有反应。我没弄过485接口。那个转换器要10V~30v的直流电源,我也接上了。设备全是新的。我弄了一天半,也没弄出个结果来。不知道问题出在哪了.

下面是我的代码,设置电表地址:
我有几个地方不敢确定是正确的,
1.要设置的电表地址处pBuf[10]~pBuf[15],按规约加33H,不知道是否这么写
2.规约中提到校验和pBuf[16]的算法是否正确,另外这个校验和,在规约中说从帧起始符开始,可这里有两个帧起始符pBuf[0]和pBuf[7],zhezh这个校验和到底从哪里开始计算呢?从哪个位置到哪个位置呢?
DWORD dwToWrite=18;
char *pBuf=new char[19];
memset(pBuf,0,19);

pBuf[0]=0x68; //
pBuf[1]=0x99; //
pBuf[2]=0x99;
pBuf[3]=0x99;
pBuf[4]=0x99;
pBuf[5]=0x99;
pBuf[6]=0x99;
pBuf[7]=0x68; //
pBuf[8]=0x0A; //
pBuf[9]=0x06; //
pBuf[10]=0x04+0x33; //
pBuf[11]=0x01+0x33;
pBuf[12]=0x01+0x33;
pBuf[13]=0x01+0x33;
pBuf[14]=0x01+0x33;
pBuf[15]=0x01+0x33;

int Sum=0;

for(int i=0;i<16;i++)
{
Sum+=pBuf[i];
}
pBuf[16]=Sum%256;
pBuf[17]=0x16; //

m_Port.WriteBlock(pBuf,dwToWrite);
delete [] pBuf;

DL/T 645规约中这样提到:
(完整的规约在http://www.powerprotocol.com.cn/可以找到)
5.2 帧格式
帧是传送信息的基本单元。帧格式如图8 所示。
5.2.1 帧起始符68H:标识一帧信息的开始,其值为68H=01101000B。
5.2.2 地址域A0~A5:地址域由6 个字节构成,每字节2 位BCD 码。地址长度可达12 位
十进制数,可以为表号、资产号、用户号、设备号等。具体使用可由用户自行决定。当使用
的地址码长度不足6 字节时,用十六进制AAH 补足6 字节。低地址位在先,高地址位在后。
当地址为999999999999H 时,为广播地址。
5.2.3 控制码C:控制码的格式如下所示。
D7=0:由主站发出的命令帧
D7=1:由从站发出的应答帧
D6=0:从站正确应答
D6=1:从站对异常信息的应答
D5=0:无后续数据帧
D5=1:有后续数据帧
D4~D0:请求及应答功能码
00000:保留
00001:读数据
00010:读后续数据
00011:重读数据
00100:写数据
01000:广播校时
01010:写设备地址
01100:更改通信速率
01111:修改密码
10000:最大需量清零
5.2.4 数据长度L:L 为数据域的字节数。读数据时L≤200,写数据时L≤50,L=0 表示无
数据域。
5.2.5 数据域DATA:数据域包括数据标识和数据、密码等,其结构随控制码的功能而改变。
传输时发送方按字节进行加33H 处理,接收方按字节进行减33H 处理。
5.2.6 校验码CS:从帧起始符开始到校验码之前的所有各字节的模256 的和,即各字节二
进制算术和,不计超过256 的溢出值。
5.2.7 结束符16H:标识一帧信息的结束,其值为16H=00010110B。

7.6 写设备地址
7.6.1 写设备地址请求命令帧
功能:设置某从站的地址码
控制码:C=0AH
地址域:99...99H
数据长度:L=06H
数据域:A0-A5(设备地址码)
帧格式:
68H 99H ... 99H 68H 0AH 06H A0 ... A5 CS 16H
注:本请求命令采用广播地址发布,要求被设置的从站有相应的按键(开关)与该命令配
合,在命令发布的全部时间内按下按键者响应,其它不响应。
7.6.2 从站正常应答帧
功能:正确执行命令的设备应答
控制码:C=8AH
地址域:A0?A5(新设置的设备地址码)
数据长度:L=00H
帧格式:
68H A0 ... A5 68H 8AH 00H CS 16H
...全文
1086 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcy_beijing 2005-05-17
  • 打赏
  • 举报
回复
借楼主帖子,谁有IEC61107规约啊?请给我发一份,i_want_love@tom.com,谢谢了!
fufu89 2005-05-17
  • 打赏
  • 举报
回复
你对645规约理解不对,应该是68H,A0H,A1H,A2H,A3H,A4H,A5H,68H....其中A0~A5为表地址,还有645规约规定通讯起始波特率为1200,但是有些电表厂商的参数可能不同,需要搞清楚.
icesnows 2005-04-18
  • 打赏
  • 举报
回复
UPUP
suyun9329 2005-04-16
  • 打赏
  • 举报
回复
up

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧