Definição da Seção CFG_ETH
1/11 LAS, 11/05/2009
Configuração do ethernet do Quartzo.doc
Introdução: O objetivo deste relatório é fazer uma descrição sobre a seção 6 (CFG_ETH) do mapa de memória da SDRAM,
A configuração inicial da CPU do Citrino deverá ser feita em várias seções da SDRAM como já foi comentado no arquivo Mapa de memória para configuração CitrinoTools.doc. CitrinoTools.doc . Na seção 6 serão salvas algumas configurações do equipamento e configurações de rede (senha, IP, netmask, etc). No item abaixo está definido como a seção s eção 6 deverá ser lida ou escrita através da CPU do Citrino. Definição da seção 6 (CFG_ETH): Configuração Ethernet
Como já foi explicado anteriormente, a SDRAM contém 16MB e sua memória foi separada em várias seções. Na Tabela 2 abaixo está definido como os dados deverão estar armazenados na memória da SDRAM a partir do endereço 0x00EA 0000 (seção 6). É importante salientar que sempre trabalharemos com o formato big endian (primeiro é enviado o byte mais significativo e depois o byte menos significativo). Nome
Hardware Configuration Via TCP
CPU Configuration Via UDP/TCP
Network Configuration Via UDP/TCP
TCP Client Configuration
Endereço de memória
Função
Ocupação da memória (bytes)
0x00EA 0000 0x00EA 0008 0x00EA 0010 0x00EA 0018 0x00EA 0020 0x00EA 0028 0x00EA 0030 0x00EA 0038 0x00EA 0040 0x00EA 0048 0x00EA 0050 0x00EA 0058 0x00EA 0060 0x00EA 00A0 0x00EA 00A4 0x00EA 00A6 0x00EA 00A8 0x00EA 00B0 0x00EA 00C0 0x00EA 00C4 0x00EA 00E0 0x00EA 00E4 0x00EA 00F0 0x00EA 0100 0x00EA 0106 0x00EA 0130 - 0x00EA 0131 0x00EA 0132 - 0x00EA 0133 0x00EA 0134 - 0x00EA 0371 0x00EA 04F4 - 0x00EA 2CF4 0x00EA 2CF5 - 0x00EA 4000
Status (ST) Digital Input (DI) Digital Output (DO) Analog Input (AI) Analog Output (AO) Frequency Input (FI) Encoder Input (EI) Word Memory (WM) Word Fix 2 digits (WF) Double Memory (DM) Word Fix 4 digits (DF) Real Memory (RM) Free Device Identifier (DVI) Product Version (PV) Firmware Version (FV) Serial Number (SN) TAG Firmware Date (FD) Free Password Enable (PE) Password Characters (PC) Network Table (NT) MAC Address (MA) Free Client Enabled Servers Number Servers Struct[32] Poll Record Struct [512] Not used
8 8 8 8 8 8 8 8 8 8 8 8 64 4 2 2 8 16 4 28 4 12 16 6 42 2 2 32*30 512*20 4876
Tabela 1 – Mapa de memória da configuração ethernet (seção 6)
Em configurações de hardware, os dados são passados em 8 bytes divididos em Offset Address (4 bytes) e Lenght (4 bytes). Na Tabela 2 estão colocadas as definições para cada uma das funções.
Definição da Seção CFG_ETH
LAS, 11/05/2009
Configuração do ethernet do Quartzo.doc
Nome
ST DI DO AI AO FI EI WM WF DM DF RM
2/11
Informação
OFFSET ADDRESS (4 bytes) OFFSET ADDRESS (4 bytes) OFFSET ADDRESS (4 bytes) OFFSET ADDRESS (4 bytes) OFFSET ADDRESS (4 bytes) OFFSET ADDRESS (4 bytes) OFFSET ADDRESS (4 bytes) OFFSET ADDRESS (4 bytes) OFFSET ADDRESS (4 bytes) OFFSET ADDRESS (4 bytes) OFFSET ADDRESS (4 bytes) OFFSET ADDRESS (4 bytes)
Tamanho máximo de lenght
Holding (MB/TCP)
128 words 2 words 2 words 8 words 8 words 4 words 4 words 2500 words 500 words 2000 words 1000 words 2000 words
1-128 1001-1003 2001-2003 3001-3009 5001-5009 6001-6005 6101-6105 7001-9501 27001-27501 32001-34001 42001-43001 52001-54001
LENGHT (4 bytes) LENGHT (4 bytes) LENGHT (4 bytes) LENGHT (4 bytes) LENGHT (4 bytes) LENGHT (4 bytes) LENGHT (4 bytes) LENGHT (4 bytes) LENGHT (4 bytes) LENGHT (4 bytes) LENGHT (4 bytes) LENGHT (4 bytes)
Tabela 2 – Configurações de hardware
O parâmetro lenght deverá ser passado como WH, ou seja, é a quantidade de memória ocupada no formato Word, sempre enviando primeiro o byte mais significativo. Na parte de configuração de CPU, alguns parâmetros serão “ read only ”, ou seja, o usuário só poderá ler e não poderá alterar o seu conteúdo. Nome
Informação
Característica
DVI
Device Identifier (4 bytes)
PV
Product Version (2 bytes)
FV
Firmware Version (2 bytes)
SN
Serial Number (8 bytes)
TAG
TAG (16 bytes)
FD
Firmware Date (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 deverão ser 0000 Deve ser lido no seguinte formato: MSB(XX) LSB(XX). Por exemplo, se a versão do produto for 1.0, deve estar colocado o valor 0100h. O primeiro byte indica 1 e o segundo byte indica 0 (versão 1.0) Deve ser lido no seguinte formato: MSB(XX) LSB(XX). É semelhante ao mesmo raciocínio utilizado no exemplo acima. Este campo terá 8 bytes para o usuário utilizar como número de serial do produto. São 16 caracteres que o usuário poderá escrever da maneira como ele quiser. Os caracteres que não forem utilizados pelo usuário, o CitrinoTools deverá enviar como caractere nulo. Por exemplo, se usuário 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 Deve ser lido no seguinte formato: DIA(XX) MÊS(XX) ANO(XX). Por exemplo, se a data da versão 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 – Configurações para identificação do produto
Na parte de configurações de rede, cada um dos comandos terá sua particularidade. Qualquer dúvida, deve ser consultado o arquivo Configuração UDP do Citrino.doc que define os parâmetros de rede. Nome
Informação
PE PC
PASSWORD ENABLE (4 bytes) PASSWORD CHARACTER (12 bytes)
NT
IP (4 bytes)
MA
MAC ADDRESS (6 bytes)
--------GATEWAY NETMASK DHCP (2 bytes) PORTO (2 bytes) (4 bytes) (4 bytes) -----
Tabela 4 – Configurações de rede
Na parte da configuração do Cliente TCP, cada uma das variáveis das estruturas estão definidas na Tabela 5. Pode-se observar que foi limitado em 32 conexões (Server Struct) ou por 512 acessos (Poll Record Struct), Por exemplo, o usuário poderá configurar somente um IP com 512 acessos no total, ou então dividir os acessos de acordo com sua conexão. O software deverá ter o cuidado de mandar zero para as variáveis não utilizadas porque estas estruturas serão fixas e não dinâmicas.
Definição da Seção CFG_ETH
3/11 LAS, 11/05/2009
Configuração do ethernet do Quartzo.doc
Nome
Server Struct
Poll Record Struct
Endereço de memória
Função
Ocupação da memória (bytes)
0x00EA 0130 0x00EA 0132 0x00EA 0134 0x00EA 0136 0x00EA 0142 0x00EA 0146 0x00EA 0148 0x00EA 014A 0x00EA 014C 0x00EA 014E 0x00EA 0150 0x00EA 0152 0x00EA 0154 0x00EA 0160 0x00EA 0164 0x00EA 0166 0x00EA 0168 0x00EA 016A 0x00EA 016C 0x00EA 016E 0x00EA 0170 0x00EA 04F4 0x00EA 04F6 0x00EA 04F8 0x00EA 04FA 0x00EA 04FC 0x00EA 04FE 0x00EA 0500 0x00EA 0502 0x00EA 0504 0x00EA 0506 0x00EA 0508 0x00EA 050A 0x00EA 050C 0x00EA 050E 0x00EA 0510 0x00EA 0512 0x00EA 0514 0x00EA 0516 0x00EA 0518 0x00EA 051A 0x00EA 051C
Client Enabled Servers Number Server Enabled 1 Server TAG 1 Server IP 1 Server Port 1 Scan Time 1 Timeouts in ms 1 Retries 1 Poll Record Start 1 Poll Record Quantity 1 Server Enabled 2 Server TAG 2 Server IP 2 Server Port 2 Scan Time 2 Timeouts in ms 2 Retries 2 Poll Record Start 2 Poll Record Quantity 2 ... Server Device Address 1 Trigger Address WH 1 Trigger Address Bit 1 Local Var Address WH 1 Local Var Address Bit 1 Remote Var Address 1 Modbus Command 1 Quantity Variables 1 Status Error WH 1 Status Error Bit 1 Server Device Address 2 Trigger Address WH 2 Trigger Address Bit 2 Local Var Address WH 2 Local Var Address Bit 2 Remote Var Address 2 Modbus Command 2 Quantity Variables 2 Status Error WH 2 Status Error Bit 2 ...
2 2 2 12 4 2 2 2 2 2 2 2 12 4 2 2 2 2 2 2 900 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 10200
Tabela 5 – Mapa de memória da configuração do Cliente TCP
O Software CitrinoTools deverá montar graficamente a configuração do Cliente TCP muito parecida com o que foi feito para a configuração Modbus RTU. Nas figuras abaixo tem-se uma sugestão para a parte gráfica da configuração:
Definição da Seção CFG_ETH Configuração do ethernet do Quartzo.doc
Figura 1 – Sugestão
Figura 2 – Sugestão
4/11 LAS, 11/05/2009
gráfica para a configuração do Cliente Modbus TCP (Server Struct)
gráfica para a configuração do Cliente Modbus TCP (Poll Record Struct)
Abaixo está relacionado às definições e limites para cada uma das variáveis dentro das estruturas:
Definição da Seção CFG_ETH Configuração do ethernet do Quartzo.doc
5/11 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 variáveis da estrutura ST_POLLRECORD tem algumas características que serão melhor explicadas a seguir: 1.
Device Address :
Na coluna Device Address apresentada na Figura 1, é o endereço do protocolo Modbus (este endereço é herdado do protocolo Modbus-RTU). Ou seja, não basta especificar o IP do equipamento, tem que ser dado um endereço físico caso estejamos comunicando com um gateway. O software deverá verificar se a variável digitada está entre os valores inteiros 0 e 247 e também poderá ser representado pelo valor 255; 2. Trigger : Na coluna trigger apresentada na Figura 2, tem-se as seguintes opções de variáveis para fazer o trigger da comunicação: ST, DI, DO, WM, DM e Always . Ou seja, como trigger é uma variável do tipo bit , o usuário poderá digitar por exemplo, DI33, DO52, WM27.3, ST128.7, DM25.1. Se o usuário escolher Always (valor descarregado pelo software ST01.1 que é o estado HIGH do Ladder - ST01 em usTriggerWH e 1 usTriggerBit), isto significará que
Definição da Seção CFG_ETH
6/11 LAS, 11/05/2009
Configuração do ethernet do Quartzo.doc
aquele poll record será sempre executado. O software deverá verificar se a variável digitada realmente existe; 3. Local Variable : Na coluna local variable na Figura 2, tem-se as seguintes opções de variáveis: ST, DI, DO, AI, AO, WM, WF, DM, DF e RM. Por exemplo, o usuário poderá digitar, ST2, AI120, WM7000, WM22.2 (variável bit), DM500, RM734 e assim por diante. O software deverá ter o cuidado de obedecer algumas regras, como por exemplo: não escrever em AI, DI e ST<128. A definição de leitura ou escrita é feita na coluna Operation e neste momento o software deverá sinalizar erro. O software também deverá verificar se a variável digitada realmente existe; 4. Remote Variable : Na coluna remote variable na Figura 2, tem-se as seguintes opções de variáveis: 0x, 1x, 3x e 4x. Na Tabela 6 tem-se um breve descritivo sobre os comandos Modbus TCP suportados. Neste campo, o endereço deverá ser digitado da seguinte maneira:
Por exemplo – 4x10, 4x500, 0x100, 3x15, 1x200. O Sofware deverá enviar na variável usMBCmd o comando Modbus especificado. Por exemplo, se o usuário digitar 4x500 e a operação 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 máxima de leitura é de 2000. Se o usuário digitar um valor maior que este, o software deverá acusar um erro. Os limites serão explicados melhor posteriormente. ←
Tipo de Registro
Tamanho
Leitura
Escrita
Descritivo
0x (Coil Status)
1 Bit
X
X
Eventos de leitura e escrita utilizando as instruções 01, 05 e 15 do Modbus. Se a operação for de leitura (Local ← Remote), o comando 01 deve ser utilizado, se a operação for de 1 bit de escrita (Local → Remote), o comando 05 deverá ser utilizado, se a operação for maior que 1 bit de escrita (Local → Remote), o comando 15 deverá ser utilizado.
1x (Input Status) 3x (Input Register)
1 Bit
X
-
Eventos de leitura de bits utilizando a instrução 02 do Modbus
1 Word
X
-
Eventos de leitura de words utilizando a instrução 04 do Modbus
X
Eventos de leitura e escrita utilizando as instruções 03, 06, 16 e 22 do Modbus. Para se utilizar o comando 22, a seguinte seqüência deverá acontecer: Variável local do tipo bit (WM74.12), Variável remota 4x (4x00005) e a operação deverá ser de escrita (Local → Remote). Neste exemplo, o bit 12 do endereço 5 deverá ser setado ou zerado de acordo com o valor da variável WM74.12 (se este bit estiver setado, o bit 12 do endereço 5 deverá ser setado). Com relação ao comando 06, ele deverá ser utilizado quando a operação for de escrita de somente 1 word, caso a operação de escrita seja maior que 1, o comando 16 deverá ser utilizado.
4x (Holding Register)
1 Word
X
Tabela 6 – Suporte para os comandos Modbus TCP
5.
Operation : Na coluna operation na Figura 2, somente representará se a operação é de leitura (Local ← Remote) ou de escrita (Local → Remote) . O software deverá verificar compatibilidades
neste item. Por exemplo, se operação for de leitura, a variável local não poderá ser AI, DI ou ST<128; 6. Quantity : Nesta coluna é representado o número de operações 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 também deverá verificar se Endereço +
Definição da Seção CFG_ETH
7/11 LAS, 11/05/2009
Configuração do ethernet do Quartzo.doc
quantidade é maior que 65535. A quantidade está relacionada a variável do Citrino em questão (variável local). Por exemplo se o usuário configurar para leitura uma quantidade de 5 e variável local como sendo RM100, então o usuário lerá 5 RMs ou 10 Holding Registers . Porém o Software descarregará quantidade em Words na variável 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 serão dados posteriormente; 7. Error : Nesta coluna é representado o erro referente ao poll record selecionado. A função deste bit é a de disponibilizar para o usuário uma informação de que a operação desejada não foi efetuada. O usuário poderá jogar esta informação somente na região de WM. Por exemplo, WM77.0. Será considerado erro se: •
•
•
Houver timeout após n Retries: Por exemplo, se o usuário configurar 1 em usRetries, será considerado erro se houver dois timeouts seguidos. O número 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 conexão cair, ou seja o socket fechará e de tempos em tempos o firmware tentará fazer uma nova conexão. Neste caso setará o bit de erro de todos os polls associados ao servidor; Qualquer exceção contida no protocolo Modbus (leituras e escritas em regiões não permitidas, erro de tamanho de leituras e escritas, comandos não permitidos, etc.);
Se o usuário não quiser tratar os erros no Ladder bastará escolher a opção None . Se esta opção for escolhida, o software deverá colocar 32 em usErrorSttBit. Para que o software possa indicar na monitoração 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 endereço da conexão. Ou seja, a primeira conexão será representada pelo bit ST32.0. A segunda conexão será representada pelo bit ST32.1 e assim por diante até a conexão 32 ser representada pelo bit ST33.15. Se houver erro em pelo menos 1 poll Record daquela conexão, 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 deverão ser feitos pelo firmware . Observe a Tabela 7 que representa os valores das conexões em seus respectivos status. Mesmo que o usuário tenha configurado None na tabela Error , o bit ST32.x referente àquela conexão ainda assim poderá ser setado pelo firmware . Isto ocorrerá se a conexão cair ou qualquer outro erro no poll record . *
ST32 ST33
B0 B1 B2 B3
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
C8 C16 C24 C32
C7 C15 C23 C31
C6 C14 C22 C30
C5 C13 C21 C29
C4 C12 C20 C28
C3 C11 C19 C27
C2 C10 C18 C26
C1 † C9 C17 C25
Tabela 7 – Representação do diagnóstico das conexões 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 variável geral usClientEnabled estaria ativada (ou seja, igual a 1) e a variável usServerNumber será igual a 2 para este exemplo.
* †
B0 – Byte 0; B1 – Byte 1 e assim por diante
Definição da Seção CFG_ETH
8/11 LAS, 11/05/2009
Configuração do ethernet do Quartzo.doc
Server Number
Operation Mode
Address IP
Port
Scan Time
Timeout
Retries
1 2
Server Enabled Server Disabled
192.168.0.20 192.168.0.21
502 502
1 10
1 2
1 1
Tabela 8 – Exemplo de configuração 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 2 3
255 255 255
Always WM10.0 WM10.1
RM100 DO33 DM25.0
4x10 0x500 4x1500
Local ← Remote Local → Remote Local → Remote
2 1 1
None None WM100.1
Tabela 9 – Exemplo de poll Record para o servidor 1
As estruturas ST_SERVER e ST_POLLRECORD deverão 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 – Variáveis da estrutura do servidor 1 Item
usDeviceAddress
1 2 3
255 255 255
usTrigWH
ST_Offset‡ WM_Offset_1** WM_Offset_2
usTrigBit
usLocVarWH
usLocBit
usRemVar
usMBCmd
usQty
usErrWH
usErrBit
1 0 1
RM_Offset DO_Offset†† DM_Offset§§
32 DO_Bit‡‡ 0
10 500 1500
03 05 22
4 1 1
0 0 WM_Offset_3***
32 32 1
Tabela 11 – Variáveis da estrutura do Poll Record do servidor 1
Algumas observações são importantes neste exemplo. Repare que na opção 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 também que na opção 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 é mandatório para executar o poll Record. Se o bit do trigger não estiver setado, o “bloco Client” não será execultado. Outro ponto importante para ressaltar é que quando as variáveis de offset de hardware usTriggerWH (ST, DI, DO e WM), usLocalVarWH (ST, DI, DO, AI, AO, WM e WF) e usErrorSttWH (WM) forem variáveis do tipo Word ou do tipo bit , as variáveis usTriggerBit, usLocalVarBit e usErrorSttBit só poderão assumir valores de 0 a 15 e 32. Quando as variáveis de offset de hardware usTriggerWH (DM) e usLocalVarWH (DM, DF e RM) forem variáveis do tipo Double Word , as variáveis usTriggerBit e usLocalVarBit só poderão assumir valores de 0 a 31 e 32. Desta maneira, o Software deverá truncar qualquer outro tipo de possibilidade informando ao usuário quando ele digitar algo errado. Com relação ao calculo dos valores usTriggerWH, usLocalVarWH e usErrorSttWH, o software deverá utilizar os tamanhos definidos na configuração de hardware (observe a Tabela 2). Com relação aos comandos Modbus (usMBCmd), o Software deverá levar em consideração 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 variável 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) §
Definição da Seção CFG_ETH
9/11 LAS, 11/05/2009
Configuração do ethernet do Quartzo.doc
Type
Operation
usRemoteVarAddress
usLocVarWH
usLocBit
usQty
usMBCmd
0x..... 1x..... 3x..... 4x..... 0x..... 0x..... 4x..... 4x..... 4x.....
-
0-15 ou 32 0-15 ou 32 32 32 0-15 ou 32 0-15 ou 32 0-15 32 32
1 >1 1 1 >1
01 02 04 03 05 15 22 06 16
Local ← Remote Bit Local ← Remote Local ← Remote Word Local ← Remote Local → Remote Bit Local → Remote Local → Remote Local → Remote Word Local → Remote
Tabela 12 – Definição do comando Modbus na variável 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 5
1 1
DM220.0 RM30
0x42000 4x52000
Local ← Remote Local → Remote
5 3
WM100.0 None
Tabela 13 – Exemplo de poll Record para o servidor 2
As estruturas ST_SERVER e ST_POLLRECORD deverão 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 – Variáveis da estrutura do servidor 2
Item
usDeviceAddress
usTrigWH
usTrigBit
usLocVarWH
usLocBit
usRemVar
usMBCmd
usQty
usErrWH
usErrBit
1 2
1 1
ST_Offset_1 ST_Offset_2
1 5
DM_Offset RM_Offset
0 32
42000 52000
01 16
5 6
WM_Offset 0
0 32
Tabela 15 – Variáveis da estrutura do Poll Record do servidor 2
Acima, as variáveis DM, WM, e RM
offset , terão 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 três primeiros poll records foram ocupados pelo primeiro servidor ( Tabela 9). Observe também que a variável usQty = 5 no primeiro poll Record do servidor 2 da Tabela 15. Este valor se refere a quantidade de bits e não 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 variável usScanTime é igual a 10 que equivalerá a 1 segundo de scan, pois o firmware usa uma base de tempo de 0.1 segundos.
Definição da Seção CFG_ETH
10/11 LAS, 11/05/2009
Configuração do ethernet do Quartzo.doc
Características do firmware para implementar o Modbus TCP cliente:
O firmware deverá implementar o Modbus TCP Cliente com as seguintes características: 1. Implementar Threads Clients de acordo com o número de conexões dado em usServerNumber. É necessário avaliar todos os limites das variáveis contidas na Tabela 16 antes de abrir a conexão. Por questões de otimização é importante dizer no manual a boa prática de abrir uma conexão por IP. Desta maneira, cada conexão gerenciará as suas estruturas ST_SERVER e ST_POLLRECORD; Variáveis
Limites para abrir conexão
≤ 1 usServerEnabled 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 conexão
2. Fazer gerenciamento de conexões, 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 conexão. 3. Implementar os comandos: Comandos Modbus
Tamanho máximo
01 – Read Coil 02 – Read Discrete Input 03 – Read Holding Register 04 – Read Input Register 05 – Write Single Coil 06 – Write Single Register 15 – Write Multiples Coils 16 – Write Multiples Register 22 – Write 4X Mask Register
2000 Coils 2000 Inputs 125 Holdings 125 Holdings 1 coil 1 Holding 1968 Coils 120 Holdings 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 região de status ST32 e ST33 de acordo com a ordem de conexão. Por exemplo, imagine que três servidores tenham sido configurados. Se o servidor de número dois cair, o Status ST32.1 deverá estar setado. Assim que a conexão deste servidor for restabelecida, o Status ST32.1 deverá ser apagado; 6. A conexão deverá ser fechada pelo cliente se ocorrer “ timeout ” em todos os poll records . Como foi mostrado no item 2, haverá tentativas de reconexão de tempos em tempos; 7. Quando uma nova configuração for descarregada, fazer um “PAUSE” em todos os poll records contidas nas threads . Depois disso é necessário fechar as threads antes de salvar em flash a nova configuração. Somente após a configuração estar salva é que as Threads poderão ser reiniciadas; 8. Implementar a monitoração das threads para serem mortas caso não se consiga um toggle dentro de um determinado período. Esta implementação também é importante para logar erros caso a thread seja morta;
Definição da Seção CFG_ETH
11/11 LAS, 11/05/2009
Configuração do ethernet do Quartzo.doc
Controle de alterações Data
Versão
13/fev/2006 12/nov/2008
1.0 1.1
Responsável
Comentários
Leonardo Scarabelli Versão inicial do documento Leonardo Scarabelli Foi adicionado configuração Cliente TCP