在本章主要讲述如何利用软件通过通讯口来操控该系列仪表。本章内容的掌握需要您具有MODBUS协议的知识储备并且通读了本册其它章节所有内容,对本产品功能和应用概念有较全面了解。
本章内容包括:MODBUS协议简述,通讯应用格式详解,本机的应用细节及参量地址表。
MODBUS 通讯协议 实际应用案例 简介 PLC伺服驱动器 使用 RS-232/485 串联通讯接口时,每一台伺服驱动器必须预先在参数『0300』上设定其伺 服驱动器局号,电脑便根据局号对个别的伺服驱动器实施控制。通讯的方法是使用MODBUS
networks 通讯,其中MODBUS 可使用下列两种模式:ASCII(American Standard Code for
information interchange)模式或RTU(Remote Terminal Unit)模式。使用者可于参数『0302』
上设定所需的通讯协议。以下说明MODBUS 通讯。 编码意义
ASCII 模式:
每个 8-bits 数据由两个ASCII 字节所组成。例如:一个1-byte 数据64H(十六进位表示法),
以ASCII”64”表示,包含了’6’的ASCII 码(36H)及’4’的ASCII 码(34H)。 数字 0 至9 与字母A 至F 的ASCII 码,如下表图示: 字节符号 ‘0’ ‘1’ ‘2’ ‘3’ ‘4’ ‘5’ ‘6’ ‘7’
对应ASCII 码 30H 31H 32H 33H 34H 35H 36H 37H 字节符号‘8’ ‘9’ ‘A’ ‘B’ ‘C’ ‘D’ ‘E’ ‘F’
对应ASCII 码 38H 39H 41H 42H 43H 44H 45H 46H RTU 模式:
每个 8-bits 数据由两个4-bits 的十六进位字节所组成。例如:1-byte 数据64H。 字节结构
10 bits 字节框(用于7-bits 字节) 7N2 Start
bit 0 1 2 3 4 5 6 Stop bit
7-data bits
10-bits character frame Stop bit 7E1
Even parity Start
bit 0 1 2 3 4 5 6 Stop bit
7-data bits
10-bits character frame 7O1 Odd parity Start
bit 0 1 2 3 4 5 6 Stop bit
7-data bits
10-bits character frame 第八章通讯功能Revision Apr, 2011 8-9
11 bits 字节框(用于8-bits 字节) 8N2 Start
bit 0 1 2 3 4 5 6 Stop bit
8-data bits
11-bits character frame Stop 7 bit 8E1 Start
bit 0 1 2 3 4 5 6 Stop bit
8-data bits
11-bits character frame 7 Even parity 8O1 Start
bit 0 1 2 3 4 5 6 Stop bit
8-data bits
11-bits character frame 7 Odd parity
通讯数据结构
通讯数据格式框: ASCII 模式:
STX 起始字节’:’(3AH)
ADR 通讯地址:1-byte 包含了2 个ASCII 码 CMD 指令码:1-byte 包含了2 个ASCII 码 DATA(n-1) …….
DATA(0)
数据内容:n-word =2n-byte 包含了4n 个ASCII 码,n<=12 LRC 指令码:1-byte 包含了2 个ASCII 码 End 1 结束码1:(0DH)(CR) End 0 结束码0:(0AH)(LF) RTU 模式:
STX 超过10ms 的静止时段 ADR 通讯地址:1-byte CMD 指令码:1-byte DATA(n-1) …….
DATA(0)
数据内容:n-word =2n-byte,n<=12 CRC 指令码:1-byte
End 1 超过10ms 的静止时段 第八章通讯功能
8-10 Revision Apr, 2011
通讯数据格式框内各项细目说明于下: STX(通讯起始)
ASCII 模式:’:’字节。
RTU 模式:超过10ms 的静止时段。 ADR(通讯地址)
合法的通讯地址范围在 1 到254 之间。例如:对局号为16(十六进位10H)的伺服驱动 器进行通讯:
ASCII 模式:ADR=’1’,’0’ => ‘1’=31H,’0’=30H RTU 模式:ADR = 10H
CMD(指令指令)及DATA(数据字节)
数据字节的格式依指令码而定。常用的指令码叙述如下。 指令码:03H,读取N 个字(word)
N 最大为10。例如:从局号01H 伺服驱动器的起始地址0200H 连续读取2 个字。
ASCII 模式:
指令信息: 回应信息: STX ‘:’ STX ‘:’ ADR ‘0’ ‘0’ ‘1’
ADR ‘1’
CMD ‘0’ ‘0’ ‘3’ CMD ‘3’ ‘0’ ‘0’ ‘2’
数据数
(以 byte 计算) ‘4' ‘0’ ‘0’
起始数据位置 ‘0’ ‘0’ ‘0’ ‘B’ ‘0’
起始数据地址 0200H 的内容 ‘1’ ‘0’ ‘1’ 数据数目 ‘2’ ‘F’
LRC Check ‘F’ ‘4’ ‘8’
第二笔数据地址 0201H 的内容 ‘0’
End 1 (0DH)(CR) ‘E’ End 0 (0AH)(LF) LRC Check ‘8’
End 1 (0DH)(CR) End 0 (0AH)(LF) 第八章通讯功能
Revision Apr, 2011 8-11 RTU 模式:
指令信息: 回应信息: ADR 01H ADR 01H CMD 03H CMD 03H 02H(高位组) 起始数据位置 00H(低位组) 数据数
(以 byte 计算) 04H
数据数 00H 00H(高位组) (以 word 计算) 02H 起始数据地址
0200H 的内容B1H(低位组)
CRC Check Low C5H(低位组) 1FH(高位组) CRC Check High B3H(高位组) 第二笔数据地址
0201H 的内容40H(低位组) CRC Check Low A3H(低位组) CRC Check High D4H(高位组) 指令码:06H,写入1 个字(word)
例如:将 100(0064H)写入到局号为01H 伺服驱动器的起始地址0200H。 ASCII 模式:
指令信息: 回应信息: STX ‘:’ STX ‘:’ ADR ‘0’ ‘0’ ‘1’ ADR ‘1’
CMD ‘0’ ‘0’ ‘6’ CMD ‘6’ ‘0’ ‘0’ ‘2’ ‘2' ‘0’ ‘0’
起始数据地址 ‘0’
起始数据地址 ‘0’ ‘0’ ‘0’ ‘0’ ‘0’ ‘6’ ‘6’ 数据内容 ‘4’
数据内容 ‘4’
LRC Check ‘9’ ‘9’ ‘3’
LRC Check ‘3’
End 1 (0DH)(CR) End 1 (0DH)(CR) End 0 (0AH)(LF) End 0 (0AH)(LF) 第八章通讯功能
8-12 Revision Apr, 2011 RTU 模式:
指令信息: 回应信息: ADR 01H ADR 01H CMD 06H CMD 06H
02H(高位组) 02H(高位组) 起始数据地址 00H(低位组) 起始数据地址 00H(低位组)
00H(高位组) 00H(高位组) 数据内容
64H(低位组) 数据内容
64H(低位组)
CRC Check Low 89H(低位组) CRC Check Low 89H(低位组) CRC Check High 99H(高位组) CRC Check High 99H(高位组) LRC(ASCII 模式)与CRC(RTU 模式)侦误值计算: ASCII 模式:
ASCII 模式采用LRC(Longitudinal Redundancy Check)侦误值。LRC 侦误值乃是从
ADR 至最后一笔数据内容加总,得到的结果以256 为单位,超出的部分予以去除(例如:
加总后得到的结果为十六进位的128H 则只取28H),然后计算二的补数,之后所得到
的结果即为LRC 侦误值。
例如:从局号为 01H 伺服驱动器的0201H 地址读取1 个字(word)。 STX ‘:’ ‘0’ ADR ‘1’ ‘0’ CMD ‘3’ ‘0’ ‘2’ ‘0’
起始数据地址 ‘1’ ‘0’ ‘0’ ‘0’
数据数 ‘1’
‘F’
LRC Check ‘8’
End 1 (0DH)(CR) End 0 (0AH)(LF)
01H+03H+02H+01H+00H+01H = 08H
对08H 取二的补数为F8H,故知LRC 为’F’,’8’。 第八章通讯功能
Revision Apr, 2011 8-13 RTU 模式:
RTU 模式采用CRC(Cyclical Redundancy Check)侦误值。 CRC 侦误值计算以下列步骤说明:
步骤一:载入一个内容为 FFFFH 之16-bits 寄存器,称之为『CRC』寄存器。 步骤二:将指令信息的第一个位组与16-bits CRC 寄存器的低位组进行Exclusive OR 运
算,并将结果存回CRC 寄存器。
步骤三:检查 CRC 寄存器的最低位(LSB),若此位为0,则右移一位;若此位为1,
则CRC 寄存器值右移一位后,再与A001H 进行Exclusive OR 运算。 步骤四:回到步骤三,直到步骤三已被执行过 8 次,才进到步骤五。 步骤五:对指令信息的下一个位组重复步骤二到步骤四,直到所有位组皆完全处理过,
此时CRC 寄存器的内容即是CRC 侦误值。
说明:计算出 CRC 侦误值之后,在指令信息中,须先填上CRC 的低位,再填上CRC
的高位,请参考以下例子。 例如:从局号为01H 伺服驱动器的0101H 地址读取2 个字(word)。从ADR 至数据数
的最后一位组所算出的CRC 寄存器的最后内容为3794H,则其指令信息如下所示,须注
意的是94H 于37H 之前传送。 指令信息: ARD 01H CMD 03H
01H(高位组) 起始数据位置 01H(低位组) 00H(高位组)
数据数(以 word 计) 02H(低位组)
CRC Check Low 94H(低位组) CRC Check High 37H(高位组) End1、End0(通讯结束) ASCII 模式:
以(0DH)即字节为’\\r’『carriage return』及(0AH)即字节为’\\n’『new line』,代表通讯结束。 RTU 模式:
超过 10ms 的静止时段代表通讯结束。 第八章通讯功能
8-14 Revision Apr, 2011 范例:
下例乃以 C 语言产生CRC 值。此函数需要两个参数: unsigned char* data; unsigned char length
此函数将回传unsigned integer 型态之CRC 值。
unsigned int crc_chk(unsigned char* data, unsigned char length) { int j;
unsigned int reg_crc=0xFFFF; while( length-- ) { reg_crc^= *data++; for (j=0; j<8; j++ ) {
if( reg_crc & 0x01 ) { /*LSB(bit 0 ) = 1 */ reg_crc = (reg_crc >> 1)^0xA001; } else {
reg_crc = (reg_crc>>1); } } }
return reg_crc; }
个人计算机通讯程序范例: #include #define PORT 0x03F8 /* the address of COM 1 */ #define THR 0x0000 #define RDR 0x0000 #define BRDL 0x0000 #define IER 0x0001 #define BRDH 0x0001 #define LCR 0x0003 #define MCR 0x0004 #define LSR 0x0005 #define MSR 0x0006 unsigned char rdat[60]; /* read 2 data from address 0200H of ASD with address 1 */ unsigned char tdat[60]={‘:’,’0’,’1’,’0’,’3’,’0’,’2’,’0’,’0’,’0’,’0’,’0’,’2’,’F’,’8’,’\\r’,’\\n’}; 第八章通讯功能 Revision Apr, 2011 8-15 void main() { int I; outportb(PORT+MCR,0x08); /* interrupt enable */ outportb(PORT+IER,0x01); /* interrupt as data in */ outportb(PORT+LCR,( inportb(PORT+LCR) | 0x80 ) ); /* the BRDL/BRDH can be access as LCR.b7 == 1 */ outportb(PORT+BRDL,12); outportb(PORT+BRDH,0x00); outportb(PORT+LCR,0x06); /* set prorocol <7,E,1> = 1AH, <7,O,1> = 0AH <8,N,2> = 07H <8,E,1> = 1BH <8,O,1> = 0BH */ for( I = 0; I<=16; I++ ) { while( !(inportb(PORT+LSR) & 0x20) ); /* wait until THR empty */ outportb(PORT+THR,tdat[I]); /* send data to THR */ } I = 0; while( !kbhit() ) { if( inportb(PORT+LSR)&0x01 ) { /* b0==1, read data ready */ rdat[I++] = inportb(PORT+RDR); /* read data from RDR */ } } } 第八章通讯功能 8-16 Revision Apr, 2011 通讯参数的写入与读出 本伺服驱动器所有参数细目请参照第八章『参数与功能』,经由通讯所能够写入或读出之参 数说明如下。 本参数共分五群:第0群属监控参数,第1群属基本参数,第2群属扩展参数,第3群为通讯参 数,第4群为诊断参数。 _ 1.1 MODBUS协议简述 ACRXXXE系列仪表使用的是MODBUS-RTU通讯协议,MODBUS协议详细定义了校验码、数据序列等,这些都是特定数据交换的必要内容。MODBUS协议在一根通讯线上使用主从应答式连接(半双工),这意味着在一根单独的通讯线上信号沿着相反的两个方向传输。首先,主计算机的信号寻址到一台唯一的终端设备(从机),然后,终端设备发出的应答信号以相反的方向传输给主机。 MODBUS协议只允许在主机(PC,PLC等)和终端设备之间通讯,而不允许独立的终端设备之间的数据交换,这样各终端设备不会在它们初始化时占据通讯线路,而仅限于响应到达本机的查询信号。 1.2.1 查询 查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。 1.2.2 回应 如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从设备收集的数据:如寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。 1.3 传输方式 传输方式是指一个数据帧内一系列独立的数据结构以及用于传输数据的有限规则,下面定义了与MODBUS 协议– RTU方式相兼容的传输方式。 每个字节的位: • 1个起始位 • 8个数据位,最小的有效位先发送 • 无奇偶校验位 • 1个停止位 错误检测(Error checking):CRC(循环冗余校验) 1.4 协议 当数据帧到达终端设备时,它通过一个简单的“端口”进入被寻址到的设备,该设备去掉数据帧的“信封”(数据头),读取数据,如果没有错误,就执行数据所请求的任务,然后,它将自己生成的数据加入到取得的“信封”中,把数据帧返回给发送者。返回的响应数据中包含了以下内容:终端从机地址(Address)、被执行了的命令(Function)、执行命令生成的被请求数据(Data)和一个校验码(Check)。发生任何错误都不会有成功的响应,或者返回一个错误指示帧。 1.4.1 数据帧格式 Address Function Data Check 8-Bits 8-Bits N x 8-Bits 16-Bits 1.4.2 地址(Address)域 地址域在帧的开始部分,由一个字节(8位二进制码)组成,十进制为0~255,在我们的系统中只使用1~247,其它地址保留。这些位标明了用户指定的终端设备的地址,该设备将接收来自与之相连的主机数据。每个终端设备的地址必须是唯一的,仅仅被寻址到的终端会响应包含了该地址的查询。当终端发送回一个响应,响应中的从机地址数据便告诉了主机哪台终端正与之进行通信。 1.4.3 功能(Function)域 功能域代码告诉了被寻址到的终端执行何种功能。下表列出了该系列仪表用到的功能码,以及它们的意义和功能。 代码 意义 行为 03 读数据寄存器 获得一个或多个寄存器的当前二进制值 16 预置多寄存器 设定二进制值到一系列多寄存器中(不对ACRXXXE开放) 1.4.4 数据(Data)域 数据域包含了终端执行特定功能所需要的数据或者终端响应查询时采集到的数据。这些数据的内容可能是数值、参考地址或者设置值。例如:功能域码告诉终端读取一个寄存器,数据域则需要指明从哪个寄存器开始及读取多少个数据,内嵌的地址和数据依照类型和从机之间的不同内容而有所不同。 1.4.5 错误校验(Check)域 该域允许主机和终端检查传输过程中的错误。有时,由于电噪声和其它干扰,一组数据在从一个设备传输到另一个设备时在线路上可能会发生一些改变,出错校验能够保证主机或者终端不去响应那些传输过程中发生了改变的数据,这就提高了系统的安全性和效率,错误校验使用了16位循环冗余的方法(CRC16)。 1.5 错误检测的方法 错误校验(CRC)域占用两个字节,包含了一个16位的二进制值。CRC值由传输设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算CRC值,然后与接收到的CRC域中的值进行比较,如果这两个值不相等,就发生了错误。 CRC运算时,首先将一个16位的寄存器预置为全1,然后连续把数据帧中的每个字节中的8位与该寄存器的当前值进行运算,仅仅每个字节的8个数据位参与生成CRC,起始位和终止位以及可能使用的奇偶位都不影响CRC。在生成CRC时,每个字节的8位与寄存器中的内容进行异或,然后将结果向低位移位,高位则用“0”补充,最低位(LSB)移出并检测,如果是1,该寄存器就与一个预设的固定值(0A001H)进行一次异或运算,如果最低位为0,不作任何处理。 上述处理重复进行,直到执行完了8次移位操作,当最后一位(第8位)移完以后,下一个8位字节与寄存器的当前值进行异或运算,同样进行上述的另一个8次移位异或操作,当数据帧中的所有字节都作了处理,生成的最终值就是CRC值。 生成一个CRC的流程为: 1 预置一个16位寄存器为0FFFFH(全1),称之为CRC寄存器。 2 把数据帧中的第一个字节的8位与CRC寄存器中的低字节进行异或运算,结果存回CRC寄存器。 3 将CRC寄存器向右移一位,最高位填以0,最低位移出并检测。 4 如果最低位为0:重复第三步(下一次移位);如果最低位为1: 将CRC寄存器与一个预设的固定值(0A001H)进行异或运算。 5 重复第三步和第四步直到8次移位。这样处理完了一个完整的八位。 6 重复第2步到第5步来处理下一个八位,直到所有的字节处理结束。 7 最终CRC寄存器的值就是CRC的值。 此外还有一种利用预设的表格计算CRC的方法,它的主要特点是计算速度快,但是表格需要较大的存储空间,该方法此处不再赘述,请参阅相关资料。 1.6 通讯应用格式祥解 本节所举实例将尽可能的使用如图所示的格式,(数字为16进制)。 Addr Fun Data start reg hi Data start reg lo Data #of regs hi Data #of regs lo CRC16 lo CRC16hi 01H 03H 00H 00H 00H 03H 05H CBH Addr:从机地址 Fun:功能码 Data start reg hi:数据起始地址 寄存器高字节 Data start reg lo:数据起始地址 寄存器低字节 Data #of reg hi:数据读取个数 寄存器高字节 Data #of reg lo:数据读取个数 寄存器低字节 CRC16 Hi: 循环冗余校验 高字节 CRC16 Lo: 循环冗余校验 低字节 1.6.1 读数据(功能码03) l 查询数据帧 此功能允许用户获得设备采集与记录的数据及系统参数。主机一次请求的数据个数没有限制,但不能超出定义的地址范围。 下面的例子是从01号从机读3个采集到的基本数据(数据帧中每个地址占用2个字节)UA、UB、UC,其中UA的地址为0025H, UB的地址为0026H, UC的地址为0027H。 Addr Fun Data start Addr hi Datastart Addr lo Data#of regs hi Data #of regs lo CRC16 lo CRC16 hi 01H 03H 00H 25H 00H 03H 14H 00H l 响应数据帧 响应包含从机地址、功能码、数据的数量和CRC错误校验。 下面的例子是读取UA、UB、UC (UA=082CH,UB=082AH,UC=082CH的响应。 Addr Fun Byte count Data1 hi Data1 lo Data2 hi Data2 lo Data3 hi Data3 lo CRC16 lo CRC16 hi 01H 03H 06H 08H 2CH 08H 2AH 08H 2CH 94H 4EH l 错误指示码 如果主机请求的地址不存在则返回错误指示码:FFH。 1.6.2 预置多寄存器(功能码16,不对ACRXXXE开放) l 查询数据帧 功能码16允许用户改变多个寄存器的内容,该仪表中系统参数、开关量输出状态等可用此功能号写入。主机一次最多可以写入16个(32字节)数据。 下面的例子是预置ACR220EK、ACR320EFK及ACR420EK地址都为1时同时输出开关量Do1和Do2。 ACR220EK: Addr Fun Data Start reg hi Data start reg lo Data #of regs hi Data #of regs lo Bytecount Value hi Value lo CRC lo CRC hi 01H 10H 00H 22H 00H 01H 02 H 30H 00H B4H D2H ACR420EK: Addr Fun Data Start reg hi Data start reg lo Data #of regs hi Data #of regs lo Bytecount Value hi Value lo CRC lo CRC hi 01H 10H 00H 22H 00H 01H 02 H C0H 00H F0H D2H ACR320EFK: Addr Fun Data Start reg hi Data start reg lo Data #of regs hi Data #of regs lo Value hi Value lo CRC lo CRC hi 01H 10H 00H 05H 00H 01H 00H C0H 0DH 96H l 响应数据帧 对于预置单寄存器请求的正常响应是在寄存器值改变以后回应机器地址、功能号、数据起始地址、数据个数(ACR320EFK为数据字节数)、CRC校验码。如图。 ACR220EK和ACR420EK: Addr Fun Data start reg hi Data start reg lo Data #of regs hi Data #of regs lo CRC16 lo CRC16 hi 01H 10H 00H 22H 00H 01H A1H C3H ACR320EFK: Addr Fun Data start reg hi Data start reg lo Bytecount CRC16 lo CRC16 hi 01H 10H 00H 05H 02H 9FH 91H l 错误指示码 如果主机请求的地址不存在或数据个数不正确则返回错误指示码:FFH。 1.7 ACRXXXE的应用细节及参量地址表 该系列测量值用Modbus-RTU 通讯规约的03号命令读出。 通讯值与实际值之间的对应关系如下表:(约定Val_t为通讯读出值,Val_s为实际值) 适用参量 对应关系 单位 电压值UA、UB、UC Val_s=(Val_t /10000)*(10^DPT) 伏(V) 电流值IA、IB、IC sign Val_s=(Val_t /10000)*(10^DCT) 安培(A) 功率值PA、 PB、 PC、P、 QA、 QB、QC、Q Val_s=(-1) (Val_t /10000)*(10^DPQ) 瓦(W)、 乏(Var) 电度量一次侧值EpI、 EpE、EqL、EqC Val_s=Val_t*PT*CT 瓦时(wh) 乏时(varh) 功率因数值PFA、PFB、PFC、PFS Val_s=Val_t / 1000 无单位 频率FR Val_s=Val_t / 100 赫兹(Hz) 范例:UA的通讯读出值为08C6H(2246),DPT为5,则UA的实际值 Va =(2246/10000)*(10^5) = 22.46KV。 IA的通讯读出值为0FA0H(4000),DCT为3,则IA的实际值 Ia =(4000/10000)*(10^3) = 400.0A。 几点说明: 1 数据类型:“BYTE”指1个字节;“word” 指16位无符号整数;“Integer”指16位有符号整数;“Dword” 指32位无符号整数,“Fword”指32位浮点数。 2 读写属性:“R”只读,读参量用03H号命令;“R/W”可读可写,写系统参量用10H号命令。禁止向未列出的或不具可写属性的地址写入。 3 波特率的设定范围4800 bps,9600 bps,19200 bps,38400 bps.在此范围外的设定是不允许的。如果写入超范围的设定值,仪表会启用默认波特率:38400 bps。 4 ACR320EFK所测电能值均为二次侧电能。高字节在前,低字节在后,单位WH 或VARH, 统计一次侧电能数据的时候,请乘以相应的变比。例如10KV/100V,75A/5A 的仪表,请在计量抄表的数据乘以PT=100和CT=15 的乘积1500。 5 ACR320EFK提供4 路开关量输入功能和2路继电器开关量输出功能。4 路开关输入是采用湿接点电阻开关信号输入方式,仪表内部配备+5V 的工作电源,无须外部供电。当外部接通的时候,经过仪表开关输入模块DI 采集其为接通信息、显示为1;当外部断开的时候,经过仪表开关输入模块DI 采集其为断开信息、显示为0。开关量输入模块不仅能够采集和显示本地的开关信息,同时可以通过仪表的数字接口RS485 实现远程传输功能,即“遥信”功能;2路继电器输出功能可用于各种场所下的报警指示、保护控制等输出功能。在开关输出有效的时候,继电器输出导通,显示为1;开关输出关闭的时候,显示为0,继电器输出关断。 6 ACRXXXE(K)电度一次侧时的值采用浮点变量数据类型。它用符号位表示数的符号,用阶码和尾数表示数的大小。仪表采用的数据格式为IEEE754数据格式具有24位精度,尾数的高位始终为“1”,因而不保存,位的 分布如下 ● 1位符号位; ● 8位指数位; ● 23位尾数。 符号位是最高位,尾数为最低的23位,按字节描述如下: 地址 +0 +1 +2 +3 内容 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM 其中, S:符号位,1表示负,0表示正; E:阶码(在两个字节中)偏移为127; M:23位尾数,最高位为“1”。 具体举例如下: 读出0 10001110 100 1011 1010 1100 0000 0000B 0 代表符号位,“1”为负,“0”为正; 10001110 为计算指数,设为a, a为10进制,a为142; 100 1011 1010 1100 0000 0000 为计算尾数,设为b,b为10进制,b为4959232。 计算公式: 一次侧电量= 上例计算结果为: ==52140 因篇幅问题不能全部显示,请点此查看更多更全内容