.. include:: glb_defs.txt .. _`File system access`: .. |error table| replace:: tabela de códigos de erro Acesso ao sistema de arquivos via variável de sistema ####################################################### Este recurso foi desenvolvido para permitir que, utilizando os recursos padrões disponíveis nos protocolos de comunição (ex MODBUS) seja possível a uma aplicação externa, ler ou escrever no sistema de arquivos do controlador. Para tanto, foram defindos 4 endereços (na faixa de variaveis de sistema) que mapeiam diretamente em 4 comandos utilizados para executar qualquer um dos serviços disponíveis para acesso ao sistema de arquivo. Estes comandos são as seguintes: * FS_BEGIN_SVC comando para definir e inicializar um serviço de acesso ao sistema de arquivos. * FS_STATUS comando para obter o estado corrente de um serviço previamente solicitado. * FS_GET_DATA comando para obter os dados disponibilizados por um serviço previamente solicitado. * FS_END_SVC comando para terminar um serviço previamente solicitado. Mapa de memória ********************* A tabela a seguir define a faixa de memórias utilizada para os campos associados a cada um dos comandos disponíveis para acesso ao sistema de arquivos. ============ ====== ================= =============================================================================== Endereço R/W LABEL Descrição F 4500 W FS_BEGIN_SVC Endereço inicial do campo de especificação do serviço a ser executado : F 4599 Fim do campo F 4650 R FS_STATUS Endereço inicial do campo de status de execução do ultimo serviço requisitado : F 4689 Fim do campo F 4690 W FS_END_SVC Endereço inicial do campo de sinalização de fim de serviço : F 4699 Fim do campo F 4700 R FS_GET_DATA Endereço inicial do campo de dados associado ao serviço a ser executado : F 4849 Fim do campo ============ ====== ================= =============================================================================== .. rst-class:: advt ========= ============================================================================ |imp| Todos os pacotes de comunicação utilizados devem ter como variável inicial as variáveis definidas nesta tabela, tanto comandos de leituras, quanto de escrita. Desta forma, todos os comandos devem ser realizados em um único *frame* de comunicação para que funcionem. ========= ============================================================================ Serviços disponíveis ********************* A tabela a seguir apresenta os serviços disponíveis para serem executados via a sequência de comandos disponíveis para acesso ao sistema de arquivos, conforme apresentado anteriormante. =============== ========== =============================================================== Serviço Código Descrição OPEN FILE 9 Abre o arquivo especificado para leitura ou escrita. READ FILE 26 Obtem dados a partir da posição corrente do cursor do arquivo previamente aberto como leitura. WRITE FILE 25 Escreve os dados especificados a partir da possição corrente do cursor do arquivo previamente aberto como escrita. CLOSE FILE 10 Fecha o arquivo previamente aberto e identificado pelo **file handle** especificado. SEEK FILE 16 Posiciona o cursor do arquivo previamente aberto na posição especificada para leitura ou escrita. REMOVE FILE 17 Elimina o arquivo especificado do sistema de arquivos do controlador. READ DIR 24 Obtem informações dos objetos (arquivos e outros diretórios) de um diretório. Para obter todos os objetos de um determinado diretório, este comando deve ser executado mais de uma vez. =============== ========== =============================================================== Para cada serviço solicitado, a sequencia normal de execução dos comandos deve ser a especificada no diagrama a seguir: .. graphviz:: digraph foo { "START" -> "FS_BEGIN_SVC"; "FS_BEGIN_SVC" -> "FS_STATUS"; "FS_STATUS" -> "FS_GET_DATA" [label = "OPEN, READ"] "FS_STATUS" -> "FS_STATUS" "FS_STATUS" -> "FS_END_SVC" [label = "WRITE, CLOSE, SEEK, REMOVE"] "FS_GET_DATA" -> "FS_END_SVC" "FS_END_SVC" -> "END" } Um serviço é iniciado através do envio de um comando FS_BEGIN_SVC. Após o envio do comando, deve-se verificar o estado de execução do mesmo através do comando FS_STATUS. Este comando deve ser continuamente enviado até que a resposta indique que o serviço terminou, indicando sucesso ou erro. Se o serviço executado possuir dados, os mesmos podem ser obtidos através do comando FS_GET_DATA. Uma vez terminado o processo deve-se notificar ao controlador que o serviço está concluido através do comando de FS_END_SVC. Ocorrerá timeout do serviço pelo controlador, caso o serviço não seja acessado durante um tempo de 3 segundos, que é fixo, entre cada comando. Se ocorrer este timeout, o sistema de arquivos ficará disponível para outros serviços adivindos do mesmo canal de comunicação, o que pode ocasionar a perda do serviço iniciado. Existe também um timeout para arquivos abertos pela comunicação. Neste caso, um arquivo aberto pela comunicação, que não seja acessado depois de 10 segundos desde sua última transação, será fechado. Especificação dos comandos de acesso ao sistema de arquivo ************************************************************ Conforme já mencionado anteriormente, os serviços de acesso ao sistema de arquivo são executados através de 4 comandos a saber, FS_BEGIN_SVC, FS_STATUS, FS_GET_DATA, FS_END_SVC. As sessões seguintes definem os parâmetros para estes comandos na execução de cada um dos serviços disponíveis. Comando FS_BEGIN_SVC ============================== Este é um comando de escrita que tem por função iniciar a execução de um serviço de acesso ao sistema de arquivo no equipamento remoto. Para cada tipo de serviço, este comando possui parâmetros distindos, definidos a seguir: FS_BEGIN_SVC: OPEN FILE --------------------------- =============== ========== ============================================================= Parametro Variáveis Descrição SVC_CODE 1 Código do serviço a ser executado [9] MODE 1 Modo de abertura do arquivo. Vide tabela de :ref:`modo de abertura do arquivo ` para as opções disponíveis ATRIBUTE 1 Atributos de abertura do arquivo. Vide tabela de :ref:`atributos de abertura do arquivo ` para a opções disponíveis. NAME 1..24 Nome do arquivo a ser aberto. O nome do arquivo deve ser montado em variaveis M (ou *Holding Registers*) consecutivas, com delimitador de fim de texto igual a zero ('\0'). O nome deve conter o *path* completo do arquivo com o separador de diretórios igual a "/". \ Ex: dados/hist01.dat Total: 4..27 variáveis =========================================================================================== .. _`file_mode`: Tabela de modo de abertura de arquivo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ========== ======== ==================================================== Label Código Descrição FM_CREATE 1 Criação de arquivo para leitura e escrita FM_READ 2 Abertura de arquivo para leitura apenas FM_WRITE 4 Abertura para escrita no inicio do arquivo FM_APPEND 8 bertura para escrita no final do arquivo ========== ======== ==================================================== .. _`attr_mode`: Atributos associados ao arquivo ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ============== ============== ======================================================= Label Código (hexa) Descrição ATTR_VISIBLE 0x00 Arquivo padrao ATTR_HIDDEN 0x01 Arquivo não aparace na lista de diretórios ATTR_READONLY 0x02 Arquivo com acesso apenas de leitura ATTR_LOCK 0x04 Arquivo não pode ser apagado enquanto tiver este flag ATTR_SYSTEM 0x08 Arquivo não pode ser apagado por programa Ladder apenas pelo ambiente de programação ATTR_PROGRAM 0x10 Arquivo é um programa ladder carregável pelo PLC ATTR_PROJECT 0x20 Arquivo é um projeto do ambiente ATTR_FILE 0x40 Arquivo não é manipulado por programa Ladder (PLC como pen-drive) ATTR_DATA 0x80 Arquivo é uma base de dados carregável pelo PLC ATTR_FIFO 0x100 Arquivo é uma FIFO (buffer circular) ATTR_RECORD 0x200 Arquivo é uma coleção de registro ATTR_DIR 0x400 Entrada de diretório ============== ============== ======================================================= Sequencia de comandos para serviço FILE OPEN ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. graphviz:: digraph foo { "BEGIN" -> "FS_BEGIN_SVC(FILE OPEN)" "FS_BEGIN_SVC(FILE OPEN)" -> "FS_STATUS" [label = "ok"] "FS_BEGIN_SVC(FILE OPEN)" -> "END" [label = "error"] "FS_STATUS" -> "FS_STATUS" [label = "Pendente"] "FS_STATUS" -> "FS_GET_DATA" "FS_STATUS" -> "FS_END_SVC" [label = "error"] "FS_GET_DATA" -> "FS_END_SVC" [label = "ok, error"] "FS_END_SVC"-> "END" } FS_BEGIN_SVC: READ FILE --------------------------- =============== ========== ==================================================== Parametro Variáveis Descrição SVC_CODE 1 Código do serviço a ser executado [26] FH 1 Identificador do arquivo a ser lido (*file Handler*) obtido na serviço OPEN FILE. LEN 1 Número de bytes a serem lidos do arquivo. O conteúdo requisitado por este serviço deve ser obtido pelo comando FS_GET_DATA e será retornado para o cliente como uma sequencia de variaveis M (*Holding Register*). Quando o número de bytes solicitados for impar, o byte mais significafivo da última variavel será preenchido com um valor qualquer (inválido). O número máximo permitido é de 242 bytes. Total: 3 variáveis ================================================================================== Sequencia de comandos para serviço READ FILE ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. graphviz:: digraph foo { "BEGIN" -> "FS_BEGIN_SVC(READ FILE)" "FS_BEGIN_SVC(READ FILE)" -> "FS_STATUS" [label = "ok"] "FS_BEGIN_SVC(READ FILE)" -> "END" [label = "error"] "FS_STATUS" -> "FS_STATUS" [label = "Pendente"] "FS_STATUS" -> "FS_GET_DATA" [label = "ok"] "FS_STATUS" -> "FS_END_SVC" [label = "error"] "FS_GET_DATA" -> "FS_END_SVC" [label = "ok, error"] "FS_END_SVC"-> "END" } FS_BEGIN_SVC: WRITE FILE --------------------------- =============== ========== ==================================================== Parametro Variáveis Descrição SVC_CODE 1 Código do serviço a ser executado [25] FH 1 Identificador do arquivo a ser escrita (*file handler*) obtido na serviço OPEN FILE. LEN 1 Número de bytes a serem escritos no arquivo. Este conteudo é especificado no campo DATA como uma sequência de variaveis M (*Holding Register*). Neste caso, quando o número de bytes enviados for ímpar, o byte mais significafivo da última variavel não será processado podendo assumir qualquer valor. O valor máximo é de 240 bytes. DATA 1..120 Conteúdo a ser escrito no arquivo. Total: 4 .. 123 variáveis ================================================================================== Sequencia de comandos para serviço FILE WRITE ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. graphviz:: digraph foo { "BEGIN" -> "FS_BEGIN_SVC(FILE WRITE)" "FS_BEGIN_SVC(FILE WRITE)" -> "FS_STATUS" [label = "ok"] "FS_BEGIN_SVC(FILE WRITE)" -> "END" [label = "error"] "FS_STATUS" -> "FS_STATUS" [label = "Pendente"] "FS_STATUS" -> "FS_END_SVC" [label = "ok,error"] "FS_END_SVC"-> "END" } FS_BEGIN_SVC: CLOSE FILE --------------------------- =============== ========== ==================================================== Parametro Variáveis Descrição SVC_CODE 1 Código do serviço a ser executado [10] FH 1 Identificador do arquivo a ser fechado (*file handler*) obtido no serviço OPEN FILE. Total: 2 variáveis ================================================================================== Sequencia de comandos para serviço CLOSE FILE ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. graphviz:: digraph foo { "BEGIN" -> "FS_BEGIN_SVC(CLOSE FILE)" "FS_BEGIN_SVC(CLOSE FILE)" -> "FS_STATUS" [label = "ok"] "FS_BEGIN_SVC(CLOSE FILE)" -> "END" [label = "error"] "FS_STATUS" -> "FS_STATUS" [label = "Pendente"] "FS_STATUS" -> "FS_END_SVC" [label = "ok,error"] "FS_END_SVC"-> "END" } FS_BEGIN_SVC: SEEK FILE --------------------------- =============== ========== ==================================================== Parametro Variáveis Descrição SVC_CODE 1 Código do serviço a ser executado [16] FH 1 Identificador do arquivo a ser fechado (*file handler*) obtido na serviço OPEN FILE. ORIG 1 Origem a ser considerada para o deslocamento. \ Pode ser: 0: inicio do arquivo, 1: posição corrente do cursor, 2: fim do arquivo OFFSET 2 *Offset* em 32 bits a partir da origem especificada. A primeira variavel armazena a word (16bits) menos significativa do offset (resto da divisão inteira de **offset/0x10000**). A segunda variavel armazena a word (16bits) mais significativa do *offset*, ou seja, o valor inteiro da divisão de **offset/0x10000**. Total: 5 variáveis ================================================================================== Sequencia de comandos para serviço SEEK FILE ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. graphviz:: digraph foo { "BEGIN" -> "FS_BEGIN_SVC(SEEK FILE)" "FS_BEGIN_SVC(SEEK FILE)" -> "FS_STATUS" [label = "ok"] "FS_BEGIN_SVC(SEEK FILE)" -> "END" [label = "error"] "FS_STATUS" -> "FS_STATUS" [label = "Pendente"] "FS_STATUS" -> "FS_END_SVC" [label = "ok,error"] "FS_END_SVC"-> "END" } FS_BEGIN_SVC: REMOVE FILE --------------------------- =============== ========== ========================================================= Parametro Variáveis Descrição SVC_CODE 1 Código do serviço a ser executado [17] NAME 1..24 Nome do arquivo a ser aberto. O nome do arquivo deve ser montado em variaveis M (ou *Holding Registers*) consecutivas, com delimitador de fim de texto igual a zero. O nome deve conter o *path* completo do arquivo com o separador de diretórios igual a "/". \ Ex: dados/hist01.dat Total: 2..25 variáveis ======================================================================================= Sequencia de comandos para serviço REMOVE FILE ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. graphviz:: digraph foo { "BEGIN" -> "FS_BEGIN_SVC(REMOVE FILE)" "FS_BEGIN_SVC(REMOVE FILE)" -> "FS_STATUS" [label = "ok"] "FS_BEGIN_SVC(REMOVE FILE)" -> "END" [label = "error"] "FS_STATUS" -> "FS_STATUS" [label = "Pendente"] "FS_STATUS" -> "FS_END_SVC" [label = "ok,error"] "FS_END_SVC"-> "END" } FS_BEGIN_SVC: READ DIR --------------------------- =============== ========== ==================================================== Parametro Variáveis Descrição SVC_CODE 1 Código do serviço a ser executado [24] FLAG_INIT 1 Flag que indica quando a leitura em um diretório deve ser reinicalizada. Quando seu valor é igual a zero, o comando realiza a leitura e analisa do diretório passado neste comando. Quando diferente de zero, obtem o próximo arquivo/diretório do diretório passado inicialmente, não sendo necessário repassar o diretório novamente. PATH 1..24 Caminho absoluto de um diretório do controlador. Este deve ser montado em variaveis M (ou *Holding Registers*) consecutivas, com delimitador de fim de texto igual a zero. O separador de diretórios deve ser igual a "/". \ Ex: dados/pasta1 Total: 3..26 variáveis ================================================================================== Sequencia de comandos para serviço READ DIR ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. graphviz:: digraph foo { "BEGIN" -> "FS_BEGIN_SVC(READ DIR)" "FS_BEGIN_SVC(READ DIR)" -> "FS_STATUS" [label = "ok"] "FS_BEGIN_SVC(READ DIR)" -> "END" [label = "error"] "FS_STATUS" -> "FS_STATUS" [label = "Pendente"] "FS_STATUS" -> "FS_GET_DATA" [label = "ok"] "FS_STATUS" -> "FS_END_SVC" [label = "error"] "FS_GET_DATA" -> "FS_END_SVC" [label = "ok, error"] "FS_END_SVC"-> "END" } Códigos de retorno do comando FS_BEGIN_SVC -------------------------------------------- ================== ======== ================================================== Label Código Descrição SUCCESS 0 Função executada com sucesso \ Falhas de comunicação. Vide tabela de :ref:`falhas de comunicação ` ================== ======== ================================================== .. _`com_fail`: Códigos de retorno gerados pelo processo de comunicação ---------------------------------------------------------- ================== ======== ================================================== Label Código Descrição SUCCESS 0 Função executada com sucesso RC_CO_PENDING 62 Comando de comunicação com tratamento pendente. RC_CO_CONEX_FAIL 63 Falha no processo de conexão ou desconexão. RC_CO_COM_ERR 70 Erro genérico de comunicação. RC_CO_CHA_CLO 72 Canal de comunicação fechado (inativo). RC_CO_INV_CHA 74 Identificador do canal inválido. RC_CO_REC_TMO 79 Timeout na recepcão de caracter. RC_CO_OVR_ERR 82 Erro de *overrun*. RC_CO_PAR_ERR 83 Erro de paridade. RC_CO_FRM_ERR 84 Erro de *framming*. RC_CO_CRC_ERR 85 Erro de CRC. RC_CO_CMD_DENIED 91 Comando recusado por restrições de segurança. RC_COM_RFRM_TMO 94 Timeout na recepção de frame. ================== ======== ================================================== Para mais informações sobre códigos de erros retornados pelos controladores consulte a |error table|. Comando FS_STATUS_SVC ============================== Este é um comando de leitura que tem por função obter o status da execução de um serviço previamente iniciado pelo comando FS_BEGIN_SVC. Para todos os serviços disponíveis, o comando de status retorna os mesmos parâmetros, especificados na tabela a seguir: =============== ========== ==================================================== Parametro Variáveis Descrição STATUS_CODE 1 Código de status de execução do servico. Se igual a zero indica que o serviço ativado anteriormente foi concluido com sucesso. Se igual a 16 indica que o serviço corrente ainda esta em execução (não concluido ainda). Quando diferente de zero ou 16 indica uma condição de falha no processo. DATA_LEN 1 Quantidade de dados solicitados disponíveis para serem lidos através do comando FS_GET_DATA Total: 2 variáveis ================================================================================== Códigos de retorno do comando FS_STATUS_SVC --------------------------------------------- ===================== ======== ========================================================== Label Código Descrição SUCCESS 0 Função executada com sucesso RC_GL_CMD_PEND 16 Tratamento do comando pendente. RC_FS_FULL 26 Tabela de alocação cheia RC_FS_INV_SERVICE 23 Serviço inválido solicitado RC_FS_NO_SERVICE 24 Serviço não iniciou ou foi abortado RC_FS_INV_PWD 17 Senha inválida no processo de autenticação RC_FS_WRITE 32 Falha ao escrever dados no arquivo RC_FS_READ 31 Falha ao ler dados do arquivo RC_FS_CORRUPT 167 FBT ou DET podem estar corrompidas RC_FS_INV_OPER_MODE 168 Modo de operação incompátivel com estado do arquivo (Leitura em arquivo aberto para escrita ou vice-versa RC_FS_WRITE_LOCK 170 Arquiuvo já está aberto para escrita RC_FS_INVALIDNAME 173 O nome de arquivo é inválido RC_FS_NOTFOUND 174 O arquivo não foi encontrado RC_FS_DUPLICATED 175 O arquivo já existe RC_FS_OPEN_LIMIT 176 Numero máximo de arquivos abertos RC_FS_INVALID_HANDLE 177 *Handle* de arquivo aberto inválido RC_FS_INVALID_DIR 178 O diretório é inexistente \ Falhas de comunicação. Vide tabela de :ref:`falhas de comunicação ` ===================== ======== ========================================================== Para mais informações sobre códigos de erros retornados pelos controladores consulte a |error table|. Comando FS_GET_DATA_SVC ============================== Este é um comando de leitura que tem por função obter os dados solicitados pelo serviço previamente iniciado pelo comando FS_BEGIN_SVC. Para cada tipo de serviço, este comando possui parâmetros distindos, definidos a seguir: FS_GET_DATA_SVC: OPEN FILE --------------------------- =============== ========== ==================================================== Parametro Variáveis Descrição FH 1 *File handle* do arquivo aberto Total: 1 variáveis ================================================================================== FS_GET_DATA_SVC: READ FILE ----------------------------- =============== ========== ==================================================== Parametro Variáveis Descrição FH 1 *File handle* do arquivo aberto LEN 1 Número de bytes validos no *buffer* recebido DATA LEN / 2 *Buffer* de variaveis com o conteúdo obtido do arquivo Total: 3..123 variáveis ================================================================================== FS_GET_DATA_SVC: WRITE FILE ----------------------------- Não existe comando de FS_GET_DATA_SVC para o serviço de WRITE FILE. Se enviado este comando para o serviço WRITE FILE é retornado código RC_GL_INV_CMD de comando não disponível. FS_GET_DATA_SVC: CLOSE FILE ------------------------------ Não existe comando de FS_GET_DATA_SVC para o serviço de CLOSE FILE. Se enviado este comando para o serviço WRITE FILE é retornado código RC_GL_INV_CMD de comando não disponível. FS_GET_DATA_SVC: REMOVE FILE ------------------------------ Não existe comando de FS_GET_DATA_SVC para o serviço de REMOVE FILE. Se enviado este comando para o serviço WRITE FILE é retornado código RC_GL_INV_CMD de comando não disponível. FS_GET_DATA_SVC: SEEK FILE ------------------------------ Não existe comando de FS_GET_DATA_SVC para o serviço de SEEK FILE. Se enviado este comando para o serviço WRITE FILE é retornado código RC_GL_INV_CMD de comando não disponível. FS_GET_DATA_SVC: READ DIR ----------------------------- =============== ========== ==================================================== Parametro Variáveis Descrição STATUS 1 Status do Arquivo. Indica que não há mais objetos no diretório. ATT 1 Atributos do objeto recebido. Veja a :ref:`tabela de atributos de arquivos ` para mais detalhes. NAME 24 Nome do arquivo. O nome do arquivo é composto em em variaveis M (ou *Holding Registers*) consecutivas, com delimitador de fim de texto igual a zero. As demais memória tem valor iguais a zero. CREATE_DATE 6 Data de criação do arquivo. A data é composta na sequência dada abaixo, cada valor em uma variável M (ou *Holding Registers*). \ Formato: [ano][mês][dia][hora][min][seg] Total: 32 variáveis ================================================================================== Códigos de retorno do comando FS_GET_DATA_SVC ----------------------------------------------- ================== ======== ================================================== Label Código Descrição SUCCESS 0 Função executada com sucesso RC_GL_INV_CMD 6 Comando inválido ou nao reconhecido. RC_GL_CMD_PEND 16 Tratamento do comando pendente. RC_FS_INV_SERVICE 23 Serviço inválido solicitado RC_FS_NO_SERVICE 24 Serviço não iniciou ou foi abortado RC_FS_INV_PWD 17 Senha inválida no processo de autenticação RC_FS_WRITE 32 Falha ao escrever dados no arquivo RC_FS_READ 31 Falha ao ler dados do arquivo \ Falhas de comunicação. Vide tabela de :ref:`falhas de comunicação ` ================== ======== ================================================== Para mais informações sobre códigos de erros retornados pelos controladores consulte a |error table|. Comando FS_END_SVC ============================== Este é um comando utilizado para terminar a execução de um serviço previamente iniciado pelo comando FS_BEGIN_SVC. Para todos os tipos de serviço, este comando possui o mesmo formato: =============== ========== ==================================================== Parametro Variáveis Descrição SVC_CODE 1 Código do serviço a ser executado SUB_CMD 1 Subcomando associado [1] Total: 2 variáveis ================================================================================== Códigos de retorno do comando FS_END_SVC ----------------------------------------------- ================== ======== ================================================== Label Código Descrição \ Falhas de comunicação. Vide tabela de :ref:`falhas de comunicação ` ================== ======== ================================================== Para mais informações sobre códigos de erros retornados pelos controladores consulte a |error table|. .. raw:: pdf PageBreak