3通讯协议分析.docx

上传人:b****4 文档编号:12011893 上传时间:2023-04-16 格式:DOCX 页数:19 大小:26.22KB
下载 相关 举报
3通讯协议分析.docx_第1页
第1页 / 共19页
3通讯协议分析.docx_第2页
第2页 / 共19页
3通讯协议分析.docx_第3页
第3页 / 共19页
3通讯协议分析.docx_第4页
第4页 / 共19页
3通讯协议分析.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

3通讯协议分析.docx

《3通讯协议分析.docx》由会员分享,可在线阅读,更多相关《3通讯协议分析.docx(19页珍藏版)》请在冰豆网上搜索。

3通讯协议分析.docx

3通讯协议分析

通讯协议分析

YC189D系列

D型设备的通讯方式采用串口通讯,机体内有一通讯板与PC的串口连接,内部系485通讯方式,但不是一条总线方式,而是多条485总线结构,表架上一条485总线控制误差计,一条总线控制电源部分,另外每个表位都有一个485接口,他们是串联在独立的一条总线上的,在通讯板上有电子开关控制不同总线的切换功能,这是通道的概念,比如定义通道1为误差计,通道2为电源,通道7为标准表通讯,因此与设备的通讯是串行,不可以平行通讯。

串口配制:

“19200,n,8,2”

帧格式:

FunctionCode

NumberofData

Data1

...

Datan

CRCHigh-byte

CRCLow-byte

以下分析目前最新版本的台体通讯协议:

台体通道:

2

误差计系统:

1

1.通道的切换

对应库的API函数:

OPENBOX();

230

CHNNo.

2

170

55

CRCHi

CRCLo

head

参数:

通道号

数据长度

D1

D2

返回:

230

Chanelnumber

2

79

75

速度很快,大约100ms后,返回数据

2.电流开路命令,对应函数名:

CHECKCURROAD,过程先打开通道1,然后通过串口送出一帧,格式如下

Device_ID

41

0

CRCHI

CRCLO

表ID(F1~F255)

命令字

数据长度0

返回

0

1

2

3

4

5

6

7

8

9

87

67

32

79

75

W

C

O

K

3.切换接线方式,对应函数名:

CONNECTMODECTRL();过程先打开电源通道2,然后送出一个数据帧,格式如下:

0

1

2

3

4

5

6

7

8

Dev_id

17

4

0/1

0

0~4

0/1

crchi

crclo

[0]:

dev_id包括三个数字,是三组信号源主板的485通讯地址,其中A相的主板地址系220,B相221,C相222;

[3]:

正/反相序标志,正相序=1,反相序=0;

[5]:

相序标记,包括5个数字,从0~4,其中

四线有功方式:

0

三线有功方式:

1

四线无功方式:

2

三线无功方式:

3

单相方式:

4

[6]:

容感性标记,两个数字0/1,其中容性负载=0,感性负载=1;

成功返回的帧格式:

0

1

2

3

4

5

6

7

8

9

87

67

32

79

75

W

C

O

K

4.相位更改指令,对应函数名:

COSOUT();过程先打开电源通道2,然后发出一帧数据,格式如下:

0

1

2

3

4

5

6

7

8

220/1/2

12

4

hi

low

crchi

crclo

成功返回的帧格式:

0

1

2

3

4

5

6

7

8

9

87

67

79

75

W

C

O

K

5.电流输出指令,对应函数名:

CURRENTOUT();过程系先切换电源通道2,然后发出一帧数据,格式如下:

0

1

2

3

4

5

6

7

8

220/1/2

10

4

crchi

crclo

成功返回的帧格式:

0

1

2

3

4

5

6

7

8

9

87

67

32

79

75

W

C

O

K

6.开路检测的毫安电流,函数名:

CurrentOut7mA;此函数用于在开路检测前,在0.1A挡输出7%的电流,为开路检测提供电流。

0

1

2

3

4

dev_id

35

0

crc_hi

crc_lo

返回

0

1

2

3

4

5

6

7

8

9

87

67

32

79

75

W

C

O

K

7.输出当前电流档位的百分比,函数名:

CurrentPercentOut。

此函数同样先打开电流通道,然后发出一帧数据,格式如下:

0

1

2

3

4

5

6

7

8

220/1/2

26

4

高位

低位

CRCHI

CRCLO

注意,电流的实际值要x100倍后填入3~6中。

返回帧为“WCOK”

8.电流谐波,函数名CurrentXieBo,关键参数包括电流幅值、谐波次数、谐波相位、谐波方式。

其中

a)电流幅值:

x100,数组长度2个bytes.

b)谐波次数:

整数,数组2个bytes

c)谐波相位:

x100取整,数组长度2个bytes.

d)谐波类型:

【1】为普通谐波,【2】次谐波,【3】偶谐波,【4】奇次谐波

0

1

2

3

4

5

6

7

8

9

10

11

DevId

21

7

a1

a2

b1

b2

c1

c2

d

CRC_H

CRC_L

返回帧【WCOK】

9.电流多次谐波合成,函数名CurrentXieBoMulti,参数接收幅值数组、谐波次数数组、和相位数组。

这个比较复杂,以下详细说明

多次谐波与上面的单次谐波,参数同样包括幅值、次数、相位,数组长度为21,三组数据放在一个长度为89的字节类型的数组里面,三个数组的参数按照偏移量21的方式,依次放在89个字节的数组里面,从数组第四个字节开始,幅值,数组索引值24(21+3)即次数的位置,而相位数据需要x10的两个字节,从42,43开始的位置存放相位数据。

0

1

2

3

24

44

43

87

88

DEVID

38

84

幅值

次数

CRCHI

CRCLO

返回帧【WCOK】

10.脉冲累计命令,原函数名:

ErrCounterAccumulationImpulse,此函数功能是累计标准表脉冲,用在校核常数测试上。

对应的硬件模块是需量板,但08年5月之后,改为第一块误差计板实现此功能。

指令格式如下

0

1

2

3

4

DEVID:

1

35

0

CRCHI

CRCLO

返会数据【WCOK】

11.清除误差标记指令,原函数名:

ErrCounterClearMark,主要用途,清除误差标记,当误差计算后,用户读数后,如果不擦除标记,那么数据一直保留不会刷新,因此在读数后,需要发这一条指令,使误差计某地址的内存的数据更新。

这条命令对应是读一个表位的数据时使用,对于“批量读”,这是读显存的数时候没用。

指令格式如下

0

1

2

3

4

DEVID(1~MAX)

10

0

CRCHI

CRCLO

返回数据【WCOK】

12.日计时误差指令,原函数名:

ErrCounterCumulationDay,启动误差计的计时模式。

参数有frequency,accesschannel,impulsemode,其中误差计支持高频脉冲,frequency允许大整数,14个byte表示长度14位的长整数,整数按每一位的阿拉伯数字的ascii码填入数组。

Accesschannel系通道号,多功能台一般都有通道盒,目前定义的通道有20个。

脉冲方式impulsemode包括上拉方式和下拉方式两种,但估计可能有第三种。

0

1

2

3

..

17

18

19

20

DEVID

31

16

frequency

Access

Impulse

CRCHI

CRCLO

注意:

杭州的多功能台特殊,每组电表增加多一个误差计,作为日计时误差专用,这样可以同步进行测试,解决误差计只能一种工作模式的问题,这当然是很特殊的情况,因为误差计设计太简单,没有分时计算的功能。

返回的数据还是【WCOK】

读脉冲数指令,原函数名:

ErrCounterImpulseReadData,这个指令是读取误差计在累计脉冲模式下的累计数。

指令格式如下

0

1

2

3

4

DEVIC

36

0

CRCHI

CRCLO

返回数据长度是20,累计数以ASCII码表示,从第四个字节开始到第18个字节,共15个bytes,即长度为15的数字的ASCII码。

以下返回格式

0

1

2

3

17

18

19

ASCII码

CRCHI

CRCLO

最大需量测试指令,原函数名:

ErrCounterMaxXL,这个指令是需量测试指令,使某个表位相关联的误差计进入需量测试模式,主要参数包括标准表常数、需量周期时间、滑差次数,标准表常数以数字的每个ASCII字符放在第三个开始的数组内。

0

1

2

3

16

17

18

19

20

DEVID

25

16

ASCII

..

周期

次数

CRCHI

CRCLO

返回格式【WCOK】

读需量测试的结果,原函数名:

ErrCounterMaxXLReadData,这个指令是读需量测试结果,主要传递三个参数,用于需量误差的计算,包括电流变比、电压变比和接线系数。

指令格式如下

0

1

2

3

4

DEVID

26

0

CRCHI

CRCLO

返回数据

IF

数据长度<9,读需量失败!

ELSEIF

数据长度=9,且

0

1

2

3

4

5

6

7

66

85

83

89

B

U

S

Y

表示需量正在进行中

ELSEIF

数据长度>=20

从索引3到17是数字的ASCII码,转换为数字后必须乘(电流变比+电压变比+接线系数),得到的结果就是需量测试的结果,但调用者可能还需要计算处理。

0

1

2

3

17

18

19

ASCII

..

CRCHI

CRCLO

潜动试验模式指令,原函数名:

ErrCounterQianDong,使某个表位相关联的误差计进入潜动试验模式。

传入的参数包括潜动时间、脉冲数、通道号和脉冲方式(上拉,下拉),潜动时间为整数,转换两个字节按照高低位存放在数组内,指令格式如下

0

1

2

3

4

5

6

7

8

9

DEVID

24

5

时间

脉冲

通道

方式

CRCHI

CRCLO

返回数据的格式【WCOK】

注意:

如果DEVID参数改为199,即表示广播方式,所有的误差计将全部进入潜动模式,但这个命令有个问题,如果误差计数量多,比如6个以上,会出现通讯问题,导致某些误差计没有进入模式,但返回的数据是对的。

因此解决这个问题,只能通过多次重发的方式解决,这个问题对于使用199的其它指令都是一样的。

启动试验模式指令,原函数名:

ErrCounterQiDong,使某个表位相关联的误差计进入启动试验模式。

传递的参数基本与潜动相同。

指令格式

0

1

2

3

4

5

6

7

8

9

DEVID

23

5

时间

脉冲

通道

方式

CRCHI

CRCLO

返回数据的格式【WCOK】

潜启动试验读数指令,原函数名:

ErrCounterQQReadData,读取某个表位的试验结果。

指令格式:

0

1

2

3

4

DEVID

11

0

CRCHI

CRCLO

返回数据

IF数据返回长度<9,读书命令失败,可能是通讯故障引起的。

ELSEIF数据长度=9,且从数据数组第四位置开始为BUSY,表示潜动正在进行之中。

ELSEIF数据长度=13,返回字符串,位置从数组第4个位置到第10位置的7个字符。

返回的字符是LED面板上显示的字符,比如PASS或者FAIL。

0

1

2

3

9

10

11

12

字符

?

CRCHI

CRCLO

读误差数据指令,原函数名:

ErrCounterReadData,该指令读取某表位关联误差计的缓存,即误差数据。

返回的数据包括误差的次数。

这个指令要配合另外一条清空缓存的指令用,因为如果不主动清空缓存,下次读回的数据还是原来的,没有改变。

指令如下(与潜启动读数相同):

0

1

2

3

4

DEVID

11

0

CRCHI

CRCLO

返回数据

与潜启动相同,但不同在于第11个位置,该位保存误差次数。

批量读误差数据指令,原函数名:

ErrCounterReadDataAll,该函数可以读误差计关联的表位的全部显存的数据,一般每个误差计关联6个表位的显示LED,此函数实际上就是读显存的数据。

格式如下:

0

1

2

3

4

DEVID

48

0

CRCHI

CRCLO

注:

DEVID是每个误差计关联的表位的第一个表位的序号。

返回的数据:

IF数据长度<9,误差计读数失败,可能是通讯原因。

ELSEIF数据长度=9,误差计正在处理中。

ELSEIF数据长度>=65,接收到误差。

数据的分解有两个分支,与一个参数DIGITALNO有关,是误差计显示的小数位,如果是<=3位数,数组开始的位置往前移一位,6个ASCII码表示误差数,而=4位数,则用7位数表示误差数(一个实数)。

共6组数据,分别是关联的6个表位的误差数据,每组10个bytes,每组最后一个BYTE为误差次数。

索引11为第一组数据的误差次数,往前推6个即索引5开始为第一组误差数据的ASCII码,如果4位显示,则往前推7个即索引4开始ASCII码。

因此索引11,21,31,41,51,61分别是6组数据的边界,可按照显示的位数往前推出5/6个ASCII码即为误差值。

0

1

4

5

11

61

63

64

=4

=3

次数

次数

CRCHI

CRCL0

读色标状态指令,函数名:

ErrCounterReadSeBiao,该指令的功能是读取误差计当前的色标状态(ON或者OFF),指令实际与读误差数是一样的。

指令如下

0

1

2

3

4

DEVID

11

0

CRCHI

CRCLO

返回数据与误差接收不同,

IF数据长度<9,读色标命令失败,

ELSEIF数据长度=9,而且返回字符串【BUSY】,表示正在处理色标,

ELSEIF数据长度=13,返回的数据数组索引从5开始到9,为返回的字符串的ASCII码。

含有“OFF”字串的表示色标已捕捉。

色标命令,函数名:

ErrCounterSeBiao,该函数使某一个表位关联的误差计进入色标捕捉模式,参数有通道号和脉冲类型(上拉和下拉)两个,指令格式:

0

1

2

3

4

5

6

DEVID

28

2

通道

方式

CRCHI

CRCLO

返回数据:

【WCOK】

误差计休眠指令,函数名:

ErrCounterSleep,该指令使误差计进入休眠模式,脉冲采集的端口封闭,这样外部的频率就不能影响误差计的工作,此用户高频的输入频率,容易导致误差计失灵。

指令:

0

1

2

3

4

DEVID

42

0

CRCHI

CRCLO

返回数据为【WCOK】

误差计算模式,函数名:

ErrCounterTest,这是最重要也是使用最频繁的指令,使该表位相关联的误差计进入误差计算模式,传递参数包括圈数、标准脉冲数、通道号、脉冲类型。

圈数系一个两个字节的INTEGER,在数组排列的方式由高到低;脉冲数是一个长整形,占四个字节;通道号为1个BYTE,脉冲方式也是一个BYTE。

另外还有两个参数误差上下限,占数组4个BYTEs,第一个参数是上限值,第二个是下限值,一般这两个值的绝对值都设的很大,否则LED会出现超差符号,不美观而且引起程序截取数据的问题。

指令格式如下

0

1

2

3~4

5~8

9

10

11~14

15~18

19~20

DEVID

22

16

圈数

标准数

通道

方式

上限

下限

CRC

返回数据【WCOK】

485通讯开关控制指令,函数名:

ErrCounterUser485KaiGuan,该指令控制485电子开关的闭合状态,只有当485电子开关开启时,外界才可以使用设备内的485总线与表位上的485接口进行通讯,关闭时不能通讯。

指令格式:

0

1

2

3

4

5

DEVID

14

1

STATUS:

0/1

CRCHI

CRCLO

注:

STATUS:

0表示关闭,1表示开启。

当DEVID=199时候,则全部打开485通道。

返回数据【WCOK】

需量周期测试指令,函数名:

ErrCounterXLzq,该指令使某表位关联的误差计进入需量周期测试模式,该函数传递的参数包括需量周期值、通道号、脉冲方式。

需量周期值系一个秒单位的整数,按4个字节整数放在数组的4个位置。

指令格式

0

1

2

3~6

7

8

9

10

DEVID

27

6

秒数

通道

方式

CRCHI

CRCLO

返回数据【WCOK】

脉冲计数模式,函数名:

ErrCounterZouZi,该指令实现误差计进入计数模式,累加接收到的脉冲个数,用于常数校核测试中。

函数传递脉冲方式、通道号和计数的脉冲数。

通常脉冲数没有意义,这是一个计数结束的条件,在校表程序中一般都设置一个很大的整数。

指令格式

0

1

2

3~6

7

8

9

10

DEVID

29

6

脉冲数

通道

方式

CRCHI

CRCLO

返回数据:

【WCOK】

读脉冲累计数,函数名:

ErrCounterZouZiReadData,此函数对应上函数ErrCounterZouZi,实现读取误差计内存当前脉冲累计数。

指令格式如下

0

1

2

3

4

DEVID

30

0

CRCHI

CRCLO

返回数据

IF数据长度<9,读脉冲累计数失败;

ELSEIF数据长度=9AND数组索引[3..6]是ASCII字符【BUSY】,正在处理脉冲累计;

ELSEIF数据长度>=20,索引3~17的ASCII码组成的字符串就是脉冲数。

市电频率功能,函数名:

FrequencyFollow,该函数影响电源的频率,电源的频率可以是标准的频率,也可以是外部电路的频率,即与外部电路保持一致的工作频率。

函数传递的参数包括一个设备地址号(220/221/222),和一个标记值整数:

1为市电频率;2为标准工作频率。

设备号是频率发生的相别,如果A相为频率发生地,则选择220,也有一种情况是采用C相作为频率发生源。

指令格式如下

0

1

2

3

4

5

DEVID

24

1

1/2

CRCHI

CRCLO

返回数据

【WCOK】

频率修改指令,函数名:

FrequencyOut,该指令修改电源的频率,频率值的范围从45~65之间,而且指令中的频率值要x1000后的4个字节整数按高低位存放在数组的索引3~6中,指令格式:

0

1

2

3~6

7

8

DEVID

13

4

X1000

CRCHI

CRCLO

返回数据:

【WCOK】

GPS模块初始化,函数名:

GPSint,先选通道4并打开,波特率“4800,N,8,1”,指令格式如下:

0

1

2

3

4

5

80

71

82

77

73

69

P

G

R

M

I

E

该指令无返回。

时间基准通讯指令,函数名:

RDFromTimeBase,该指令不同于之前的指令,保持类似三代源的通讯协议。

格式指令如下:

1

2

3

4

5

6

7

8

9

AA

5

AA

AA

AA

AA

AA

AA

AA

返回字节长度正确的是18个字节。

返回数据的数组首先长度要是18个字节,然后比较前9个字节的数字是否和指令相同,如果不同则后面的7个字节就是读回的时间值,最后两个字节应该是CRC校验码,但源程序没有使用它。

这里要注意的是串口通讯的设置“19200,M,8,1”

返回数据:

长度18个字节

10

11

12

13

14

15

16

Lo

Hi

month

day

hour

min

second

08

20

11

14

33

44

32

10x(33\16)+33mod16=21

21

32

20

后面三个数字表示时分秒,需要计算。

相序控制指令,函数名:

PhaseModeCtrl,该指令用于修改A/B/C的相序,一般需要依次改变A/B/C的相序。

指令格式

0

1

2

3

4

5

6

DEVID

17

2

0/1

0

CRCHI

CRCLO

0:

正1:

返回数据:

【WCOK】

相位偏离度指令,函数名:

PhaseOffset,该指令使相位发生数值偏移,偏移的数值乘100,然后存放在2个BYTES的数组内(两个字节的整数)。

指令格式如下

0

1

2

3~4

5~6

DEVID

22

2

DATx100

CRC

返回数据:

【WCOK】

电流通/断状态查询指令,函数名:

ReadCurrentOnOff,这个指令在校表软件中无用,是一个作废的指令。

作用判断某个表位的电流断通状态,指令格式:

0

1

2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1