Você está na página 1de 11

Definio da Seo CFG_ETH 1/11

Configurao do ethernet do Quartzo.doc LAS, 11/05/2009


Introduo:

O objetivo deste relatrio fazer uma descrio sobre a seo 6 (CFG_ETH) do mapa de memria da SDRAM,

A configurao inicial da CPU do Citrino dever ser feita em vrias sees da SDRAM como j foi
comentado no arquivo Mapa de memria para configurao CitrinoTools.doc. Na seo 6 sero salvas
algumas configuraes do equipamento e configuraes de rede (senha, IP, netmask, etc).
No item abaixo est definido como a seo 6 dever ser lida ou escrita atravs da CPU do Citrino.

Definio da seo 6 (CFG_ETH): Configurao Ethernet

Como j foi explicado anteriormente, a SDRAM contm 16MB e sua memria foi separada em vrias
sees. Na Tabela 2 abaixo est definido como os dados devero estar armazenados na memria da SDRAM
a partir do endereo 0x00EA 0000 (seo 6).
importante salientar que sempre trabalharemos com o formato big endian (primeiro enviado o
byte mais significativo e depois o byte menos significativo).

Nome Endereo de memria Funo Ocupao da memria (bytes)
Hardware Configuration
Via TCP
0x00EA 0000 Status (ST) 8
0x00EA 0008 Digital Input (DI) 8
0x00EA 0010 Digital Output (DO) 8
0x00EA 0018 Analog Input (AI) 8
0x00EA 0020 Analog Output (AO) 8
0x00EA 0028 Frequency Input (FI) 8
0x00EA 0030 Encoder Input (EI) 8
0x00EA 0038 Word Memory (WM) 8
0x00EA 0040 Word Fix 2 digits (WF) 8
0x00EA 0048 Double Memory (DM) 8
0x00EA 0050 Word Fix 4 digits (DF) 8
0x00EA 0058 Real Memory (RM) 8
0x00EA 0060 Free 64
CPU Configuration
Via UDP/TCP
0x00EA 00A0 Device Identifier (DVI) 4
0x00EA 00A4 Product Version (PV) 2
0x00EA 00A6 Firmware Version (FV) 2
0x00EA 00A8 Serial Number (SN) 8
0x00EA 00B0 TAG 16
0x00EA 00C0 Firmware Date (FD) 4
0x00EA 00C4 Free 28
Network Configuration
Via UDP/TCP
0x00EA 00E0 Password Enable (PE) 4
0x00EA 00E4 Password Characters (PC) 12
0x00EA 00F0 Network Table (NT) 16
0x00EA 0100 MAC Address (MA) 6
0x00EA 0106 Free 42
TCP Client Configuration
0x00EA 0130 - 0x00EA 0131 Client Enabled 2
0x00EA 0132 - 0x00EA 0133 Servers Number 2
0x00EA 0134 - 0x00EA 0371 Servers Struct[32] 32*30
0x00EA 04F4 - 0x00EA 2CF4 Poll Record Struct [512] 512*20
0x00EA 2CF5 - 0x00EA 4000 Not used 4876
Tabela 1 Mapa de memria da configurao ethernet (seo 6)

Em configuraes de hardware, os dados so passados em 8 bytes divididos em Offset Address (4
bytes) e Lenght (4 bytes). Na Tabela 2 esto colocadas as definies para cada uma das funes.
Definio da Seo CFG_ETH 2/11
Configurao do ethernet do Quartzo.doc LAS, 11/05/2009

Nome Informao Tamanho mximo de lenght Holding (MB/TCP)
ST OFFSET ADDRESS (4 bytes) LENGHT (4 bytes) 128 words 1-128
DI OFFSET ADDRESS (4 bytes) LENGHT (4 bytes) 2 words 1001-1003
DO OFFSET ADDRESS (4 bytes) LENGHT (4 bytes) 2 words 2001-2003
AI OFFSET ADDRESS (4 bytes) LENGHT (4 bytes) 8 words 3001-3009
AO OFFSET ADDRESS (4 bytes) LENGHT (4 bytes) 8 words 5001-5009
FI OFFSET ADDRESS (4 bytes) LENGHT (4 bytes) 4 words 6001-6005
EI OFFSET ADDRESS (4 bytes) LENGHT (4 bytes) 4 words 6101-6105
WM OFFSET ADDRESS (4 bytes) LENGHT (4 bytes) 2500 words 7001-9501
WF OFFSET ADDRESS (4 bytes) LENGHT (4 bytes) 500 words 27001-27501
DM OFFSET ADDRESS (4 bytes) LENGHT (4 bytes) 2000 words 32001-34001
DF OFFSET ADDRESS (4 bytes) LENGHT (4 bytes) 1000 words 42001-43001
RM OFFSET ADDRESS (4 bytes) LENGHT (4 bytes) 2000 words 52001-54001
Tabela 2 Configuraes de hardware
O parmetro lenght dever ser passado como WH, ou seja, a quantidade de memria ocupada no
formato Word, sempre enviando primeiro o byte mais significativo.
Na parte de configurao de CPU, alguns parmetros sero read only, ou seja, o usurio s poder
ler e no poder alterar o seu contedo.

Nome Informao Caracterstica
DVI Device Identifier (4 bytes)
Deve ser lido no seguinte formato: 0000XXXX. Os dois ltimos bytes devem ser o identificador
definido no formato ddf do produto. Para a MCPU 1 os dois ltimos bytes devero ser 0000
PV Product Version (2 bytes)
Deve ser lido no seguinte formato: MSB(XX) LSB(XX). Por exemplo, se a verso do produto
for 1.0, deve estar colocado o valor 0100h. O primeiro byte indica 1 e o segundo byte indica 0
(verso 1.0)
FV Firmware Version (2 bytes)
Deve ser lido no seguinte formato: MSB(XX) LSB(XX). semelhante ao mesmo raciocnio
utilizado no exemplo acima.
SN Serial Number (8 bytes) Este campo ter 8 bytes para o usurio utilizar como nmero de serial do produto.
TAG TAG (16 bytes)
So 16 caracteres que o usurio poder escrever da maneira como ele quiser. Os caracteres que
no forem utilizados pelo usurio, o CitrinoTools dever enviar como caractere nulo. Por
exemplo, se usurio escolher o TAG CPU CALDEIRA, neste campo dever ser enviado os
seguintes caracteres: 50 43 50 55 20 43 41 4C 44 45 49 52 41 00 00 00
FD Firmware Date (4 bytes)
Deve ser lido no seguinte formato: DIA(XX) MS(XX) ANO(XX). Por exemplo, se a data da
verso do firmware for 13/02/2006, deve estar colocado o valor em hexadecimal 0D020600h. O
byte 0x0D indica dia 13, o byte 0x02 indica fevereiro e o byte 0x06 indica 2006. O ltimo byte
sempre vir como 0x00h.
Tabela 3 Configuraes para identificao do produto

Na parte de configuraes de rede, cada um dos comandos ter sua particularidade. Qualquer dvida,
deve ser consultado o arquivo Configurao UDP do Citrino.doc que define os parmetros de rede.

Nome Informao
PE PASSWORD ENABLE (4 bytes) -- -- -- --
PC PASSWORD CHARACTER (12 bytes) -- -- -- --
NT IP (4 bytes)
GATEWAY
(4 bytes)
NETMASK
(4 bytes)
DHCP (2 bytes) PORTO (2 bytes)
MA MAC ADDRESS (6 bytes) -- -- -- --
Tabela 4 Configuraes de rede
Na parte da configurao do Cliente TCP, cada uma das variveis das estruturas esto definidas na
Tabela 5. Pode-se observar que foi limitado em 32 conexes (Server Struct) ou por 512 acessos (Poll Record
Struct), Por exemplo, o usurio poder configurar somente um IP com 512 acessos no total, ou ento dividir
os acessos de acordo com sua conexo. O software dever ter o cuidado de mandar zero para as variveis
no utilizadas porque estas estruturas sero fixas e no dinmicas.

Definio da Seo CFG_ETH 3/11
Configurao do ethernet do Quartzo.doc LAS, 11/05/2009

Nome Endereo de memria Funo Ocupao da memria (bytes)
0x00EA 0130 Client Enabled 2
0x00EA 0132 Servers Number 2
Server Struct
0x00EA 0134 Server Enabled 1 2
0x00EA 0136 Server TAG 1 12
0x00EA 0142 Server IP 1 4
0x00EA 0146 Server Port 1 2
0x00EA 0148 Scan Time 1 2
0x00EA 014A Timeouts in ms 1 2
0x00EA 014C Retries 1 2
0x00EA 014E Poll Record Start 1 2
0x00EA 0150 Poll Record Quantity 1 2
0x00EA 0152 Server Enabled 2 2
0x00EA 0154 Server TAG 2 12
0x00EA 0160 Server IP 2 4
0x00EA 0164 Server Port 2 2
0x00EA 0166 Scan Time 2 2
0x00EA 0168 Timeouts in ms 2 2
0x00EA 016A Retries 2 2
0x00EA 016C Poll Record Start 2 2
0x00EA 016E Poll Record Quantity 2 2
0x00EA 0170 ... 900
Poll Record Struct
0x00EA 04F4 Server Device Address 1 2
0x00EA 04F6 Trigger Address WH 1 2
0x00EA 04F8 Trigger Address Bit 1 2
0x00EA 04FA Local Var Address WH 1 2
0x00EA 04FC Local Var Address Bit 1 2
0x00EA 04FE Remote Var Address 1 2
0x00EA 0500 Modbus Command 1 2
0x00EA 0502 Quantity Variables 1 2
0x00EA 0504 Status Error WH 1 2
0x00EA 0506 Status Error Bit 1 2
0x00EA 0508 Server Device Address 2 2
0x00EA 050A Trigger Address WH 2 2
0x00EA 050C Trigger Address Bit 2 2
0x00EA 050E Local Var Address WH 2 2
0x00EA 0510 Local Var Address Bit 2 2
0x00EA 0512 Remote Var Address 2 2
0x00EA 0514 Modbus Command 2 2
0x00EA 0516 Quantity Variables 2 2
0x00EA 0518 Status Error WH 2 2
0x00EA 051A Status Error Bit 2 2
0x00EA 051C ... 10200
Tabela 5 Mapa de memria da configurao do Cliente TCP

O Software CitrinoTools dever montar graficamente a configurao do Cliente TCP muito parecida
com o que foi feito para a configurao Modbus RTU. Nas figuras abaixo tem-se uma sugesto para a parte
grfica da configurao:

Definio da Seo CFG_ETH 4/11
Configurao do ethernet do Quartzo.doc LAS, 11/05/2009

Figura 1 Sugesto grfica para a configurao do Cliente Modbus TCP (Server Struct)

Figura 2 Sugesto grfica para a configurao do Cliente Modbus TCP (Poll Record Struct)

Abaixo est relacionado s definies e limites para cada uma das variveis dentro das estruturas:


Definio da Seo CFG_ETH 5/11
Configurao do ethernet do Quartzo.doc LAS, 11/05/2009


//___Server data _________________________________________________________________
unsigned short usClientEnabled; // 1: Client Enabled 0: Client Disabled any: Error
unsigned short usServersNumber; // Number of Servers to be connected (32), if > 32 Error


//Structure that is responsable for TCP Connection_________________________________________
typedef struct ST_SERVER
{
unsigned short usServerEnabled; // 1: Server Enabled 0: Server Disabled any: Error
unsigned char ucServerIP[4]; // Error: XXX.XXX.XXX.255 or 0.0.0.0 any: is valid
unsigned short usPort; // Port connection (default: 502)
unsigned short usScanTime; // Scan Time in 0.1 sec (1 scan time 100)
unsigned short usTimeout; // Timeout Communication in 1 sec (1 Timeout 60)
unsigned short usRetries; // Number of retries if occurred timeout (0 Retries 10)
unsigned short usPollRecordStart; // Start of the list (512) any: Error
unsigned short usPollRecordQuantity; // Quantity of the list (512) any: Error
} ST_SERVER;
//_____________________________________________________________________________


//___Poll Record data structures______________________________________________________
//Structure that is responsable for Read or Write any Server_________________________________
typedef struct ST_POLLRECORD
{
unsigned short usDeviceAddress; // Modbus Device Address (default: 255)
unsigned short usTriggerWH; // Word Hardware Address offset to trigger
unsigned short usTriggerBit; // TriggerWH Bit address (0 usTriggerBit 15)
unsigned short usLocalVarWH; // Word Hardware Address offset to local variable
unsigned short usLocalVarBit; // LocalVarWH Bit address (0 usLocalVarBit 15) 32:None
unsigned short usRemoteVarAddress // Remote variable address (Holding Register)
unsigned short usMBCmd; // Modbus Command (0x 1x 3x 4x)
unsigned short usQuantity; // Quantity of variables to be read or write
unsigned short usErrorSttWH; // Word Hardware Address offset to put Error Status
unsigned short usErrorSttBit; // Bit address error (0 usErrorSttBit 15) 32:None
} ST_ POLLRECORD;
//_____________________________________________________________________________

As variveis da estrutura ST_POLLRECORD tem algumas caractersticas que sero melhor
explicadas a seguir:

1. Device Address: Na coluna Device Address apresentada na Figura 1, o endereo do
protocolo Modbus (este endereo herdado do protocolo Modbus-RTU). Ou seja, no basta
especificar o IP do equipamento, tem que ser dado um endereo fsico caso estejamos
comunicando com um gateway. O software dever verificar se a varivel digitada est entre
os valores inteiros 0 e 247 e tambm poder ser representado pelo valor 255;
2. Trigger: Na coluna trigger apresentada na Figura 2, tem-se as seguintes opes de variveis
para fazer o trigger da comunicao: ST, DI, DO, WM, DM e Always. Ou seja, como trigger
uma varivel do tipo bit, o usurio poder digitar por exemplo, DI33, DO52, WM27.3,
ST128.7, DM25.1. Se o usurio escolher Always (valor descarregado pelo software ST01.1 que
o estado HIGH do Ladder - ST01 em usTriggerWH e 1 usTriggerBit), isto significar que
Definio da Seo CFG_ETH 6/11
Configurao do ethernet do Quartzo.doc LAS, 11/05/2009
aquele poll record ser sempre executado. O software dever verificar se a varivel digitada
realmente existe;
3. Local Variable: Na coluna local variable na Figura 2, tem-se as seguintes opes de variveis:
ST, DI, DO, AI, AO, WM, WF, DM, DF e RM. Por exemplo, o usurio poder digitar, ST2,
AI120, WM7000, WM22.2 (varivel bit), DM500, RM734 e assim por diante. O software
dever ter o cuidado de obedecer algumas regras, como por exemplo: no escrever em AI, DI
e ST<128. A definio de leitura ou escrita feita na coluna Operation e neste momento o
software dever sinalizar erro. O software tambm dever verificar se a varivel digitada
realmente existe;
4. Remote Variable: Na coluna remote variable na Figura 2, tem-se as seguintes opes de
variveis: 0x, 1x, 3x e 4x. Na Tabela 6 tem-se um breve descritivo sobre os comandos Modbus
TCP suportados. Neste campo, o endereo dever ser digitado da seguinte maneira:

<Tipo> <Endereo>
Por exemplo 4x10, 4x500, 0x100, 3x15, 1x200.
O Sofware dever enviar na varivel usMBCmd o comando Modbus especificado. Por exemplo,
se o usurio digitar 4x500 e a operao for Local Remote, o software dever interpretar da
seguinte maneira:
usRemoteVarAddress = 500 (Holding Register)
usMBCmd = 03 (Comando Read Holding Register)
Vale lembrar que o software dever verificar todos os limites dos comandos Modbus contidos
na norma. Por exemplo para o comando Read Coil (01), a quantidade mxima de leitura de
2000. Se o usurio digitar um valor maior que este, o software dever acusar um erro. Os
limites sero explicados melhor posteriormente.

Tipo de
Registro
Tamanho Leitura Escrita Descritivo
0x (Coil
Status)
1 Bit X X
Eventos de leitura e escrita utilizando as instrues 01, 05 e 15 do Modbus.
Se a operao for de leitura (Local Remote), o comando 01 deve ser
utilizado, se a operao for de 1 bit de escrita (Local Remote), o
comando 05 dever ser utilizado, se a operao for maior que 1 bit de
escrita (Local Remote), o comando 15 dever ser utilizado.
1x (Input
Status)
1 Bit X - Eventos de leitura de bits utilizando a instruo 02 do Modbus
3x (Input
Register)
1 Word X - Eventos de leitura de words utilizando a instruo 04 do Modbus
4x
(Holding
Register)
1 Word X X
Eventos de leitura e escrita utilizando as instrues 03, 06, 16 e 22 do
Modbus. Para se utilizar o comando 22, a seguinte seqncia dever
acontecer: Varivel local do tipo bit (WM74.12), Varivel remota 4x
(4x00005) e a operao dever ser de escrita (Local Remote). Neste
exemplo, o bit 12 do endereo 5 dever ser setado ou zerado de acordo com
o valor da varivel WM74.12 (se este bit estiver setado, o bit 12 do
endereo 5 dever ser setado). Com relao ao comando 06, ele dever ser
utilizado quando a operao for de escrita de somente 1 word, caso a
operao de escrita seja maior que 1, o comando 16 dever ser utilizado.

Tabela 6 Suporte para os comandos Modbus TCP

5. Operation: Na coluna operation na Figura 2, somente representar se a operao de leitura
(Local Remote) ou de escrita (Local Remote). O software dever verificar compatibilidades
neste item. Por exemplo, se operao for de leitura, a varivel local no poder ser AI, DI ou
ST<128;
6. Quantity: Nesta coluna representado o nmero de operaes de leitura e/ou escrita.
Quando o comando for do tipo 4x e escrita em bit (Local Remote; comando 22 do Modbus), o
software dever travar este valor em 1. O software tambm dever verificar se Endereo +
Definio da Seo CFG_ETH 7/11
Configurao do ethernet do Quartzo.doc LAS, 11/05/2009
quantidade maior que 65535. A quantidade est relacionada a varivel do Citrino em
questo (varivel local). Por exemplo se o usurio configurar para leitura uma quantidade de 5
e varivel local como sendo RM100, ento o usurio ler 5 RMs ou 10 Holding Registers. Porm
o Software descarregar quantidade em Words na varivel usQuantity quando os comandos
3x e 4x (comandos 03, 04, 06, 16 e 22 do Modbus) forem utilizados e quantidade em bits
quando os comandos 0x e 1x (comandos 01, 02, 05 e 15) forem utilizados. Este item ser mais
bem detalhado nos exemplos que sero dados posteriormente;
7. Error: Nesta coluna representado o erro referente ao poll record selecionado. A funo
deste bit a de disponibilizar para o usurio uma informao de que a operao desejada no
foi efetuada. O usurio poder jogar esta informao somente na regio de WM. Por exemplo,
WM77.0. Ser considerado erro se:

Houver timeout aps n Retries: Por exemplo, se o usurio configurar 1 em usRetries, ser
considerado erro se houver dois timeouts seguidos. O nmero configurado e usRetries
ser a quantidade de vezes que o cliente tentar perguntar ao servidor caso tenho
acontecido o primeiro timeout daquele poll record;
Se a conexo cair, ou seja o socket fechar e de tempos em tempos o firmware tentar
fazer uma nova conexo. Neste caso setar o bit de erro de todos os polls associados ao
servidor;
Qualquer exceo contida no protocolo Modbus (leituras e escritas em regies no
permitidas, erro de tamanho de leituras e escritas, comandos no permitidos, etc.);

Se o usurio no quiser tratar os erros no Ladder bastar escolher a opo None. Se esta
opo for escolhida, o software dever colocar 32 em usErrorSttBit.
Para que o software possa indicar na monitorao se h algum erro em um determinado
servidor, qualquer erro no Poll Record daquele servidor dever ser representado nos status
ST32 e ST33 de acordo com o endereo da conexo. Ou seja, a primeira conexo ser
representada pelo bit ST32.0. A segunda conexo ser representada pelo bit ST32.1 e assim
por diante at a conexo 32 ser representada pelo bit ST33.15. Se houver erro em pelo
menos 1 poll Record daquela conexo, o seu status ST32.x dever ser setado para simbolizar
o erro. O set e o reset dos bits ST32.0 - ST32.15 e dos bits ST33.0 ST33.15 devero ser
feitos pelo firmware. Observe a Tabela 7 que representa os valores das conexes em seus
respectivos status.
Mesmo que o usurio tenha configurado None na tabela Error, o bit ST32.x referente quela
conexo ainda assim poder ser setado pelo firmware. Isto ocorrer se a conexo cair ou
qualquer outro erro no poll record.

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
ST32
B0
*
C8 C7 C6 C5 C4 C3 C2 C1


B1 C16 C15 C14 C13 C12 C11 C10 C9
ST33
B2 C24 C23 C22 C21 C20 C19 C18 C17
B3 C32 C31 C30 C29 C28 C27 C26 C25
Tabela 7 Representao do diagnstico das conexes estabelecidas no Modbus TCP cliente

Para que fique mais claro, faremos dois exemplos. Imagine que existam dois servidores configurados
de acordo com a Tabela 8. A varivel geral usClientEnabled estaria ativada (ou seja, igual a 1) e a varivel
usServerNumber ser igual a 2 para este exemplo.


*
B0 Byte 0; B1 Byte 1 e assim por diante

C1 Conexo 1; C1 Conexo 2 e assim por diante


Definio da Seo CFG_ETH 8/11
Configurao do ethernet do Quartzo.doc LAS, 11/05/2009

Server Number Operation Mode Address IP Port Scan Time Timeout Retries
1 Server Enabled 192.168.0.20 502 1 1 1
2 Server Disabled 192.168.0.21 502 10 2 1
Tabela 8 Exemplo de configurao para 2 servidores

Exemplo 1: O primeiro servidor est configurado de acordo com a Tabela 9.

Item Device Address Trigger Local Variable Remote Variable Operation Quantity Error
1 255 Always RM100 4x10 Local Remote 2 None
2 255 WM10.0 DO33 0x500 Local Remote 1 None
3 255 WM10.1 DM25.0 4x1500 Local Remote 1 WM100.1
Tabela 9 Exemplo de poll Record para o servidor 1

As estruturas ST_SERVER e ST_POLLRECORD devero ser descarregadas pelo CitrinoTools na
seguinte maneira:

usServerEnabled usServerIP[4] usPort usScanTime usTimeout usRetries usPollStr usPollQty
1 [192,168,0,20] 502 1 1 1 1 3
Tabela 10 Variveis da estrutura do servidor 1

Item usDeviceAddress usTrigWH usTrigBit usLocVarWH usLocBit usRemVar usMBCmd usQty usErrWH usErrBit
1 255 ST_Offset

1 RM_Offset

32 10 03 4 0 32
2 255 WM_Offset_1
**
0 DO_Offset

DO_Bit

500 05 1 0 32
3 255 WM_Offset_2 1 DM_Offset

0 1500 22 1 WM_Offset_3
***
1
Tabela 11 Variveis da estrutura do Poll Record do servidor 1

Algumas observaes so importantes neste exemplo. Repare que na opo Scan Time, o valor de
usScanTimeout ficou igual ao 1. Isto quer dizer que este poll Record ser executado a cada 100 ms. Mas,
repare tambm que na opo Always, o valor de usTrigWH ficou igual ao ST01.1. Isto porque este valor o
bit HIGH do Ladder fazendo com que este poll Record seja executado sempre. Ou seja, o Trigger
mandatrio para executar o poll Record. Se o bit do trigger no estiver setado, o bloco Client no ser
execultado.
Outro ponto importante para ressaltar que quando as variveis de offset de hardware
usTriggerWH (ST, DI, DO e WM), usLocalVarWH (ST, DI, DO, AI, AO, WM e WF) e usErrorSttWH
(WM) forem variveis do tipo Word ou do tipo bit, as variveis usTriggerBit, usLocalVarBit e
usErrorSttBit s podero assumir valores de 0 a 15 e 32. Quando as variveis de offset de hardware
usTriggerWH (DM) e usLocalVarWH (DM, DF e RM) forem variveis do tipo Double Word, as variveis
usTriggerBit e usLocalVarBit s podero assumir valores de 0 a 31 e 32. Desta maneira, o Software dever
truncar qualquer outro tipo de possibilidade informando ao usurio quando ele digitar algo errado.
Com relao ao calculo dos valores usTriggerWH, usLocalVarWH e usErrorSttWH, o software dever
utilizar os tamanhos definidos na configurao de hardware (observe a Tabela 2).
Com relao aos comandos Modbus (usMBCmd), o Software dever levar em considerao usQuantity,
usLocalBit, usRemoteVarAddress e Operation (leitura - Local Remote ou escrita - Local Remote). Na
Tabela 12 mostra como o software far para definir qual comando deve ser escrito na varivel usMBCmd.

ST_Offset = 1

RM_Offset = (ST+DI+DO+AI+AO+WM+WF+DM+DF) LENGTH + 2*100(+1 se 16 usLocBit 31)


**
WM_Offset_1 = (ST+DI+DO+AI+AO) LENGTH + 10

DO_Offset = (ST+DI) LENGTH + (33/32)/2

DO_Bit = [(RESTO DO/16)+15 se RESTO < 1] ou [(RESTO DO/16)-1 se RESTO 1]. Para DO33 DO_Bit = 0

DM_Offset = (ST+DI+DO+AI+AO+WM+WF) LENGTH + 2*25(+1 se 16 usLocBit 31)


***
WM_Offset_3 = (ST+DI+DO+AI+AO) LENGTH + 100
Definio da Seo CFG_ETH 9/11
Configurao do ethernet do Quartzo.doc LAS, 11/05/2009


Type Operation usRemoteVarAddress usLocVarWH usLocBit usQty usMBCmd
Bit
Local Remote 0x..... - 0-15 ou 32 - 01
Local Remote 1x..... - 0-15 ou 32 - 02
Word
Local Remote 3x..... - 32 - 04
Local Remote 4x..... - 32 - 03
Bit
Local Remote 0x..... - 0-15 ou 32 1 05
Local Remote 0x..... - 0-15 ou 32 >1 15
Local Remote 4x..... - 0-15 1 22
Word
Local Remote 4x..... - 32 1 06
Local Remote 4x..... - 32 >1 16
Tabela 12 Definio do comando Modbus na varivel usMBCmd

Exemplo 2: Imagine que o Segundo servidor esteja configurado da de acordo com a Tabela 13.

Item Device Address Local Variable Remote Variable Operation Quantity Error
4 1 DM220.0 0x42000 Local Remote 5 WM100.0
5 1 RM30 4x52000 Local Remote 3 None
Tabela 13 Exemplo de poll Record para o servidor 2

As estruturas ST_SERVER e ST_POLLRECORD devero ser descarregadas pelo CitrinoTools na
seguinte maneira:

usServerEnabled usServerIP[4] usPort usScanTime usTimeout usRetries usPollStr usPollQty
0 [192,168,0,21] 502 10 2 1 4 2
Tabela 14 Variveis da estrutura do servidor 2


Item usDeviceAddress usTrigWH usTrigBit usLocVarWH usLocBit usRemVar usMBCmd usQty usErrWH usErrBit
1 1 ST_Offset_1 1 DM_Offset 0 42000 01 5 WM_Offset 0
2 1 ST_Offset_2 5 RM_Offset 32 52000 16 6 0 32
Tabela 15 Variveis da estrutura do Poll Record do servidor 2

Acima, as variveis DM, WM, e RM offset, tero os seguintes valores:

ST_Offset_1 = 1;
ST_Offset_0 = 0;
DM_Offset = (ST+DI+DO+AI+AO+WM+WF) LENGTH + 2*220(+1 se 16 usLocBit 31);
WM_Offset = (ST+DI+DO+AI+AO) LENGTH + 100;
RM_Offset = (ST+DI+DO+AI+AO+WM+WF+DM+DF) LENGTH + 2*30(+1 se 16 usLocBit
31);

Observe que usPollStr = 4 e usPollQty = 2 na Tabela 14. Isto se deve ao fato de que os trs primeiros
poll records foram ocupados pelo primeiro servidor (Tabela 9). Observe tambm que a varivel usQty = 5 no
primeiro poll Record do servidor 2 da Tabela 15. Este valor se refere a quantidade de bits e no de words
pois o comando 01 (usMBCmd) o comando Read Coil e este se refere a bits. Outro ponto importante o
valor de Scan Time. A varivel usScanTime igual a 10 que equivaler a 1 segundo de scan, pois o firmware
usa uma base de tempo de 0.1 segundos.

Definio da Seo CFG_ETH 10/11
Configurao do ethernet do Quartzo.doc LAS, 11/05/2009
Caractersticas do firmware para implementar o Modbus TCP cliente:

O firmware dever implementar o Modbus TCP Cliente com as seguintes caractersticas:

1. Implementar Threads Clients de acordo com o nmero de conexes dado em
usServerNumber. necessrio avaliar todos os limites das variveis contidas na Tabela 16
antes de abrir a conexo. Por questes de otimizao importante dizer no manual a boa
prtica de abrir uma conexo por IP. Desta maneira, cada conexo gerenciar as suas
estruturas ST_SERVER e ST_POLLRECORD;

Variveis Limites para abrir conexo
usServerEnabled 1
ucServerIP[4] Deve ser xxx.xxx.xxx.255 or 0.0.0.0
usScanTime 1 usScanTime 100
usTimeout 1 usTimeout 60
usRetries 0 usRetries 10
usPollRecordStart 1 usPollRecordStart 512
usPollRecordQuantity 1 usPollRecordQuantity 512
Tabela 16 Limites para se abrir uma conexo

2. Fazer gerenciamento de conexes, ou seja, se um socket for fechado (quebra de cabo, queda
no servidor, etc) a Thread Client dever de tempos em tempos (ainda a ser definido) tentar
uma nova conexo.
3. Implementar os comandos:

Comandos Modbus Tamanho mximo
01 Read Coil 2000 Coils
02 Read Discrete Input 2000 Inputs
03 Read Holding Register 125 Holdings
04 Read Input Register 125 Holdings
05 Write Single Coil 1 coil
06 Write Single Register 1 Holding
15 Write Multiples Coils 1968 Coils
16 Write Multiples Register 120 Holdings
22 Write 4X Mask Register 1 Holding
Tabela 17 Comandos a serem implementados

4. Testar a funcionalidade de todos os comandos, inclusive com os limites de tamanho;
5. Implementar rotina de gerenciamento de erros. Setar os bits da regio de status ST32 e
ST33 de acordo com a ordem de conexo. Por exemplo, imagine que trs servidores tenham
sido configurados. Se o servidor de nmero dois cair, o Status ST32.1 dever estar setado.
Assim que a conexo deste servidor for restabelecida, o Status ST32.1 dever ser apagado;
6. A conexo dever ser fechada pelo cliente se ocorrer timeout em todos os poll records.
Como foi mostrado no item 2, haver tentativas de reconexo de tempos em tempos;
7. Quando uma nova configurao for descarregada, fazer um PAUSE em todos os poll records
contidas nas threads. Depois disso necessrio fechar as threads antes de salvar em flash a
nova configurao. Somente aps a configurao estar salva que as Threads podero ser
reiniciadas;
8. Implementar a monitorao das threads para serem mortas caso no se consiga um toggle
dentro de um determinado perodo. Esta implementao tambm importante para logar
erros caso a thread seja morta;


Definio da Seo CFG_ETH 11/11
Configurao do ethernet do Quartzo.doc LAS, 11/05/2009

Controle de alteraes

Data Verso Responsvel Comentrios
13/fev/2006 1.0 Leonardo Scarabelli Verso inicial do documento
12/nov/2008 1.1 Leonardo Scarabelli Foi adicionado configurao Cliente TCP

Você também pode gostar