PCLink6

October 6, 2017 | Author: fernandoCmacedo | Category: C (Programming Language), Computer Network, Weighing Scale, Software, Operating System
Share Embed Donate


Short Description

Manual da balança toledo...

Description

PCLink for Windows - Versão 6.0 Serial e Ethernet Guia do usuário – Versão 1.3

Índice 1 2 3 4 5

Introdução................................................................................................................................................... 5 HardKey ..................................................................................................................................................... 6 Hardkey servidor ........................................................................................................................................ 7 Escrevendo programas................................................................................................................................ 8 Comunicação via porta serial (COM) do computador................................................................................ 8 5.1 Comunicação via ethernet ................................................................................................................ 10 5.1.1 Pinagem dos canais seriais........................................................................................................ 11 5.1.2 Sinais de controle CTS / RTS................................................................................................... 11 5.1.3 Loop de corrente Ativo / Passivo.............................................................................................. 11 5.1.4 Pinagem das entradas e saídas digitais ..................................................................................... 12 6 Declarações para PCLink6.Dll ................................................................................................................. 13 6.1 Display_Erro .................................................................................................................................... 13 6.2 Seta_Ip.............................................................................................................................................. 13 6.3 W9091 .............................................................................................................................................. 13 6.4 W9091Serial ..................................................................................................................................... 14 6.5 Considerações sobre 9091 contador ................................................................................................. 14 6.6 W9091C............................................................................................................................................ 15 6.7 W9091SerialC .................................................................................................................................. 16 6.8 WOhaus ............................................................................................................................................ 16 6.9 WOhausSerial................................................................................................................................... 16 6.10 Indicador Challenger MSI3360 ........................................................................................................ 17 6.11 WMSI3360 ....................................................................................................................................... 18 6.12 WMSI3360Serial.............................................................................................................................. 18 6.13 Programando MSI 6260.................................................................................................................... 19 6.14 WMSI6260 ....................................................................................................................................... 19 6.15 WMSI6260Serial.............................................................................................................................. 19 6.16 ProgSerial ......................................................................................................................................... 20 6.17 Select_Canal ..................................................................................................................................... 20 6.18 Close_Canal...................................................................................................................................... 20 6.19 Deleta_Canal .................................................................................................................................... 21 6.20 Update_Canal ................................................................................................................................... 21 6.21 Update_NoMotion ............................................................................................................................ 22 6.22 Gross_canal ...................................................................................................................................... 22 6.23 Net_canal.......................................................................................................................................... 23 6.24 Tare_canal ........................................................................................................................................ 23 6.25 Estado_Canal.................................................................................................................................... 23 6.26 Estado_EmMovimento ..................................................................................................................... 24 6.27 ClrBufRx .......................................................................................................................................... 24 6.28 ClrBufTx .......................................................................................................................................... 24 6.29 CloseLicense .................................................................................................................................... 25 6.30 Considerações sobre Entradas/Saídas digitais da FIREX................................................................. 25 6.31 DIO_InPort....................................................................................................................................... 25 6.32 DIO_InPortStr .................................................................................................................................. 26 6.33 DIO_InBit......................................................................................................................................... 26 6.34 DIO_InBitStr .................................................................................................................................... 26 6.35 DIO_OutPort .................................................................................................................................... 27 6.36 DIO_OutPortStr................................................................................................................................ 27 6.37 DIO_OutBit ...................................................................................................................................... 27 6.38 DIO_OutBitStr ................................................................................................................................. 28 7 Exemplos de programação ....................................................................................................................... 29 7.1 Delphi 6 ............................................................................................................................................ 29 7.1.1 Código fonte Delphi6 ............................................................................................................... 30 7.2 Exemplo VB 6 .................................................................................................................................. 44 7.2.1 Código fonte VB 6.................................................................................................................... 44

PCLink 6.0 Toledo do Brasil - Indústria de balanças

5

1 Introdução O PCLink 6.0 vem substituir as versões anteriores do produto, porém, introduzindo a comunicação via ethernet para leitura de balanças seriais (RS232 ou Loop de corrente) através de uma placa FIREX. A FIREX se aplica quando a aplicação do cliente requer ambiente de monitoramento remoto, (sistemas de segurança, automação de fábrica, SCADA, transporte de dados, etc.). Ou seja, de um micro qualquer da fábrica, ou de todos os micros, o cliente precisa: -

ligar/desligar sinalização remota... semáforos...abrir e fechar válvulas... saber a posição (status) dos sinais de campo... sensores fotoelétricos, chaves fim de curso, sensores de posicionamento... ler peso de balanças

As vantagens da FIREX são : -

Padronizar o meio físico de comunicação (Ethernet)... Facilitar instalação e Reduzir custo de tubulação e fiação... Reduzir os problemas de interferências e descargas atmosféricas. Todos os micros da rede podem acessar a mesma FIREX, porém , com algumas limitações.

Limitações da FIREX : - Só é possível uma conexão, por canal serial da FIREX, ou seja, dois computadores não conseguem ler a mesma balança ao mesmo tempo. Para isso, um computador deve fazer sua leitura e fechar a conexão, permitindo que outro computador na rede possa efetuar uma leitura de balança. - É permitido até 7(sete) conexões para fazer a leitura de entradas, acionamento das saídas e programação dos canais seriais. - O tráfego na rede ethernet está diretamente ligado ao desempenho da comunicação. Para casos críticos, vale fazer a segmentação da rede para deixar a leitura das balanças independente de qualquer outra informação. Esta nova versão da PCLink 6, permite a leitura das balanças tanto serialmente quanto via ethernet, através de funções que são disponibilizadas em uma DLL chamada PCLink6.DLL. Observação importante : Esta nova versão é incompatível com as versões anteriores da PCLink.

6

PCLink 6.0 Toledo do Brasil - Indústria de balanças

2 HardKey Para utilizar a DLL PCLink6 será necessário utilizar uma Hardkey. A mesma hardkey pode ser utilizada local (uma por computador) ou em rede. A escolha se deve conforme a área e necessidade de cada cliente. Para citar alguns exemplos, podemos ter as seguintes configurações : •

Leitura de balanças, utilizando porta serial, tendo uma hardkey local por computador. Modo ideal de trabalho, para não depender de sua rede ethernet. Bal 1

Bal 2

Bal 3

Bal n

Bal 1

Computador 1 com hardkey e multiserial



Bal 2

Bal 3

Bal n

Computador 2 com hardkey e multiserial

Leitura de balanças, utilizando porta serial, tendo apenas uma hardkey em algum computador da rede ethernet. Bal 1

Bal 2

Bal 3

Computador 1 com multiserial

Bal n

Bal 1

Rede Ethernet

Bal 2

Bal 3

Bal n

Computador 2 com multiserial

Computador 3

A hardkey pode estar em um deste três computadores, que estará trabalhando com um serviço ou programa gerenciador de conexões. A melhor opção é um computador que não precise ser desligado.

Importante : para comunicação com Firex, não é necessário hardkey

PCLink 6.0 Toledo do Brasil - Indústria de balanças

7

3 Hardkey servidor Para ser utilizada em rede, deve ser escolhido um computador onde será instalada a hardkey fornecida pela Toledo e coloca-la na porta paralela. Executando o programa SetupPCLink6 do CDRom de instalação irá instalar alguns programas no menu Iniciar\PCLink6 : • • •







FirexTool Programa para configuração das placas Firex. A placa vem com IP 10.0.0.1 de fábrica. SerialIP Programa teste para leitura de balanças em porta serial ou de canais de Firex, contém inclusive os fontes em Delphi. SetupHardkey Programa instalador da hardkey em rede. Este programa verifica o sistema operacional do computador e disponibiliza os tipos de instalação que podem ser feitas, serviço para NT/Windows 2000(SrvProteq) ou programa gerenciador para qualquer sistema operacional(GerHardkey). Este programa também deve ser utilizado para desinstalar a hardkey, quando necessitar trocar a hardkey para outro computador. Caso esta instalação não seja realizada, a hardkey será apenas para o computador onde está conectada. Nos computadores que precisarem acessar a hardkey remotamente, basta executar este programa, e seguir os passos para instalação remota, onde a principal exigência é o nome do computador onde a hardkey está instalada. SrvProteq Serviço NT/Win 2000 para gerenciar o controle de licenças da hardkey. Este serviço é instalado automaticamente quando se utiliza o programa SetupHardkey. Caso necessite instalá-lo manualmente , basta entrar na tela de prompt , ir no diretório onde está o programa SrvProteq e digitar “SrvProteq /install” se precisar desinstalar digite “SrvProteq /Uninstall” . Para iniciar e parar o serviço deve ser feito manualmente. GerHardkey Programa para qualquer sistema operacional para gerenciar o controle de licenças da hardkey. Este programa é instalado automaticamente quando se utiliza o programa SetupHardkey. ToledoMonitor Este programa só deverá funcionar nos computadores onde está instalado a hardkey com o programa SetupHardkey. Este é apenas um programa de monitoração relacionado a hardkey. Pode ser utilizado para determinar se o serviço/programa gerenciador da hardkey está funcionando, se o programa executável desenvolvido pelo cliente está conseguindo uma conexão com a hardkey, e exibe algumas mensagens de erro , se acontecerem.

8

PCLink 6.0 Toledo do Brasil - Indústria de balanças

4 Escrevendo programas Daremos a seguir algumas explicações sobre como efetuar uma leitura via um canal serial ou via ethernet, já mostrando algumas funções que pertencem a DLL. Como exemplo, utilizaremos o indicador Toledo 9091. Para exemplificar para qualquer tipo de linguagem de programação, colocarei uma exclamação(!) como comentário e tratarei como uma linguagem genérica. Utilizarei algumas variáveis do tipo String para obtermos pesos de tara, bruto, liquido e estado da balança. Essas variáveis são terminadas com nulo.

5 Comunicação via porta serial (COM) do computador Para fazer esta comunicação, precisamos ter uma porta válida para o sistema operacional. Utilizando a função específica para cada balança, fazemos uma conexão serial para o 9091 : ! ! ! ! !

vamos fazer uma conexão para COM3 utilizaremos uma variável do tipo inteiro, para obter o retorno da função. isto deve ser feito apenas uma vez, na inicialização do programa

B3 := W9091Serial(3) ; ! ! ! !

esta variável B3 é muito importante, pois será nossa ligação com a balança e seu protocolo. Ao testar o retorno dessa função, saberemos se obtivemos uma conexão válida.

! SE B3 MENOR QUE ZERO , temos um erro de conexão if B3 < 0 then Display(“Não foi possível conectar com a balança x”); Return; End if; ! O próximo passo será testar se a conexão continua ! válida, para efetuar uma leitura de peso.

PCLink 6.0 Toledo do Brasil - Indústria de balanças

9

! SE SELECT_CANAL(B3) DIFERENTE DE 0 if Select_Canal(B3) 0 then ! Faremos uma leitura de balança com ou sem ! movimento sobre a balança ! poderia ser utilizado a função update_nomotion ! se fosse necessário ler um peso estável. ret := Update_Canal(B3); ! Após a leitura, testamos o retorno if ret = 0 then ! obtemos o peso bruto bruto := Gross_canal(B3); ! obtemos o peso de tara tara := Tare_canal(B3); ! obtemos o peso liquido liq := Net_canal(B3); ! obtemos o estado da leitura. Estável ou instável smov := Estado_EmMovimento(B3); ! obtemos outros estados da balança sEst := Estado_Canal(B3); end if; end if; Como pôde se ver, a leitura é relativamente simples. Verifique a descrição detalhada de todas as funções utilizadas no exemplo. Na instalação do programa se encontra um diretório onde tem um programa exemplo em Delphi.

10

5.1

PCLink 6.0 Toledo do Brasil - Indústria de balanças

Comunicação via ethernet

Como foi descrito anteriormente, leremos uma balança através da placa FIREX. A placa FIREX possui 4(quatro) canais de comunicação (A,B,C,D) e 8(oito)entradas digitais(0 a 7) e 8(oito) saídas digitais(0 a 7). Verifique a fig.1 :

Fig. 1 – Modelo placa Firex Observação : Para maiores detalhes técnicos, consulte o manual da placa Firex, que acompanha o disco de instalação.

PCLink 6.0 Toledo do Brasil - Indústria de balanças

11

5.1.1 Pinagem dos canais seriais A seguir está indicado a pinagem de cada canal, conforme o tipo:

Pinos 20mA

RS232

1

TxIN

TxD

2

TxOUT

RTS

3

RxIN

RxD

4

RxOUT

CTS

5



Gnd

5.1.2 Sinais de controle CTS / RTS Se for utilizar sinais de controle para RS232, pode ser observado na fig.1 o conjunto correspondente para cada canal, e somente os canais A,B e C possuem o controle de fluxo por hardware. Os pinos 1 e 2 são para RTS e 3 e 4 para CTS. No canal A, ao se utilizar o controle de fluxo fará com que a placa não deixe mais disponível para o usuário a entrada 6 e saída 6. No canal B, ao se utilizar o controle de fluxo fará com que a placa não deixe mais disponível para o usuário a entrada 5 e saída 5. No canal C, ao se utilizar o controle de fluxo fará com que a placa não deixe mais disponível para o usuário a entrada 4 e saída 4. A conclusão é que a leitura destas entradas e a escrita nessas saídas, não pode ser considerado após ativar o controle de fluxo. 5.1.3 Loop de corrente Ativo / Passivo Para a configuração de Ativo/Passivo para loop de corrente, utilize o conjunto de pinos a frente de cada canal como demonstrado na fig 1, e faça a configuração conforme abaixo:

Fig 2 – Configuração de Ativo/Passivo

12

PCLink 6.0 Toledo do Brasil - Indústria de balanças

5.1.4 Pinagem das entradas e saídas digitais A seguir está indicado a pinagem das entradas e saídas : Pinos

E/S 0 a 3 E/S 4 a 7

1

GND

GND

2

+10V

+10V

3

IN0

IN4

4

IN1

IN5

5

IN2

IN6

6

IN3

IN7

7

In–

In–

8

OUT0

OUT4

9

OUT1

OUT5

10

OUT2

OUT6

11

OUT3

OUT7

12

OUT+

OUT+

Conexão para entradas e saídas : INn

OUT+ + -

Ri 3K3

IN0 + -

OUT0 OUTn Saídas

Características: Saídas = 24VDC, 100mA; Entradas = 7mA @ 24VDC.

IN– Entradas

PCLink 6.0 Toledo do Brasil - Indústria de balanças

13

6 Declarações para PCLink6.Dll Aqui temos as declarações das funções e sua utilização : 6.1

Display_Erro

Utilizada para exibir mensagens que a DLL carrega quando ocorre algum erro na operação que o usuário quer executar. Parâmetros : IP_SETADO – Valor inteiro retornado da função Seta_Ip correspondente a um IP para comunicação. Retorno : Retorna um pointer de caracter, com uma mensagem para melhor identificação do problema. Sintaxe em C : char * Display_Erro( int IP_SETADO); Sintaxe em Delphi : function Display_Erro(IP_SETADO : Integer) : PChar; stdcall; 6.2

Seta_Ip

Utilizada para informar à DLL o IP da placa FIREX que será utilizada para comunicação. Esta função retorna um valor inteiro que será muito utilizado nas demais operações da DLL. Parâmetros : IPStr – IP para comunicação com máximo de 15 bytes, no formato XXX.XXX.XXX.XXX (o valor default da placa é 10.0.0.1). Retorno : Retorna um valor inteiro de 0 a n, para identificar cada IP utilizado na comunicação. Sintaxe em C : int Display_Erro( char * IPStr); Sintaxe em Delphi : function Seta_Ip(IPStr : PChar): Integer; stdcall; 6.3

W9091

Utilizada para informar à DLL que um determinado canal de uma placa FIREX, será alocado para leitura de um indicador 9091 com protocolo P03, checksum habilitado, 4800 baud, 7 bit, paridade par e 1 stop bit. Parâmetros : IP_SETADO – Valor inteiro retornado da função Seta_Ip correspondente a um IP para comunicação. Canal – Canal de comunicação da placa FIREX (A,B,C ou D).

14

PCLink 6.0 Toledo do Brasil - Indústria de balanças

Retorno : Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na comunicação. Sintaxe em C : int W9091( int IP_SETADO, char * Canal); Sintaxe em Delphi : function W9091(IP_SETADO : Integer; Canal : PChar): Integer; stdcall; 6.4

W9091Serial

Utilizada para informar à DLL que uma determinada porta serial, será alocada para leitura de um indicador 9091 com protocolo P03, checksum habilitado, 4800 baud, 7 bit, paridade par e 1 stop bit. Parâmetros : COM – Valor inteiro correspondente a uma porta serial para comunicação. COM1 = 1, COM2 = 2 e assim por diante. Retorno : Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na comunicação. Sintaxe em C : int W9091Serial( int COM); Sintaxe em Delphi : function W9091Serial(COM : Integer): Integer; stdcall; 6.5

Considerações sobre 9091 contador

O 9091 contador, envia pacotes de dados sobre demanda, ou seja, quando a tecla print for pressionada e a balança completamente estabilizada. Para fazer essa comunicação deve haver um sincronismo entre o momento que será enviado os dados e o programa que receberá essas informações. Para iniciar, programe seu 9091 com a seguinte configuração das chaves de software : -------chave de SOFTWARE -------C00 C02 C03 C05 C10 C11 C12 C14 C15 C25 C28 C31 C32

-------------------------------------------------valor -------------------------------------------------(L) modo contador ativo (d) impressão automática desabilitada (d) sensor de movimento desativado (d) modo rede desativado (d) imprime pesos BRUTO, TARA e LÍQUIDO (L) envia os dados em uma única linha (L) envia o CHECKSUM no pacote de dados (P04) seleciona o tipo de pacote a enviar (d) transmissão contínua desativada - modo demanda (L) ativa o uso da tecla F2 (L) ativa o envio da data e hora da pesagem (L) envia o código digitado pelo operador (L) identifica a tara manual

PCLink 6.0 Toledo do Brasil - Indústria de balanças

15

Após essa configuração, utilizar as funções W9091C para Firex ou W9091SerialC para porta serial. Para fazer a leitura utilizar a função Contadora_Canal. Exemplos : Para iniciar a conexão via ethernet Firex : Sip := Seta_IP('192.168.211.17'); if Sip >= 0 then begin // a conexão será no canal B da Firex Canal := W9091C(Sip,'B'); end; Fazendo a conexão via porta serial COM 1 : Canal := W9091SerialC(1); Após a conexão ser realizada, utilizar a leitura quantas vezes for necessário com as funções: ret := Update_Canal(Canal); que aguardará um tempo default do pacote de dados ou ret := Update_NoMotion(Canal,Tempo); que determinará um tempo de espera. A função Contadora_canal(Canal) retorna o pacote de dados obtido, similar ao seguinte : 30/01/94 16:30 000000 402,2kg 00,133kg PMP 03035 PCS As funções de líquido, bruto e tara não tem funcionalidade para este driver. Verifique o programa exemplo que acompanha o disco de instalação e realize alguns testes para entender o funcionamento. 6.6

W9091C

Utilizada para informar à DLL que um determinado canal de uma placa FIREX, será alocado para leitura de um indicador 9091 contador com checksum habilitado, 4800 baud, 7 bit, paridade par e 1 stop bit. Verificar sobre configuração do indicador. Parâmetros : IP_SETADO – Valor inteiro retornado da função Seta_Ip correspondente a um IP para comunicação. Canal – Canal de comunicação da placa FIREX (A,B,C ou D). Retorno : Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na comunicação. Sintaxe em C : int W9091C( int IP_SETADO, char * Canal);

16

PCLink 6.0 Toledo do Brasil - Indústria de balanças

Sintaxe em Delphi : function W9091C(IP_SETADO : Integer; Canal : PChar): Integer; stdcall;

6.7

W9091SerialC

Utilizada para informar à DLL que uma determinada porta serial, será alocada para leitura de um indicador 9091 contador com checksum habilitado, 4800 baud, 7 bit, paridade par e 1 stop bit. Verificar sobre configuração do indicador. Parâmetros : COM – Valor inteiro correspondente a uma porta serial para comunicação. COM1 = 1, COM2 = 2 e assim por diante. Retorno : Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na comunicação. Sintaxe em C : int W9091SerialC( int COM); Sintaxe em Delphi : function W9091SerialC(COM : Integer): Integer; stdcall; 6.8

WOhaus

Utilizada para informar à DLL que um determinado canal de uma placa FIREX, será alocado para leitura de uma balança Ohaus programada para 9600 baud, 7 bit, paridade par e 1 stop bit. A balança não precisa ser programada para transmitir continuamente. Parâmetros : IP_SETADO – Valor inteiro retornado da função Seta_Ip correspondente a um IP para comunicação. Canal – Canal de comunicação da placa FIREX (A,B,C ou D). Retorno : Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na comunicação. Sintaxe em C : int WOhaus( int IP_SETADO, char * Canal); Sintaxe em Delphi : function WOhaus(IP_SETADO : Integer; Canal : PChar): Integer; stdcall; 6.9 WOhausSerial Utilizada para informar à DLL que uma determinada porta serial, será alocada para leitura de de uma balança Ohaus programada para 9600 baud, 7 bit, paridade par e 1 stop bit. A balança não precisa ser programada para transmitir continuamente.

PCLink 6.0 Toledo do Brasil - Indústria de balanças

17

Parâmetros : COM – Valor inteiro correspondente a uma porta serial para comunicação. COM1 = 1, COM2 = 2 e assim por diante. Retorno : Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na comunicação. Sintaxe em C : int WOhausSerial(int COM); Sintaxe em Delphi : function WOhausSerial(COM : Integer): Integer; stdcall; 6.10 Indicador Challenger MSI3360 Para utilizar o indicador MSI3360 com o PCLink 6, é necessário que seja feito uma programação no indicador conforme descrito abaixo. Menu RS232 FOr dAtA 01 40 (@) 02 53 (S) 03 40 (@) 04 56 (V) 05 32 (2) 06 40 (@) 07 56 (V) 08 33 (3) 09 40 (@) 10 56 (V) 11 34 (4) 12 40 (@) 13 55 (U) 14 40 (@) 15 45 (E) 16 00 StLin 01 02 (Stx) 02 00 Endln 01 03 (Etx) 02 00 StrnG Str U odE OutPt Cntr Conti

Caracter de início Bruto

Líquido

Tara Unidade Caracter de fim Fim de data Caracter de início, usado por @S Fim de StLin Caracter de fim, usado por @E Fim de EndLin User-defined string

Modo contínuo

18

PCLink 6.0 Toledo do Brasil - Indústria de balanças

otion OFF intEr OnCE SEt bAud 9600 StoP 1 bit dbitS 8 bit PAr nonE HAnd nonE

Motion desabilitado Intervalo desabilitado

Baud rate Stop bit Bits de dados Paridade Sem handshake

Após toda essa programação ser realizada, o indicador estará apto a ser lido serialmente ou via ethernet. 6.11 WMSI3360 Utilizada para informar à DLL que um determinado canal de uma placa FIREX, será alocado para leitura de um indicador Challenger MSI3360 programado conforme o ítem 6.7 Parâmetros : IP_SETADO – Valor inteiro retornado da função Seta_Ip correspondente a um IP para comunicação. Canal – Canal de comunicação da placa FIREX (A,B,C ou D). Retorno : Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na comunicação. Sintaxe em C : int WMSI3360( int IP_SETADO, char * Canal); Sintaxe em Delphi : function WMSI3360(IP_SETADO : Integer; Canal : PChar): Integer; stdcall; 6.12 WMSI3360Serial Utilizada para informar à DLL que uma determinada porta serial, será alocada para leitura de um indicador MSI3360, programado conforme o ítem 6.7. Parâmetros : COM – Valor inteiro correspondente a uma porta serial para comunicação. COM1 = 1, COM2 = 2 e assim por diante. Retorno : Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na comunicação.

PCLink 6.0 Toledo do Brasil - Indústria de balanças

19

Sintaxe em C : int WMSI3360Serial(int COM); Sintaxe em Delphi : function WMSI3360Serial(COM : Integer): Integer; stdcall; 6.13 Programando MSI 6260 Programar para 1200 baud e continuo em RS232. Fechar os seguintes switches S2-1, S2-2, S2-7, S3-1, S3-2, S3-6, S3-7 . Abrir ose seguintes jumpers J14-3, J14-6, J14-7, J14-8 . 6.14 WMSI6260 Utilizada para informar à DLL que um determinado canal de uma placa FIREX, será alocado para leitura de um indicador Challenger MSI6260 programado conforme o ítem 6.7 Parâmetros : IP_SETADO – Valor inteiro retornado da função Seta_Ip correspondente a um IP para comunicação. Canal – Canal de comunicação da placa FIREX (A,B,C ou D). Retorno : Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na comunicação. Sintaxe em C : int WMSI6260( int IP_SETADO, char * Canal); Sintaxe em Delphi : function WMSI6260(IP_SETADO : Integer; Canal : PChar): Integer; stdcall; 6.15 WMSI6260Serial Utilizada para informar à DLL que uma determinada porta serial, será alocada para leitura de um indicador MSI6260, programado conforme o manual do fabricante Parâmetros : COM – Valor inteiro correspondente a uma porta serial para comunicação. COM1 = 1, COM2 = 2 e assim por diante. Retorno : Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na comunicação. Sintaxe em C : int WMSI6260Serial(int COM); Sintaxe em Delphi : function WMSI6260Serial(COM : Integer): Integer; stdcall;

20

PCLink 6.0 Toledo do Brasil - Indústria de balanças

6.16 ProgSerial Utilizada para alterar algum parâmetro de configuração da porta serial de algum dos drivers de balança. Utilizar após obter um número de um dos drivers de porta serial. Esta alteração só deve ser realizada se desejar trabalhar fora dos padrões estabelecidos por fábrica. Parâmetros : Canal – Valor inteiro correspondente ao número do canal fornecido por alguma das funções de balança(W9091Serial, por exemplo) para realizar a leitura do indicador ou balança. Baud – Baudrate que deseja utilizar Dados – Databits da porta serial (5,6,7 ou 8) Paridade – Paridade da porta serial (0-Sem, 1-Impar ou 2-Par) Stop – Stop Bits da porta serial (1 ou 2) Retorno : Sem retorno Sintaxe em C : void ProgSerial( int canal,baud,dados,paridade,stop); Sintaxe em Delphi : procedure ProgSerial(Canal,Baud,Dados,Paridade,Stop : integer); stdcall; 6.17 Select_Canal Utilizada para abrir a conexão TCP/IP quando a comunicação é realizada através de uma FIREX. Parâmetros : Canal_Setado – Valor inteiro correspondente ao número do canal fornecido por alguma das funções de balança(W9091, por exemplo) para realizar a leitura do indicador ou balança. Retorno : 0 - Indica que a conexão já havia sido realizada. 1 – Indica que a conexão foi realizada. Sintaxe em C : int Select_Canal( int CANAL_SETADO); Sintaxe em Delphi : function Select_Canal(CANAL_SETADO : Integer) : integer; stdcall;

6.18 Close_Canal Fecha a conexão com o canal serial ou TCP/IP. Parâmetros : Canal – Valor inteiro correspondente ao número do canal fornecido por alguma das funções de balança(W9091, por exemplo) para realizar a leitura do indicador ou balança. Retorno : Sem retorno

PCLink 6.0 Toledo do Brasil - Indústria de balanças

21

Sintaxe em C : void Close_Canal( int Canal); Sintaxe em Delphi : procedure Close_Canal(Canal : integer); stdcall; 6.19 Deleta_Canal Deleta a conexão com o canal serial ou TCP/IP. Parâmetros : Canal – Valor inteiro correspondente ao número do canal fornecido por alguma das funções de balança(W9091, por exemplo) para realizar a leitura do indicador ou balança. Este comando livra a memória alocada pela conexão. Retorno : Sem retorno Sintaxe em C : void Deleta_Canal( int Canal); Sintaxe em Delphi : procedure Deleta_Canal(Canal : integer); stdcall;

6.20 Update_Canal Faz a leitura da balança ou indicador, correspondente ao canal passado como parâmetro. O peso sobre a balança pode estar estável ou instável. Parâmetros : Canal – Valor inteiro correspondente ao número do canal fornecido por alguma das funções de balança(W9091, por exemplo) para realizar a leitura do indicador ou balança. Retorno : 0 - Indica que a leitura foi válida 1 - Indica que não foi possível efetuar a leitura da balança. 3 – Indica que há sobrecarga sobre a balança. Exemplo : na plataforma de um indicador 9091, é colocado 26 kg , que tem uma carga máxima de 25kg. O display apaga , mas o indicador continua transmitindo. Isto deve ser considerado como erro. 999 – Indica que não conseguiu detectar a hardkey local ou de rede. Sintaxe em C : int Update_Canal( int Canal); Sintaxe em Delphi : function Update_Canal(Canal : integer) : Integer; stdcall;

22

PCLink 6.0 Toledo do Brasil - Indústria de balanças

6.21 Update_NoMotion Faz a leitura da balança ou indicador, correspondente ao canal passado como parâmetro. O peso sobre a balança deve estar estável. Esta função não tem validade para o indicador Challenger MSI3360. Parâmetros : Canal – Valor inteiro correspondente ao número do canal fornecido por alguma das funções de balança(W9091, por exemplo) para realizar a leitura do indicador ou balança. Tempo - Contado em milisegundos ( 1000ms = 1 segundo) Valor 0(Zero) - Aguardará até a estabilização da balança Valores acima de zero, aguardará o tempo passado Valor –1 será utilizado o tempo default da DLL Retorno : 0 - Indica que a leitura foi válida 1 - Indica que não foi possível efetuar a leitura da balança. 2 – Indica que expirou timeout para efetuar a leitura sem movimento. 3 – Indica que há sobrecarga sobre a balança. Exemplo : na plataforma de um indicador 9091, é colocado 26 kg , que tem uma carga máxima de 25kg. O display apaga , mas o indicador continua transmitindo. Isto deve ser considerado como erro. 999 – Indica que não conseguiu detectar a hardkey local ou de rede. Sintaxe em C : int Update_NoMotion( int Canal, int Tempo); Sintaxe em Delphi : function Update_NoMotion(Canal : integer;Tempo : integer) : Integer; stdcall; 6.22 Gross_canal Obtém o peso bruto, após utilizar a função Update_Canal ou Update_NoMotion, se não utilizar nenhuma das funções obterá o último peso lido. Parâmetros : Canal – Valor inteiro correspondente ao número do canal fornecido por alguma das funções de balança(W9091, por exemplo) para realizar a leitura do indicador ou balança. Retorno : Peso bruto Sintaxe em C : char * Gross_canal( int Canal); Sintaxe em Delphi : function Gross_Canal(Canal : integer) : PChar; stdcall;

PCLink 6.0 Toledo do Brasil - Indústria de balanças

23

6.23 Net_canal Obtém o peso líquido, após utilizar a função Update_Canal ou Update_NoMotion, se não utilizar nenhuma das funções obterá o último peso lido. Parâmetros : Canal – Valor inteiro correspondente ao número do canal fornecido por alguma das funções de balança(W9091, por exemplo) para realizar a leitura do indicador ou balança. Retorno : Peso líquido Sintaxe em C : char * Net_canal( int Canal); Sintaxe em Delphi : function Net_Canal(Canal : integer) : PChar; stdcall; 6.24 Tare_canal Obtém o peso tara, após utilizar a função Update_Canal ou Update_NoMotion, se não utilizar nenhuma das funções obterá o último peso lido. Parâmetros : Canal – Valor inteiro correspondente ao número do canal fornecido por alguma das funções de balança(W9091, por exemplo) para realizar a leitura do indicador ou balança. Retorno : Peso tara Sintaxe em C : char * Tare_canal( int Canal); Sintaxe em Delphi : function Tare_Canal(Canal : integer) : PChar; stdcall; 6.25 Estado_Canal Obtém alguns estados da balança, após utilizar a função Update_Canal ou Update_NoMotion, se não utilizar nenhuma das funções obterá o último estado. Parâmetros : Canal – Valor inteiro correspondente ao número do canal fornecido por alguma das funções de balança(W9091, por exemplo) para realizar a leitura do indicador ou balança. Retorno: Para W9091 será recebido uma string com o seguinte pacote: Incremento da balança : 1,2 ou 5 NetMode : S = Sim; N = Não ; E = Erro Peso negativo : S = Sim; N = Não ; E = Erro Sobrecarga : S = Sim; N = Não ; E = Erro Peso em movimento : S = Sim; N = Não ; E = Erro Unidade da balança : kg ou lb; EE = Erro

24

PCLink 6.0 Toledo do Brasil - Indústria de balanças

Botão print pressionado

: S = Sim; N = Não; E = Erro

Obs : Para uma balança Ohaus, por exemplo, não se determina alguns desses campos como Incremento, unidade, etc. Nesses casos o retorno será ’E’ apenas para indicar que não existe valor determinado. Sintaxe em C : char * Estado_canal( int Canal); Sintaxe em Delphi : function Estado_Canal(Canal : integer) : PChar; stdcall; 6.26 Estado_EmMovimento Obtém se o peso está em movimento sobre a balança, após utilizar a função Update_Canal , se não utilizar a função obterá o último estado. Parâmetros : Canal – Valor inteiro correspondente ao número do canal fornecido por alguma das funções de balança(W9091, por exemplo) para realizar a leitura do indicador ou balança. Retorno: Para W9091 será recebido uma string com S = Sim; N = Não Sintaxe em C : char * Estado_EmMovimento( int Canal); Sintaxe em Delphi : function Estado_EmMovimento(Canal : integer) : PChar; stdcall; 6.27 ClrBufRx Limpa buffer de recepção apenas para placas Firex. Parâmetros : IP_SETADO – Valor inteiro retornado da função Seta_Ip correspondente a um IP para comunicação. Canal – Canal de comunicação da placa FIREX (A,B,C ou D). Retorno : Retorna um valor inteiro de 0 para sucesso e –1 se ocorreu erro. Sintaxe em C : int ClrBufRx( int IP_SETADO, char * Canal); Sintaxe em Delphi : function ClrBufRx(IP_SETADO : integer; Canal : PChar): integer; stdcall;

6.28 ClrBufTx Limpa buffer de transmissão apenas para placas Firex. Parâmetros : IP_SETADO – Valor inteiro retornado da função Seta_Ip correspondente a um IP para comunicação.

PCLink 6.0 Toledo do Brasil - Indústria de balanças

25

Canal – Canal de comunicação da placa FIREX (A,B,C ou D). Retorno : Retorna um valor inteiro de 0 para sucesso e –1 se ocorreu erro. Sintaxe em C : int ClrBufTx( int IP_SETADO, char * Canal); Sintaxe em Delphi : function ClrBufTx(IP_SETADO : integer; Canal : PChar): integer; stdcall; 6.29 CloseLicense Fecha licensa de uso em relação a hardkey server. Esta função só deve ser utilizada ao encerrar um aplicativo para liberar rapidamente a conexão com a hardkey, caso contrário o programa ou serviço que gerencia a hardkey server irá fechar essa conexão depois de alguns segundos. Sintaxe em C : void CloseLicense(void); Sintaxe em Delphi : procedure CloseLicense; stdcall; 6.30 Considerações sobre Entradas/Saídas digitais da FIREX • Cada PIM (placa de entrada/saída) contém duas entradas e duas saídas. • Se o jumper JP7 pinos 1 e 2 não estiver jumpeado, não será possível ler entrada 7. • Se utilizar controle de fluxo por hardware no canal A, a entrada 6 e a saída não poderão ser utilizadas. • Se utilizar controle de fluxo por hardware no canal B, a entrada 5 e a saída não poderão ser utilizadas. • Se utilizar controle de fluxo por hardware no canal C, a entrada 4 e a saída não poderão ser utilizadas.

a 6 5 4

6.31 DIO_InPort Utilizada para ler todas as entradas e obter seu retorno em um valor inteiro. Parâmetros : Nip – Valor inteiro retornado da função Seta_Ip correspondente a um IP para comunicação. Retorno : -1 indica que não foi possível ler as entradas ou retorna um valor inteiro de 0 a 255, setando os bits de 0 a 7 cuja entrada correspondente estiver ligada. Sintaxe em C : int DIO_InPort( int Nip); Sintaxe em Delphi : function DIO_InPort(Nip : integer): Integer; stdcall;

26

PCLink 6.0 Toledo do Brasil - Indústria de balanças

6.32 DIO_InPortStr Utilizada para ler todas as entradas e obter seu retorno em uma String. Parâmetros : Nip – Valor inteiro retornado da função Seta_Ip correspondente a um IP para comunicação. Retorno : Retorna EEEEEEEE indicando que não foi possível ler as entradas ou retorna uma string conforme a tabela abaixo. Ligado Desligado

Ent 0 S N

Ent 1 S N

Ent 2 S N

Ent 3 S N

Ent 4 S N

Ent 5 S N

Ent 6 S N

Ent 7 S N

Sintaxe em C : Char * DIO_InPort( int Nip); Sintaxe em Delphi : function DIO_InPortStr(Nip : integer): PChar; stdcall; 6.33 DIO_InBit Utilizada para ler uma determinada entrada e obter seu retorno em um valor inteiro. Parâmetros : Nip – Valor inteiro retornado da função Seta_Ip correspondente a um IP para comunicação. Retorno : -1 - indica que não foi possível ler a entrada. 0 - entrada desligada. 1 - entrada ligada. Sintaxe em C : int DIO_InBit( int Nip, int Entrada); Sintaxe em Delphi : function DIO_InBit(Nip : integer;Entrada : integer): Integer; stdcall; 6.34 DIO_InBitStr Utilizada para ler uma determinada entrada e obter seu retorno em uma String. Parâmetros : Nip – Valor inteiro retornado da função Seta_Ip correspondente a um IP para comunicação. Retorno : E - indica que não foi possível ler a entrada. N - entrada desligada. S - entrada ligada. Sintaxe em C : char DIO_InBitStr( int Nip, int Entrada);

PCLink 6.0 Toledo do Brasil - Indústria de balanças

27

Sintaxe em Delphi : function DIO_InBitStr(Nip : integer; Entrada : integer): PChar; stdcall; 6.35 DIO_OutPort Utilizada para escrever em todas as saídas simultaneamente através de um parâmetro inteiro. Parâmetros : Nip – Valor inteiro retornado da função Seta_Ip correspondente a um IP para comunicação. Palavra – Valor inteiro a ser escrito nas saídas. Retorno : -1 - indica que não foi possível escrever nas saídas 0 - placa recebeu o comando de alteração das saídas. Sintaxe em C : int DIO_OutPort( int Nip, int Palavra); Sintaxe em Delphi : function DIO_OutPort(Nip : integer;Palavra : integer): Integer; stdcall; 6.36 DIO_OutPortStr Utilizada para escrever em todas as saídas simultaneamente através de um parâmetro string. Parâmetros : Nip – Valor inteiro retornado da função Seta_Ip correspondente a um IP para comunicação. Palavra – Valor string a ser escrito nas saídas, conforme tabela abaixo. Ligar Desligar

Ent 0 S N

Ent 1 S N

Ent 2 S N

Ent 3 S N

Ent 4 S N

Ent 5 S N

Ent 6 S N

Ent 7 S N

Para ligar as saídas 0 e 5 e desligar as demais o valor palavra seria SNNNNSNN . Retorno : -1 - indica que não foi possível escrever nas saídas 0 - placa recebeu o comando de alteração das saídas. Sintaxe em C : int DIO_OutPortStr( int Nip,char * Palavra); Sintaxe em Delphi : function DIO_OutPortStr(Nip : integer;Palavra : PChar): integer; stdcall; 6.37 DIO_OutBit Utilizada para escrever em uma determinada saída através de uma parâmetro inteiro. Parâmetros : Nip – Valor inteiro retornado da função Seta_Ip correspondente a um IP para comunicação.

28

PCLink 6.0 Toledo do Brasil - Indústria de balanças

Saida – Número da saída que deseja escrever. Estado – Estado que se deseja escrever na saída : 0 -Desligar 1 -Ligar Retorno : -1 - indica que não foi possível escrever na saída. 0 - placa recebeu o comando de alteração da saída. Sintaxe em C : int DIO_OutBit( int Nip,int Saida,int Estado); Sintaxe em Delphi : function DIO_OutBit(Nip : integer;Saida,Estado: Integer): Integer; stdcall; 6.38 DIO_OutBitStr Utilizada para escrever em uma determinada saída através de uma parâmetro String. Parâmetros : Nip – Valor inteiro retornado da função Seta_Ip correspondente a um IP para comunicação. Saida – Número da saída que deseja escrever. Estado – Estado que se deseja escrever na saída : N -Desligar S -Ligar Retorno : -1 0

- indica que não foi possível escrever na saída. - placa recebeu o comando de alteração da saída.

Sintaxe em C : int DIO_InBitStr( int Nip,int Saida, char * Estado); Sintaxe em Delphi : function DIO_OutBitStr(Nip : integer;Saida : Integer; Estado : PChar): integer; stdcall;

PCLink 6.0 Toledo do Brasil - Indústria de balanças

29

7 Exemplos de programação 7.1

Delphi 6

Este programa se destina para testes e para desenvolvimento de aplicações para linguagem de programação Delphi. Na parte superior da tela, se encontram dados relativos a hardkey PCLink6 . Se esses dados não estiverem aparecendo, significa que não foi possível ler a hardkey, seja ela remota ou local.

Atenção : as placas Firex não necessitam de hardkey Do lado direito pode ser configurado uma leitura de balança via RS232. Apesar do programa estar fixando a leitura de COM1 a COM8, a DLL permite a leitura de qualquer serial que esteja instalada no computador. Do lado esquerdo pode ser configurado uma leitura de balança via FIREX. Antes de se fazer esta leitura é necessário que se utilize o programa Firex Tools para configurar a placa Firex com um endereço IP e parâmetros dos canais A,B,C ou D. Além disso, a Firex deve ter uma placa SIM no canal que se deseja a leitura e placas PIM (Entradas e Saídas) se for ativar IO´s.

30

PCLink 6.0 Toledo do Brasil - Indústria de balanças

7.1.1 Código fonte Delphi6 unit Teste; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, AppEvnts, ExtCtrls, OoMisc, AdPort, Buttons, ScktComp; type TThreadLer = class(TThread) private { Private declarations } protected procedure Execute; override; public Retorno : integer; Tela : integer; procedure ExibeIO; end; TThreadPesar1 = class(TThread) private { Private declarations } protected procedure Execute; override; public SemMovimento : boolean; smov, sest, gross, tare, net : string; procedure ExibePeso; end; TThreadPesar2 = class(TThread) private { Private declarations } protected procedure Execute; override; public SemMovimento : boolean; smov, sest, gross, tare, net : string; procedure ExibePeso;

PCLink 6.0 Toledo do Brasil - Indústria de balanças end; TFormTeste = class(TForm) Panel4: TPanel; Panel1: TPanel; Label11: TLabel; edtIP1: TEdit; Panel2: TPanel; Label2: TLabel; Label5: TLabel; Label1: TLabel; Label6: TLabel; Label3: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label12: TLabel; b1Bal1: TButton; b1Bal2: TButton; Panel3: TPanel; Label4: TLabel; Label10: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; Ent10: TPanel; Ent11: TPanel; Ent12: TPanel; Ent13: TPanel; Ent14: TPanel; Ent15: TPanel; Ent16: TPanel; Ent17: TPanel; p1Bit0: TBitBtn; p1Bit7: TBitBtn; p1Bit1: TBitBtn; p1Bit2: TBitBtn; p1Bit3: TBitBtn; p1Bit4: TBitBtn; p1Bit5: TBitBtn; p1Bit6: TBitBtn; Panel6: TPanel; Panel7: TPanel; Panel8: TPanel; Label17: TLabel; Label18: TLabel; Label19: TLabel; Label20: TLabel; Label21: TLabel; Label22: TLabel; Label23: TLabel; Label24: TLabel; Panel5: TPanel; ckSemMov2: TCheckBox; ckSemMov1: TCheckBox; Label31: TLabel;

31

32

PCLink 6.0 Toledo do Brasil - Indústria de balanças

Label32: TLabel; rgSerial: TRadioGroup; b1bal3: TButton; b1bal4: TButton; Label16: TLabel; Label25: TLabel; Label26: TLabel; Label27: TLabel; Label29: TLabel; cbSerial: TComboBox; Label28: TLabel; cbATcp: TComboBox; Label30: TLabel; cbBTcp: TComboBox; Label33: TLabel; cbCTcp: TComboBox; Label34: TLabel; cbDTcp: TComboBox; bInicializa1: TButton; Panel9: TPanel; bInicializa2: TButton; Panel10: TPanel; Label35: TLabel; Label36: TLabel; Label37: TLabel; lblver: TLabel; lblProg: TLabel; Label38: TLabel; lblConex: TLabel; Timer1: TTimer; Label39: TLabel; lblSerial: TLabel; procedure bInicializa1Click(Sender: TObject); procedure b1Bal1Click(Sender: TObject); procedure b1Bal2Click(Sender: TObject); // procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean); procedure ApagarCampos1; procedure ApagarCampos2; procedure Panelbit(Sender: TObject); procedure FormActivate(Sender: TObject); procedure bInicializa2Click(Sender: TObject); procedure b1bal3Click(Sender: TObject); procedure b1bal4Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } ThreadLerIo1, ThreadLerIo2 : TThreadLer; ThreadPesar1 ThreadPesar2 end;

: TThreadPesar1; : TThreadPesar2;

PCLink 6.0 Toledo do Brasil - Indústria de balanças var FormTeste : TFormTeste; NumPlacaFirex1, NumPlacaFirex2, CanalSelecionado1, CanalSelecionado2, CanalB1, CanalB2, CanalB3, CanalB4, CanalB5 : integer; ftr : boolean; RecSca, Ips : string; rtt : integer; // //

SetaIO, PortaIO

// Time1, // Time2 implementation

: integer; : TTimeStamp;

function Display_Erro(IP_SETADO : Integer) : PChar; stdcall; external 'PCLINK6.DLL'; function Seta_Ip(IPStr : PChar): Integer; stdcall; external 'PCLINK6.DLL'; function W9091(IP_SETADO : Integer; Canal : PChar): Integer; stdcall; external 'PCLINK6.DLL'; function W9091Serial(Canal : Integer): Integer; stdcall; external 'PCLINK6.DLL'; function WOhaus(IP_SETADO : Integer; Canal : PChar): Integer; stdcall; external 'PCLINK6.DLL'; function WOhausSerial(Canal : Integer): Integer; stdcall; external 'PCLINK6.DLL'; Function Select_Canal(CANAL_SETADO : Integer) : integer; stdcall; external 'PCLINK6.DLL'; Procedure Close_Canal(Canal : integer); stdcall; external 'PCLINK6.DLL'; procedure Deleta_Canal(Canal : integer); stdcall; external 'PCLINK6.DLL'; function Update_Canal(Canal : integer) : Integer; stdcall; external 'PCLINK6.DLL'; function Update_NoMotion(Canal : integer;Tempo : integer) : Integer; stdcall; external 'PCLINK6.DLL'; function Gross_Canal(Canal : integer) : PChar; stdcall; external 'PCLINK6.DLL'; function Net_Canal(Canal : integer) : PChar; stdcall; external 'PCLINK6.DLL'; function Tare_Canal(Canal : integer) : PChar; stdcall; external 'PCLINK6.DLL'; function DIO_InPort(Nip : integer): Integer; stdcall; external 'PCLINK6.DLL'; function DIO_InPortStr(Nip : integer): PChar; stdcall; external 'PCLINK6.DLL';

33

34

PCLink 6.0 Toledo do Brasil - Indústria de balanças

function DIO_InBit(Nip : integer;Entrada : Integer): Integer; stdcall; external 'PCLINK6.DLL'; function DIO_InBitStr(Nip : integer;Entrada : Integer): PChar; stdcall; external 'PCLINK6.DLL'; function DIO_OutPort(Nip : integer;Palavra : Integer): Integer; stdcall; external 'PCLINK6.DLL'; function DIO_OutPortStr(Nip : integer;Palavra : PChar): integer; stdcall; external 'PCLINK6.DLL'; function DIO_OutBit(Nip : integer;Saida,Estado: Integer): Integer; stdcall; external 'PCLINK6.DLL'; function DIO_OutBitStr(Nip : integer;Saida : Integer; Estado : PChar): integer; stdcall; external 'PCLINK6.DLL'; function Estado_EmMovimento(Canal : integer) : PChar; stdcall; external 'PCLINK6.DLL'; function Estado_Canal(Canal : integer) : PChar; stdcall; external 'PCLINK6.DLL'; procedure CloseLicense; stdcall; external 'PCLINK6.DLL'; procedure FirVer(var Nome,ver,serial,Conex,Programa : PChar); stdcall; external 'PCLINK6.DLL'; {$R *.dfm} procedure TFormTeste.bInicializa1Click(Sender: TObject); var i : integer; begin // Passa o IP já previamente configurado na Firex if bInicializa1.Tag = 1 then begin bInicializa1.Tag := 0; ThreadLerIO1.Terminate; ThreadPesar1.Terminate;

//

DIO_OutPort(NumPlacaFirex1,0); // desliga todas as saidas for i := 0 to 7 do begin with TBitBtn(FindComponent('p1Bit'+IntToStr(i))) do begin Font.Color := clBlack; end; with TPanel(FindComponent('Ent1'+IntToStr(i))) do begin Color := clGray; end; end; Application.OnIdle := nil; bInicializa1.Caption := 'Inicializa comunicação'; b1Bal1.Enabled b1Bal2.Enabled b1Bal3.Enabled b1Bal4.Enabled

:= := := :=

False; False; False; False;

Panel2.Enabled := False; Panel3.Enabled := False;

PCLink 6.0 Toledo do Brasil - Indústria de balanças if CanalB1 >= 0 then Close_Canal(CanalB1); if CanalB2 >= 0 then Close_Canal(CanalB2); if CanalB3 >= 0 then Close_Canal(CanalB3); if CanalB4 >= 0 then Close_Canal(CanalB4); ApagarCampos1; end else begin CanalSelecionado1 := -1; ThreadPesar1 := TThreadPesar1.Create(True); ThreadPesar1.FreeOnTerminate := True; ThreadPesar1.Resume; for i := 0 to 7 do begin with TPanel(FindComponent('Ent1'+IntToStr(i))) do begin Color := clRed; end; end; bInicializa1.Tag := 1; bInicializa1.Caption := 'Finaliza comunicação'; IPs := edtIP1.text; NumPlacaFirex1 := Seta_IP(PChar(IPs)); ThreadLerIO1 := TThreadLer.Create(True); ThreadLerIO1.FreeOnTerminate := True; ThreadLerIO1.Tela := 1; ThreadLerIO1.Resume; case cbATcp.ItemIndex of 0 : CanalB1 := W9091(NumPlacaFirex1,'A'); 1 : CanalB1 := WOhaus(NumPlacaFirex1,'A'); end; if CanalB1 < 0 then begin ShowMessage('Balança A :'#10#13+'Não foi possível realizar conexão'); end else b1Bal1.Enabled := True; case cbBTcp.ItemIndex of 0 : CanalB2 := W9091(NumPlacaFirex1,'B'); 1 : CanalB2 := WOhaus(NumPlacaFirex1,'B'); end; if CanalB2 < 0 then begin

35

36

PCLink 6.0 Toledo do Brasil - Indústria de balanças

ShowMessage('Balança B :'#10#13+'Não foi possível realizar conexão'); end else b1Bal2.Enabled := True; case cbCTcp.ItemIndex of 0 : CanalB3 := W9091(NumPlacaFirex1,'C'); 1 : CanalB3 := WOhaus(NumPlacaFirex1,'C'); end; if CanalB3 < 0 then begin ShowMessage('Balança C :'#10#13+'Não foi possível realizar conexão'); end else b1Bal3.Enabled := True; case cbDTcp.ItemIndex of 0 : CanalB4 := W9091(NumPlacaFirex1,'D'); 1 : CanalB4 := WOhaus(NumPlacaFirex1,'D'); end; if CanalB4 < 0 then begin ShowMessage('Balança D :'#10#13+'Não foi possível realizar conexão'); end else b1Bal4.Enabled := True; Panel2.Enabled := True; Panel3.Enabled := True; FormTeste.SelectNext(bInicializa1,True,True); end; end; procedure TFormTeste.ApagarCampos1; begin // Application.OnIdle := nil; Label5.Caption := ''; Label6.Caption := ''; Label7.Caption := ''; Label9.Caption := ''; Label25.Caption := ''; end; procedure TFormTeste.ApagarCampos2; begin // Application.OnIdle := nil; Label18.Caption := ''; Label20.Caption := ''; Label22.Caption := ''; Label24.Caption := ''; Label27.Caption := ''; end; procedure TFormTeste.Panelbit(Sender: TObject); begin

PCLink 6.0 Toledo do Brasil - Indústria de balanças // '+

37

PortaIO := StrToInt((Sender as TBitBtn).caption); if MessageDlg('Cuidado !'+#13#13+'Certifique-se que pode ser alterado

'o estado atual deste port de saída.',mtWarning,mbOKCancel,0) = mrOK then begin if (Sender as TBitBtn).Font.Color = clRed then begin // Esta ligado (Sender as TBitBtn).Font.Color := clBlack; DIO_OutBit(NumPlacaFirex1,StrToInt((Sender as TBitBtn).caption),0); // SetaIO := 0; end else begin // Esta desligado (Sender as TBitBtn).Font.Color := clRed; DIO_OutBit(NumPlacaFirex1,StrToInt((Sender as TBitBtn).caption),1); // SetaIO := 1; end; end; end; procedure TFormTeste.b1Bal1Click(Sender: TObject); begin ApagarCampos1; CanalSelecionado1 := CanalB1; b1Bal1.Enabled b1Bal2.Enabled b1Bal3.Enabled b1Bal4.Enabled

:= := := :=

False; True; True; True;

FormTeste.ActiveControl := b1Bal2; end; procedure TFormTeste.b1Bal2Click(Sender: TObject); begin ApagarCampos1; CanalSelecionado1 := CanalB2; b1Bal1.Enabled b1Bal2.Enabled b1Bal3.Enabled b1Bal4.Enabled

:= := := :=

True; False; True; True;

FormTeste.ActiveControl := b1Bal1; end; procedure TFormTeste.b1bal3Click(Sender: TObject); begin ApagarCampos1; CanalSelecionado1 := CanalB3; b1Bal1.Enabled := True; b1Bal2.Enabled := True;

38

PCLink 6.0 Toledo do Brasil - Indústria de balanças b1Bal3.Enabled := False; b1Bal4.Enabled := True;

FormTeste.ActiveControl := b1Bal4; end; procedure TFormTeste.b1bal4Click(Sender: TObject); begin ApagarCampos1; CanalSelecionado1 := CanalB4; b1Bal1.Enabled b1Bal2.Enabled b1Bal3.Enabled b1Bal4.Enabled

:= := := :=

True; True; True; False;

FormTeste.ActiveControl := b1Bal1; end; procedure TFormTeste.FormActivate(Sender: TObject); begin FormTeste.ActiveControl := edtIP1; end; procedure TThreadLer.Execute; begin While not Terminated do begin retorno := DIO_InPort(NumPlacaFirex1); if retorno -1 then Synchronize(Exibeio); sleep(500); end; end; procedure TThreadLer.ExibeIO; var i,j : integer; begin j := 1; for i := 0 to 7 do begin with TPanel(FormTeste.FindComponent('Ent'+IntToStr(Tela)+IntToStr(i))) do begin if (retorno and j) > 0 then Color := clTeal else Color := clRed; j := j shl 1; end; end; end; procedure TThreadPesar1.Execute; var ret : integer; begin while not terminated do begin

PCLink 6.0 Toledo do Brasil - Indústria de balanças if CanalSelecionado1 >= 0 then begin if Select_Canal(CanalSelecionado1) = 0 then begin gross := 'Erro'; tare := ''; net := ''; smov := ''; sest := ''; Synchronize(ExibePeso); end else begin // Execute do IP1 if SemMovimento then begin ret := Update_NoMotion(CanalSelecionado1,5000); end else begin ret := Update_Canal(CanalSelecionado1); end; if (ret = 0) or (ret = 3) then begin if ret = 0 then begin gross := StrPas(Gross_canal(CanalSelecionado1)); tare := StrPas(Tare_canal(CanalSelecionado1)); net := StrPas(Net_canal(CanalSelecionado1)); smov := StrPas(Estado_EmMovimento(CanalSelecionado1)); end; if ret = 3 then begin gross := 'Sobrecarga'; tare := ''; net := ''; smov := ''; end; sest := StrPas(Estado_Canal(CanalSelecionado1)); end; // Aqui deve ser analisado caso a caso...se timeout, se sobrecarga if (ret 0) and (ret 3) then begin gross := 'Erro'; tare := ''; net := ''; smov := '';

39

40

PCLink 6.0 Toledo do Brasil - Indústria de balanças

end; Synchronize(ExibePeso); end; end; sleep(1); // Application.ProcessMessages; end; gross := ''; tare

:= '';

net

:= '';

smov

:= '';

sest

:= '';

Synchronize(ExibePeso); end; procedure TThreadPesar1.ExibePeso; begin // Exibe peso do IP1 FormTeste.Label5.Caption := Gross; FormTeste.Label6.Caption := Tare; FormTeste.Label7.Caption := Net; FormTeste.Label9.Caption := smov; FormTeste.Label25.Caption := sest; SemMovimento := FormTeste.ckSemMov1.Checked; end; procedure TThreadPesar2.Execute; var ret : integer; begin while not terminated do begin if CanalSelecionado2 >= 0 then begin if Select_Canal(CanalSelecionado2) = 0 then begin gross := 'Erro'; tare := ''; net := ''; smov := ''; sest := ''; Synchronize(ExibePeso); end else begin // Execute do IP1 if SemMovimento then begin

PCLink 6.0 Toledo do Brasil - Indústria de balanças ret := Update_NoMotion(CanalSelecionado2,5000); end else begin ret := Update_Canal(CanalSelecionado2); end; if (ret = 0) or (ret = 3) then begin if ret = 0 then begin gross := StrPas(Gross_canal(CanalSelecionado2)); tare := StrPas(Tare_canal(CanalSelecionado2)); net := StrPas(Net_canal(CanalSelecionado2)); smov := StrPas(Estado_EmMovimento(CanalSelecionado2)); end; if ret = 3 then begin gross := 'Sobrecarga'; tare := ''; net := ''; smov := ''; end; sest := StrPas(Estado_Canal(CanalSelecionado2)); end; // Aqui deve ser analisado caso a caso...se timeout, se sobrecarga if (ret 0) and (ret 3) then begin gross := 'Erro'; tare := ''; net := ''; smov := ''; end; Synchronize(ExibePeso); end; end; sleep(1); // Application.ProcessMessages; end; gross := ''; tare

:= '';

net

:= '';

smov

:= '';

sest

:= '';

41

42

PCLink 6.0 Toledo do Brasil - Indústria de balanças

Synchronize(ExibePeso); end; procedure TThreadPesar2.ExibePeso; begin // Exibe peso do IP1 FormTeste.Label18.Caption := Gross; FormTeste.Label20.Caption := Tare; FormTeste.Label22.Caption := Net; FormTeste.Label24.Caption := smov; FormTeste.Label27.Caption := sest; SemMovimento := FormTeste.ckSemMov2.Checked; end;

procedure TFormTeste.bInicializa2Click(Sender: TObject); begin // Passa o IP já previamente configurado na Firex if bInicializa2.Tag = 1 then begin bInicializa2.Tag := 0; ThreadPesar2.Terminate; Sleep(1000); bInicializa2.Caption := 'Iniciar leitura'; ApagarCampos2; Panel8.Enabled := False; if CanalB5 >= 0 then begin Close_Canal(CanalB5); Deleta_Canal(CanalB5); end; end else begin CanalSelecionado2 := -1; ThreadPesar2 := TThreadPesar2.Create(True); ThreadPesar2.FreeOnTerminate := True; ThreadPesar2.Resume; bInicializa2.Tag := 1; bInicializa2.Caption := 'Finalizar pesagem'; case cbSerial.ItemIndex of 0 : CanalB5 := W9091Serial(rgSerial.ItemIndex+1); 1 : CanalB5 := WOhausSerial(rgSerial.ItemIndex+1); end; if CanalB5 < 0 then

PCLink 6.0 Toledo do Brasil - Indústria de balanças begin ShowMessage('Balança via porta serial :'#10#13+'Não foi possível realizar leitura.'); exit; end; CanalSelecionado2 := CanalB5; Panel8.Enabled := True; FormTeste.SelectNext(bInicializa2,True,True); end; end; procedure TFormTeste.FormClose(Sender: TObject; var Action: TCloseAction); begin CloseLicense; end; procedure TFormTeste.Timer1Timer(Sender: TObject); var Nome,ver,serial,Conex,Programa : PChar; begin FirVer(Nome,ver,serial,Conex,Programa); lblver.Caption := StrPas(nome) + ' ' + StrPas(ver); lblProg.caption := strpas(Programa); lblConex.caption := strpas(Conex); lblSerial.Caption := serial; end; end.

43

44

7.2

PCLink 6.0 Toledo do Brasil - Indústria de balanças

Exemplo VB 6

Este programa se destina para testes e para desenvolvimento de aplicações para linguagem de programação Visual Basic. Na parte superior da tela, se encontram dados relativos a hardkey PCLink6 . Se esses dados não estiverem aparecendo, significa que não foi possível ler a hardkey, seja ela remota ou local. Do lado direito pode ser configurado uma leitura de balança via RS232. Apesar do programa estar fixando a leitura de COM1 a COM8, a DLL permite a leitura de qualquer serial que esteja instalada no computador. Do lado esquerdo pode ser configurado uma leitura de balança via FIREX. Antes de se fazer esta leitura é necessário que se utilize o programa Firex Tools para configurar a placa Firex com um endereço IP e parâmetros dos canais A,B,C ou D. Além disso, a Firex deve ter uma placa SIM no canal que se deseja a leitura e placas PIM (Entradas e Saídas) se for ativar IO´s. 7.2.1 Código fonte VB 6 Attribute VB_Name = "Geral" 'Desenvolvido para Visual Basic 6.0 Service Pack 5 Option Explicit Public tentativa, i, Codigo, Tipo As Long 'Variaveis utilizadas para serial Public s_SemMovimento As Boolean

PCLink 6.0 Toledo do Brasil - Indústria de balanças Public CanalSerial As Long Public s_mov, s_est, s_gross, s_tare, s_net, s_sest As String 'Variaveis utilizadas para TcpIp Public i_SemMovimento As Boolean Public NumPlacaFirex As Long Public CanalTcp, retIO As Long Public i_mov, i_est, i_gross, i_tare, i_net, i_sest, IPs As String 'Declara algumas funções da dll utilizadas nesse programa Declare Function Display_Erro Lib "PcLink6.dll" _ (ByVal IP_SETADO As Long) As String Declare Function Seta_Ip Lib "PcLink6.dll" _ (ByVal IPStr As String) As Long Declare Function W9091 Lib "PcLink6.dll" _ (ByVal IP_SETADO As Long, ByVal Canal As String) As Long Declare Function W9091Serial Lib "PcLink6.dll" _ (ByVal Canal As Long) As Long Declare Function WOhaus Lib "PcLink6.dll" _ (ByVal IP_SETADO As Long, ByVal Canal As String) As Long Declare Function WOhausSerial Lib "PcLink6.dll" _ (ByVal Canal As Long) As Long Declare Function Select_Canal Lib "PcLink6.dll" _ (ByVal CANAL_SETADO As Long) As Long Declare Sub Close_Canal Lib "PcLink6.dll" (ByVal Canal As Long) Declare Sub Deleta_Canal Lib "PcLink6.dll" (ByVal Canal As Long) Declare Function Update_Canal Lib "PcLink6.dll" _ (ByVal Canal As Long) As Long Declare Function Update_NoMotion Lib "PcLink6.dll" _ (ByVal Canal As Long, ByVal Tempo As Long) As Long Declare Function Gross_Canal Lib "PcLink6.dll" _ (ByVal Canal As Long) As String Declare Function Net_Canal Lib "PcLink6.dll" _ (ByVal Canal As Long) As String Declare Function Tare_Canal Lib "PcLink6.dll" _ (ByVal Canal As Long) As String

45

46

PCLink 6.0 Toledo do Brasil - Indústria de balanças

Declare Function DIO_InPort Lib "PcLink6.dll" _ (ByVal Nip As Long) As Long Declare Function DIO_InPortStr Lib "PcLink6.dll" _ (ByVal Nip As Long) As String Declare Function DIO_InBit Lib "PcLink6.dll" _ (ByVal Nip As Long, ByVal Entrada As Long) As Long Declare Function DIO_InBitStr Lib "PcLink6.dll" _ (ByVal Nip As Long, Entrada As Long) As String Declare Function DIO_OutPort Lib "PcLink6.dll" _ (ByVal Nip As Long, ByVal Palavra As Long) As Long Declare Function DIO_OutPortStr Lib "PcLink6.dll" _ (ByVal Nip As Long, Palavra As String) As Long Declare Function DIO_OutBit Lib "PcLink6.dll" _ (ByVal Nip As Long, ByVal Saida As Long, ByVal Estado As Long) As Long Declare Function DIO_OutBitStr Lib "PcLink6.dll" _ (ByVal Nip As Long, ByVal Saida As Long, ByVal Estado As String) As Long Declare Function Estado_EmMovimento Lib "PcLink6.dll" _ (ByVal Canal As Long) As String Declare Function Estado_Canal Lib "PcLink6.dll" _ (ByVal Canal As Long) As String Declare Sub CloseLicense Lib "PcLink6.dll" () Declare Sub FirVer Lib "PcLink6.dll" _ (ByRef Nome As String, _ ByRef ver As String, _ ByRef serial As String, _ ByRef conex As String, _ ByRef Programa As String)

VERSION 1.0 CLASS BEGIN MultiUse = -1 'True Persistable = 0 'NotPersistable DataBindingBehavior = 0 'vbNone DataSourceBehavior = 0 'vbNone MTSTransactionMode = 0 'NotAnMTSObject END Attribute VB_Name = "PckIo" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = True Attribute VB_PredeclaredId = False Attribute VB_Exposed = False 'Desenvolvido para Visual Basic 6.0 Service Pack 5

PCLink 6.0 Toledo do Brasil - Indústria de balanças

47

' Aqui é utilizado as funcoes OutPort e Inport, para todas as entradas e saídas. ' Poderia ser utilizado inbit ou outbit para escrever individualmente, ' mas precisa ser analisado cada caso individualmente Option Explicit Public ResEnt As Integer Public ResSai As Integer Private Entrada(1 To 8) As Long Private Saida(1 To 8) As Long Public Sub SetSaida(sa As Integer, va As Integer) Saida(sa) = va End Sub Public Function GetEntrada(va As Integer) As Integer GetEntrada = Entrada(va) End Function Public Function Refresh(NFir As Long) As Boolean Dim i, j, ats, ret As Integer Refresh = False 'Lê todas as entradas, direto da Firex ResEnt = DIO_InPort(NFir) If ResEnt -1 Then j = 1 For i = 1 To 8 'verifica bit a bit o estado da entrada If (ResEnt And j) > 0 Then Entrada(i) = 1 Else Entrada(i) = 0 End If j = j * 2 Next Else Exit Function End If ats = 0 j = 1 For i = 1 To 8 'Prepara o estado das saídas bit a bit If Saida(i) = 1 Then ats = ats Or j End If j = j * 2 Next ret = DIO_OutPort(NFir, ats) If ret = -1 Then Exit Function End If

' ativa as saidas

48

PCLink 6.0 Toledo do Brasil - Indústria de balanças

Refresh = True End Function 'Desenvolvido para Visual Basic 6.0 Service Pack 5 'Este exemplo é apenas conceitual, por isso foi utilizado o objeto Timer. 'Para ler várias balanças ao mesmo tempo, deve ser utilizado algum outro modo 'multitarefa. Private TabIo As PckIo

'Entradas e saídas lógicas

Private Sub ApagarCamposTcp() lbiBruto.Caption = "" lbiTara.Caption = "" lbiLiquido.Caption = "" lbiEstado.Caption = "" End Sub Private Sub bTCP_Click() ' Passa o IP já previamente configurado na Firex If bTCP.Tag = 1 Then bTCP.Tag = 0 TimerIO.Enabled = False TimerIP.Enabled = False ret = DIO_OutPort(NumPlacaFirex, 0) S1.Value = False S2.Value = False S3.Value = False S4.Value = False S5.Value = False S6.Value = False S7.Value = False S8.Value = False bTCP.Caption = "Iniciar Leitura" bTCP.Enabled = False PanelE.Visible = False PanelS.Visible = False FinalizaIP.Enabled = True Else CanalTcp = -1 E1.Value E2.Value E3.Value E4.Value E5.Value E6.Value E7.Value E8.Value

= = = = = = = =

False False False False False False False False

bTCP.Tag = 1

' desliga todas as saidas

PCLink 6.0 Toledo do Brasil - Indústria de balanças bTCP.Caption = "Finalizar Leitura" bTCP.Enabled = False IPs = edtIP.Text NumPlacaFirex = Seta_Ip(IPs) If cbIndicadorIP.ListIndex = 0 Then CanalTcp = W9091(NumPlacaFirex, cbCanalIP.Text) Else CanalTcp = WOhaus(NumPlacaFirex, cbCanalIP.Text) End If If CanalTcp < 0 Then MsgBox ("Não foi possível realizar conexão") Else TimerIO.Enabled = True TimerIP.Enabled = True PanelS.Visible = True PanelE.Visible = True End If bTCP.Enabled = True End If End Sub Private Sub bSerial_Click() 'se tag = 1 é porque deseja parar a leitura If bSerial.Tag = 1 Then TimerSerial.Enabled = False bSerial.Tag = 0 bSerial.Caption = "Iniciar leitura" bSerial.Enabled = False FinalizarSerial.Enabled = True Else CanalSerial = -1 bSerial.Tag = 1 bSerial.Caption = "Finalizar pesagem" bSerial.Enabled = False If cbSerial.ListIndex = 0 Then CanalSerial = W9091Serial(cbCom.ListIndex + 1) Else CanalSerial = WOhausSerial(cbCom.ListIndex + 1) End If If CanalSerial < 0 Then MsgBox ("Balança via porta serial : Não foi possível realizar leitura.") Else TimerSerial.Enabled = True End If bSerial.Enabled = True End If End Sub

49

50

PCLink 6.0 Toledo do Brasil - Indústria de balanças

Private Sub ApagarCamposSerial() lbsBruto.Caption = "" lbsTara.Caption = "" lbsLiquido.Caption = "" lbsEstado.Caption = "" End Sub Private Sub AtualizaEntradas() E1.Value = TabIo.GetEntrada(1) E2.Value = TabIo.GetEntrada(2) E3.Value = TabIo.GetEntrada(3) E4.Value = TabIo.GetEntrada(4) E5.Value = TabIo.GetEntrada(5) E6.Value = TabIo.GetEntrada(6) E7.Value = TabIo.GetEntrada(7) E8.Value = TabIo.GetEntrada(8) End Sub Private Sub FinalizaIP_Timer() If TimerIP.Enabled = False And TimerIO.Enabled = False And TimerIP.Tag = 0 And TimerIO.Tag = 0 Then If CanalTcp >= 0 Then Close_Canal (CanalTcp) Deleta_Canal (CanalTcp) End If ApagarCamposTcp FinalizaIP.Enabled = False bTCP.Enabled = True End If End Sub Private Sub FinalizarSerial_Timer() If TimerSerial.Enabled = False And TimerSerial.Tag = 0 Then If CanalSerial >= 0 Then Close_Canal (CanalSerial) Deleta_Canal (CanalSerial) End If ApagarCamposSerial FinalizarSerial.Enabled = False bSerial.Enabled = True End If End Sub Private Sub Form_Activate() cbCanalIP.ListIndex = 0 cbIndicadorIP.ListIndex = 0 cbSerial.ListIndex = 0 cbCom.ListIndex = 0 End Sub Private Sub Form_Load() 'Inicializa objeto para IO's Set TabIo = New PckIo End Sub

PCLink 6.0 Toledo do Brasil - Indústria de balanças Private Sub Form_Unload(Cancel As Integer) HK.Enabled = False Set TabIo = Nothing CloseLicense End Sub Private Sub HK_Timer() Dim Nome As String, ver As String, progr As String, conex As String, serialt As String FirVer Nome, ver, serialt, conex, progr Label12.Caption Label13.Caption Label14.Caption Label15.Caption

= = = =

Nome + " " + ver progr conex serialt

End Sub 'Seta ou reseta saídas de IO Private Sub S1_Click() TabIo.SetSaida 1, S1.Value End Sub Private Sub S2_Click() TabIo.SetSaida 2, S2.Value End Sub Private Sub S3_Click() TabIo.SetSaida 3, S3.Value End Sub Private Sub S4_Click() TabIo.SetSaida 4, S4.Value End Sub Private Sub S5_Click() TabIo.SetSaida 5, S5.Value End Sub Private Sub S6_Click() TabIo.SetSaida 6, S6.Value End Sub Private Sub S7_Click() TabIo.SetSaida 7, S7.Value End Sub Private Sub S8_Click() TabIo.SetSaida 8, S8.Value End Sub Private Sub ExibePesoSerial() ' Exibe peso da serial lbsBruto.Caption = s_gross

51

52

PCLink 6.0 Toledo do Brasil - Indústria de balanças lbsTara.Caption = s_tare lbsLiquido.Caption = s_net lbsEstado.Caption = s_sest s_SemMovimento = ckMovSerial.Value

End Sub Private Sub ExibePesoIP() ' Exibe peso do IP lbiBruto.Caption = i_gross lbiTara.Caption = i_tare lbiLiquido.Caption = i_net lbiEstado.Caption = i_sest i_SemMovimento = ckMovIP.Value End Sub Private Sub TimerIO_Timer() If TabIo.Refresh(NumPlacaFirex) = True Then 'atualiza variaveis de IO AtualizaEntradas End If End Sub Private Sub TimerIP_Timer() 'faz a leitura enquanto não encerrar TimerIP.Tag = 1 If CanalTcp >= 0 Then If Select_Canal(CanalTcp) = 0 Then i_gross = "Erro" i_tare = "" i_net = "" i_smov = "" i_sest = "" ExibePesoIP Else If i_SemMovimento Then ret = Update_NoMotion(CanalTcp, 5000) If ret = 0 Then i_gross = Gross_Canal(CanalTcp) i_tare = Tare_Canal(CanalTcp) i_net = Net_Canal(CanalTcpSerial) i_smov = Estado_EmMovimento(CanalTcp) i_sest = Estado_Canal(CanalTcp) End If Else

PCLink 6.0 Toledo do Brasil - Indústria de balanças

53

ret = Update_Canal(CanalTcp) If ret = 0 Then i_gross = Gross_Canal(CanalTcp) i_tare = Tare_Canal(CanalTcp) i_net = Net_Canal(CanalTcp) i_smov = Estado_EmMovimento(CanalTcp) i_sest = Estado_Canal(CanalTcp) End If End If ' Aqui deve ser analisado caso a caso...se timeout, se sobrecarga If ret 0 Then i_gross = "Erro" i_tare = "" i_net = "" i_smov = "" i_sest = "" End If ExibePesoIP End If End If TimerIP.Tag = 0 End Sub Private Sub TimerSerial_Timer() 'faz a leitura enquanto não encerrar TimerSerial.Tag = 1 If CanalSerial >= 0 Then If Select_Canal(CanalSerial) = 0 Then s_gross = "Erro" s_tare = "" s_net = "" s_smov = "" s_sest = "" ExibePesoSerial Else If s_SemMovimento Then ret = Update_NoMotion(CanalSerial, 5000) If ret = 0 Then s_gross = Gross_Canal(CanalSerial) s_tare = Tare_Canal(CanalSerial) s_net = Net_Canal(CanalSerial) s_smov = Estado_EmMovimento(CanalSerial) s_sest = Estado_Canal(CanalSerial) End If Else ret = Update_Canal(CanalSerial) If ret = 0 Then

54

PCLink 6.0 Toledo do Brasil - Indústria de balanças s_gross = Gross_Canal(CanalSerial) s_tare = Tare_Canal(CanalSerial) s_net = Net_Canal(CanalSerial) s_smov = Estado_EmMovimento(CanalSerial) s_sest = Estado_Canal(CanalSerial) End If

End If ' Aqui deve ser analisado caso a caso...se timeout, se sobrecarga If ret 0 Then s_gross = "Erro" s_tare = "" s_net = "" s_smov = "" s_sest = "" End If ExibePesoSerial End If End If TimerSerial.Tag = 0 End Sub

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF