Você está na página 1de 54

PCLink for Windows - Verso 6.

0
Serial e Ethernet
Guia do usurio Verso 1.3

ndice
1
2
3
4
5

Introduo................................................................................................................................................... 5
HardKey ..................................................................................................................................................... 6
Hardkey servidor ........................................................................................................................................ 7
Escrevendo programas................................................................................................................................ 8
Comunicao via porta serial (COM) do computador................................................................................ 8
5.1
Comunicao 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 sadas digitais ..................................................................................... 12
6 Declaraes para PCLink6.Dll ................................................................................................................. 13
6.1
Display_Erro .................................................................................................................................... 13
6.2
Seta_Ip.............................................................................................................................................. 13
6.3
W9091 .............................................................................................................................................. 13
6.4
W9091Serial ..................................................................................................................................... 14
6.5
Consideraes 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 Consideraes sobre Entradas/Sadas 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 programao ....................................................................................................................... 29
7.1
Delphi 6 ............................................................................................................................................ 29
7.1.1
Cdigo fonte Delphi6 ............................................................................................................... 30
7.2
Exemplo VB 6 .................................................................................................................................. 44
7.2.1
Cdigo fonte VB 6.................................................................................................................... 44

PCLink 6.0
Toledo do Brasil - Indstria de balanas

1 Introduo
O PCLink 6.0 vem substituir as verses anteriores do produto, porm, introduzindo a
comunicao via ethernet para leitura de balanas seriais (RS232 ou Loop de corrente)
atravs de uma placa FIREX.
A FIREX se aplica quando a aplicao do cliente requer ambiente de monitoramento
remoto, (sistemas de segurana, automao de fbrica, SCADA, transporte de dados, etc.).
Ou seja, de um micro qualquer da fbrica, ou de todos os micros, o cliente precisa:
-

ligar/desligar sinalizao remota... semforos...abrir e fechar vlvulas...


saber a posio (status) dos sinais de campo... sensores fotoeltricos, chaves fim de
curso, sensores de posicionamento...
ler peso de balanas

As vantagens da FIREX so :
-

Padronizar o meio fsico de comunicao (Ethernet)...


Facilitar instalao e Reduzir custo de tubulao e fiao...
Reduzir os problemas de interferncias e descargas atmosfricas.
Todos os micros da rede podem acessar a mesma FIREX, porm , com algumas
limitaes.

Limitaes da FIREX :
- S possvel uma conexo, por canal serial da FIREX, ou seja, dois computadores
no conseguem ler a mesma balana ao mesmo tempo. Para isso, um computador
deve fazer sua leitura e fechar a conexo, permitindo que outro computador na rede
possa efetuar uma leitura de balana.
- permitido at 7(sete) conexes para fazer a leitura de entradas, acionamento das
sadas e programao dos canais seriais.
- O trfego na rede ethernet est diretamente ligado ao desempenho da comunicao.
Para casos crticos, vale fazer a segmentao da rede para deixar a leitura das
balanas independente de qualquer outra informao.
Esta nova verso da PCLink 6, permite a leitura das balanas tanto serialmente quanto via
ethernet, atravs de funes que so disponibilizadas em uma DLL chamada
PCLink6.DLL.
Observao importante :
Esta nova verso incompatvel com as verses anteriores da PCLink.

PCLink 6.0
Toledo do Brasil - Indstria de balanas

2 HardKey
Para utilizar a DLL PCLink6 ser necessrio 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
configuraes :

Leitura de balanas, utilizando porta serial, tendo uma hardkey local por
computador. Modo ideal de trabalho, para no 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 balanas, 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 trs


computadores, que estar trabalhando com um
servio ou programa gerenciador de conexes.
A melhor opo um computador que no
precise ser desligado.

Importante : para comunicao com Firex, no necessrio hardkey

PCLink 6.0
Toledo do Brasil - Indstria de balanas

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 instalao ir instalar alguns programas no menu Iniciar\PCLink6 :

FirexTool
Programa para configurao das placas Firex. A placa vem com IP 10.0.0.1 de
fbrica.
SerialIP
Programa teste para leitura de balanas em porta serial ou de canais de Firex,
contm 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 instalao que podem ser
feitas, servio para NT/Windows 2000(SrvProteq) ou programa gerenciador para
qualquer sistema operacional(GerHardkey). Este programa tambm deve ser
utilizado para desinstalar a hardkey, quando necessitar trocar a hardkey para outro
computador. Caso esta instalao no 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
instalao remota, onde a principal exigncia o nome do computador onde a
hardkey est instalada.
SrvProteq
Servio NT/Win 2000 para gerenciar o controle de licenas da hardkey. Este
servio instalado automaticamente quando se utiliza o programa SetupHardkey.
Caso necessite instal-lo manualmente , basta entrar na tela de prompt , ir no
diretrio onde est o programa SrvProteq e digitar SrvProteq /install se precisar
desinstalar digite SrvProteq /Uninstall . Para iniciar e parar o servio deve ser
feito manualmente.
GerHardkey
Programa para qualquer sistema operacional para gerenciar o controle de licenas 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 monitorao
relacionado a hardkey. Pode ser utilizado para determinar se o servio/programa
gerenciador da hardkey est funcionando, se o programa executvel desenvolvido
pelo cliente est conseguindo uma conexo com a hardkey, e exibe algumas
mensagens de erro , se acontecerem.

PCLink 6.0
Toledo do Brasil - Indstria de balanas

4 Escrevendo programas
Daremos a seguir algumas explicaes sobre como efetuar uma leitura via um canal serial
ou via ethernet, j mostrando algumas funes que pertencem a DLL. Como exemplo,
utilizaremos o indicador Toledo 9091. Para exemplificar para qualquer tipo de linguagem
de programao, colocarei uma exclamao(!) como comentrio e tratarei como uma
linguagem genrica. Utilizarei algumas variveis do tipo String para obtermos pesos de
tara, bruto, liquido e estado da balana. Essas variveis so terminadas com nulo.

5 Comunicao via porta serial (COM) do


computador
Para fazer esta comunicao, precisamos ter uma porta vlida para o sistema operacional.
Utilizando a funo especfica para cada balana, fazemos uma conexo serial para o 9091 :
!
!
!
!
!

vamos fazer uma conexo para COM3


utilizaremos uma varivel do tipo inteiro,
para obter o retorno da funo.
isto deve ser feito apenas uma vez, na inicializao
do programa

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

esta varivel B3 muito importante, pois ser nossa


ligao com a balana e seu protocolo. Ao testar o
retorno dessa funo, saberemos se obtivemos uma
conexo vlida.

! SE B3 MENOR QUE ZERO , temos um erro de conexo


if B3 < 0 then
Display(No foi possvel conectar com a balana x);
Return;
End if;
! O prximo passo ser testar se a conexo continua
! vlida, para efetuar uma leitura de peso.

PCLink 6.0
Toledo do Brasil - Indstria de balanas

! SE SELECT_CANAL(B3) DIFERENTE DE 0
if Select_Canal(B3) <> 0 then
! Faremos uma leitura de balana com ou sem
! movimento sobre a balana
! poderia ser utilizado a funo update_nomotion
! se fosse necessrio ler um peso estvel.
ret := Update_Canal(B3);
! Aps 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. Estvel ou instvel
smov := Estado_EmMovimento(B3);
! obtemos outros estados da balana
sEst := Estado_Canal(B3);
end if;
end if;
Como pde se ver, a leitura relativamente simples. Verifique a descrio detalhada de
todas as funes utilizadas no exemplo. Na instalao do programa se encontra um diretrio
onde tem um programa exemplo em Delphi.

10

5.1

PCLink 6.0
Toledo do Brasil - Indstria de balanas

Comunicao via ethernet

Como foi descrito anteriormente, leremos uma balana atravs da placa FIREX. A placa
FIREX possui 4(quatro) canais de comunicao (A,B,C,D) e 8(oito)entradas digitais(0 a 7)
e 8(oito) sadas digitais(0 a 7). Verifique a fig.1 :

Fig. 1 Modelo placa Firex


Observao : Para maiores detalhes tcnicos, consulte o manual da placa Firex, que
acompanha o disco de instalao.

PCLink 6.0
Toledo do Brasil - Indstria de balanas

11

5.1.1 Pinagem dos canais seriais


A seguir est indicado a pinagem de cada canal, conforme o tipo:

Pinos 20mA

RS232

TxIN

TxD

TxOUT

RTS

RxIN

RxD

RxOUT

CTS

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 so para RTS e 3 e 4 para CTS.
No canal A, ao se utilizar o controle de fluxo far com que a placa no deixe mais
disponvel para o usurio a entrada 6 e sada 6.
No canal B, ao se utilizar o controle de fluxo far com que a placa no deixe mais
disponvel para o usurio a entrada 5 e sada 5.
No canal C, ao se utilizar o controle de fluxo far com que a placa no deixe mais
disponvel para o usurio a entrada 4 e sada 4.
A concluso que a leitura destas entradas e a escrita nessas sadas, no pode ser
considerado aps ativar o controle de fluxo.
5.1.3 Loop de corrente Ativo / Passivo
Para a configurao de Ativo/Passivo para loop de corrente, utilize o conjunto de pinos a
frente de cada canal como demonstrado na fig 1, e faa a configurao conforme abaixo:

Fig 2 Configurao de Ativo/Passivo

12

PCLink 6.0
Toledo do Brasil - Indstria de balanas

5.1.4 Pinagem das entradas e sadas digitais


A seguir est indicado a pinagem das entradas e sadas :
Pinos

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

GND

GND

+10V

+10V

IN0

IN4

IN1

IN5

IN2

IN6

IN3

IN7

In

In

OUT0

OUT4

OUT1

OUT5

10

OUT2

OUT6

11

OUT3

OUT7

12

OUT+

OUT+

Conexo para entradas e sadas :


INn

OUT+
+
-

Ri
3K3

IN0
+
-

OUT0
OUTn
Sadas

Caractersticas:
Sadas
= 24VDC, 100mA;
Entradas = 7mA @ 24VDC.

IN
Entradas

PCLink 6.0
Toledo do Brasil - Indstria de balanas

13

6 Declaraes para PCLink6.Dll


Aqui temos as declaraes das funes e sua utilizao :
6.1

Display_Erro

Utilizada para exibir mensagens que a DLL carrega quando ocorre algum erro na operao
que o usurio quer executar.
Parmetros :
IP_SETADO Valor inteiro retornado da funo Seta_Ip correspondente a
um IP para comunicao.
Retorno :
Retorna um pointer de caracter, com uma mensagem para melhor
identificao 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 comunicao.
Esta funo retorna um valor inteiro que ser muito utilizado nas demais operaes da
DLL.
Parmetros :
IPStr IP para comunicao com mximo 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
comunicao.
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.
Parmetros :
IP_SETADO Valor inteiro retornado da funo Seta_Ip correspondente a
um IP para comunicao.
Canal Canal de comunicao da placa FIREX (A,B,C ou D).

14

PCLink 6.0
Toledo do Brasil - Indstria de balanas

Retorno :
Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na
comunicao.
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.
Parmetros :
COM Valor inteiro correspondente a uma porta serial para comunicao.
COM1 = 1, COM2 = 2 e assim por diante.
Retorno :
Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na
comunicao.
Sintaxe em C :
int W9091Serial( int COM);
Sintaxe em Delphi :
function W9091Serial(COM : Integer): Integer; stdcall;
6.5

Consideraes sobre 9091 contador

O 9091 contador, envia pacotes de dados sobre demanda, ou seja, quando a tecla print for
pressionada e a balana completamente estabilizada. Para fazer essa comunicao deve
haver um sincronismo entre o momento que ser enviado os dados e o programa que
receber essas informaes. Para iniciar, programe seu 9091 com a seguinte configurao
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) impresso automtica desabilitada
(d) sensor de movimento desativado
(d) modo rede desativado
(d) imprime pesos BRUTO, TARA e LQUIDO
(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) transmisso contnua desativada - modo demanda
(L) ativa o uso da tecla F2
(L) ativa o envio da data e hora da pesagem
(L) envia o cdigo digitado pelo operador
(L) identifica a tara manual

PCLink 6.0
Toledo do Brasil - Indstria de balanas

15

Aps essa configurao, utilizar as funes W9091C para Firex ou W9091SerialC para
porta serial. Para fazer a leitura utilizar a funo Contadora_Canal.
Exemplos :
Para iniciar a conexo via ethernet Firex :
Sip := Seta_IP('192.168.211.17');
if Sip >= 0 then
begin
// a conexo ser no canal B da Firex
Canal := W9091C(Sip,'B');
end;
Fazendo a conexo via porta serial COM 1 :
Canal := W9091SerialC(1);
Aps a conexo ser realizada, utilizar a leitura quantas vezes for necessrio com as funes:
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 funo 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 funes de lquido, bruto e tara no tem funcionalidade para este driver.
Verifique o programa exemplo que acompanha o disco de instalao 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 configurao do indicador.
Parmetros :
IP_SETADO Valor inteiro retornado da funo Seta_Ip correspondente a
um IP para comunicao.
Canal Canal de comunicao da placa FIREX (A,B,C ou D).
Retorno :
Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na
comunicao.
Sintaxe em C :
int W9091C( int IP_SETADO, char * Canal);

16

PCLink 6.0
Toledo do Brasil - Indstria de balanas

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 configurao do indicador.
Parmetros :
COM Valor inteiro correspondente a uma porta serial para comunicao.
COM1 = 1, COM2 = 2 e assim por diante.
Retorno :
Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na
comunicao.
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 balana Ohaus programada para 9600 baud, 7 bit, paridade par
e 1 stop bit. A balana no precisa ser programada para transmitir continuamente.
Parmetros :
IP_SETADO Valor inteiro retornado da funo Seta_Ip correspondente a
um IP para comunicao.
Canal Canal de comunicao da placa FIREX (A,B,C ou D).
Retorno :
Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na
comunicao.
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 balana Ohaus programada para 9600 baud, 7 bit, paridade par e 1 stop bit. A
balana no precisa ser programada para transmitir continuamente.

PCLink 6.0
Toledo do Brasil - Indstria de balanas

17

Parmetros :
COM Valor inteiro correspondente a uma porta serial para comunicao.
COM1 = 1, COM2 = 2 e assim por diante.
Retorno :
Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na
comunicao.
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, necessrio que seja feito uma
programao 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 incio
Bruto

Lquido

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

Modo contnuo

18

PCLink 6.0
Toledo do Brasil - Indstria de balanas

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

Aps toda essa programao 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
Parmetros :
IP_SETADO Valor inteiro retornado da funo Seta_Ip correspondente a
um IP para comunicao.
Canal Canal de comunicao da placa FIREX (A,B,C ou D).
Retorno :
Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na
comunicao.
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.
Parmetros :
COM Valor inteiro correspondente a uma porta serial para comunicao.
COM1 = 1, COM2 = 2 e assim por diante.
Retorno :
Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na
comunicao.

PCLink 6.0
Toledo do Brasil - Indstria de balanas

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
Parmetros :
IP_SETADO Valor inteiro retornado da funo Seta_Ip correspondente a
um IP para comunicao.
Canal Canal de comunicao da placa FIREX (A,B,C ou D).
Retorno :
Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na
comunicao.
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
Parmetros :
COM Valor inteiro correspondente a uma porta serial para comunicao.
COM1 = 1, COM2 = 2 e assim por diante.
Retorno :
Retorna um valor inteiro de 0 a n, para identificar o canal utilizado na
comunicao.
Sintaxe em C :
int WMSI6260Serial(int COM);
Sintaxe em Delphi :
function WMSI6260Serial(COM : Integer): Integer; stdcall;

20

PCLink 6.0
Toledo do Brasil - Indstria de balanas

6.16 ProgSerial
Utilizada para alterar algum parmetro de configurao da porta serial de algum dos drivers
de balana. Utilizar aps obter um nmero de um dos drivers de porta serial. Esta alterao
s deve ser realizada se desejar trabalhar fora dos padres estabelecidos por fbrica.
Parmetros :
Canal Valor inteiro correspondente ao nmero do canal fornecido por
alguma das funes de balana(W9091Serial, por exemplo) para realizar a
leitura do indicador ou balana.
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 conexo TCP/IP quando a comunicao realizada atravs de uma
FIREX.
Parmetros :
Canal_Setado Valor inteiro correspondente ao nmero do canal fornecido
por alguma das funes de balana(W9091, por exemplo) para realizar a
leitura do indicador ou balana.
Retorno :
0 - Indica que a conexo j havia sido realizada.
1 Indica que a conexo 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 conexo com o canal serial ou TCP/IP.
Parmetros :
Canal Valor inteiro correspondente ao nmero do canal fornecido por
alguma das funes de balana(W9091, por exemplo) para realizar a leitura
do indicador ou balana.
Retorno : Sem retorno

PCLink 6.0
Toledo do Brasil - Indstria de balanas

21

Sintaxe em C :
void Close_Canal( int Canal);
Sintaxe em Delphi :
procedure Close_Canal(Canal : integer); stdcall;
6.19 Deleta_Canal
Deleta a conexo com o canal serial ou TCP/IP.
Parmetros :
Canal Valor inteiro correspondente ao nmero do canal fornecido por
alguma das funes de balana(W9091, por exemplo) para realizar a leitura
do indicador ou balana. Este comando livra a memria alocada pela
conexo.
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 balana ou indicador, correspondente ao canal passado como parmetro. O
peso sobre a balana pode estar estvel ou instvel.
Parmetros :
Canal Valor inteiro correspondente ao nmero do canal fornecido por
alguma das funes de balana(W9091, por exemplo) para realizar a leitura
do indicador ou balana.
Retorno :
0 - Indica que a leitura foi vlida
1 - Indica que no foi possvel efetuar a leitura da balana.
3 Indica que h sobrecarga sobre a balana. Exemplo : na plataforma de
um indicador 9091, colocado 26 kg , que tem uma carga mxima de 25kg.
O display apaga , mas o indicador continua transmitindo. Isto deve ser
considerado como erro.
999 Indica que no 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 - Indstria de balanas

6.21 Update_NoMotion
Faz a leitura da balana ou indicador, correspondente ao canal passado como parmetro. O
peso sobre a balana deve estar estvel. Esta funo no tem validade para o indicador
Challenger MSI3360.
Parmetros :
Canal Valor inteiro correspondente ao nmero do canal fornecido por
alguma das funes de balana(W9091, por exemplo) para realizar a leitura
do indicador ou balana.
Tempo - Contado em milisegundos ( 1000ms = 1 segundo)
Valor 0(Zero) - Aguardar at a estabilizao da balana
Valores acima de zero, aguardar o tempo passado
Valor 1 ser utilizado o tempo default da DLL
Retorno :
0 - Indica que a leitura foi vlida
1 - Indica que no foi possvel efetuar a leitura da balana.
2 Indica que expirou timeout para efetuar a leitura sem movimento.
3 Indica que h sobrecarga sobre a balana. Exemplo : na plataforma de
um indicador 9091, colocado 26 kg , que tem uma carga mxima de 25kg.
O display apaga , mas o indicador continua transmitindo. Isto deve ser
considerado como erro.
999 Indica que no 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
Obtm o peso bruto, aps utilizar a funo Update_Canal ou Update_NoMotion, se no
utilizar nenhuma das funes obter o ltimo peso lido.
Parmetros :
Canal Valor inteiro correspondente ao nmero do canal fornecido por
alguma das funes de balana(W9091, por exemplo) para realizar a leitura
do indicador ou balana.
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 - Indstria de balanas

23

6.23 Net_canal
Obtm o peso lquido, aps utilizar a funo Update_Canal ou Update_NoMotion, se no
utilizar nenhuma das funes obter o ltimo peso lido.
Parmetros :
Canal Valor inteiro correspondente ao nmero do canal fornecido por
alguma das funes de balana(W9091, por exemplo) para realizar a leitura
do indicador ou balana.
Retorno :
Peso lquido
Sintaxe em C :
char * Net_canal( int Canal);
Sintaxe em Delphi :
function Net_Canal(Canal : integer) : PChar; stdcall;
6.24 Tare_canal
Obtm o peso tara, aps utilizar a funo Update_Canal ou Update_NoMotion, se no
utilizar nenhuma das funes obter o ltimo peso lido.
Parmetros :
Canal Valor inteiro correspondente ao nmero do canal fornecido por
alguma das funes de balana(W9091, por exemplo) para realizar a leitura
do indicador ou balana.
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
Obtm alguns estados da balana, aps utilizar a funo Update_Canal ou
Update_NoMotion, se no utilizar nenhuma das funes obter o ltimo estado.
Parmetros :
Canal Valor inteiro correspondente ao nmero do canal fornecido por
alguma das funes de balana(W9091, por exemplo) para realizar a leitura
do indicador ou balana.
Retorno:
Para W9091 ser recebido uma string com o seguinte pacote:
Incremento da balana
: 1,2 ou 5
NetMode
: S = Sim; N = No ; E = Erro
Peso negativo
: S = Sim; N = No ; E = Erro
Sobrecarga
: S = Sim; N = No ; E = Erro
Peso em movimento
: S = Sim; N = No ; E = Erro
Unidade da balana
: kg ou lb; EE = Erro

24

PCLink 6.0
Toledo do Brasil - Indstria de balanas

Boto print pressionado

: S = Sim; N = No; E = Erro

Obs : Para uma balana Ohaus, por exemplo, no se determina


alguns desses campos como Incremento, unidade, etc. Nesses
casos o retorno ser E apenas para indicar que no 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
Obtm se o peso est em movimento sobre a balana, aps utilizar a funo Update_Canal ,
se no utilizar a funo obter o ltimo estado.
Parmetros :
Canal Valor inteiro correspondente ao nmero do canal fornecido por
alguma das funes de balana(W9091, por exemplo) para realizar a leitura
do indicador ou balana.
Retorno:
Para W9091 ser recebido uma string com S = Sim; N = No
Sintaxe em C :
char * Estado_EmMovimento( int Canal);
Sintaxe em Delphi :
function Estado_EmMovimento(Canal : integer) : PChar; stdcall;
6.27 ClrBufRx
Limpa buffer de recepo apenas para placas Firex.
Parmetros :
IP_SETADO Valor inteiro retornado da funo Seta_Ip correspondente a
um IP para comunicao.
Canal Canal de comunicao 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 transmisso apenas para placas Firex.
Parmetros :
IP_SETADO Valor inteiro retornado da funo Seta_Ip correspondente a
um IP para comunicao.

PCLink 6.0
Toledo do Brasil - Indstria de balanas

25

Canal Canal de comunicao 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 relao a hardkey server. Esta funo s deve ser utilizada ao
encerrar um aplicativo para liberar rapidamente a conexo com a hardkey, caso contrrio o
programa ou servio que gerencia a hardkey server ir fechar essa conexo depois de
alguns segundos.
Sintaxe em C :
void CloseLicense(void);
Sintaxe em Delphi :
procedure CloseLicense; stdcall;
6.30 Consideraes sobre Entradas/Sadas digitais da FIREX
Cada PIM (placa de entrada/sada) contm duas entradas e duas sadas.
Se o jumper JP7 pinos 1 e 2 no estiver jumpeado, no ser possvel ler
entrada 7.
Se utilizar controle de fluxo por hardware no canal A, a entrada 6 e a sada
no podero ser utilizadas.
Se utilizar controle de fluxo por hardware no canal B, a entrada 5 e a sada
no podero ser utilizadas.
Se utilizar controle de fluxo por hardware no canal C, a entrada 4 e a sada
no podero ser utilizadas.

a
6
5
4

6.31 DIO_InPort
Utilizada para ler todas as entradas e obter seu retorno em um valor inteiro.
Parmetros :
Nip Valor inteiro retornado da funo Seta_Ip correspondente a um IP para
comunicao.
Retorno :
-1 indica que no foi possvel 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 - Indstria de balanas

6.32 DIO_InPortStr
Utilizada para ler todas as entradas e obter seu retorno em uma String.
Parmetros :
Nip Valor inteiro retornado da funo Seta_Ip correspondente a um IP para
comunicao.
Retorno :
Retorna EEEEEEEE indicando que no foi possvel 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.
Parmetros :
Nip Valor inteiro retornado da funo Seta_Ip correspondente a um IP para
comunicao.
Retorno :
-1
- indica que no foi possvel 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.
Parmetros :
Nip Valor inteiro retornado da funo Seta_Ip correspondente a um IP para
comunicao.
Retorno :
E
- indica que no foi possvel 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 - Indstria de balanas

27

Sintaxe em Delphi :
function DIO_InBitStr(Nip : integer; Entrada : integer): PChar; stdcall;
6.35 DIO_OutPort
Utilizada para escrever em todas as sadas simultaneamente atravs de um parmetro
inteiro.
Parmetros :
Nip Valor inteiro retornado da funo Seta_Ip correspondente a um IP para
comunicao.
Palavra Valor inteiro a ser escrito nas sadas.
Retorno :
-1
- indica que no foi possvel escrever nas sadas
0
- placa recebeu o comando de alterao das sadas.
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 sadas simultaneamente atravs de um parmetro string.
Parmetros :
Nip Valor inteiro retornado da funo Seta_Ip correspondente a um IP para
comunicao.
Palavra Valor string a ser escrito nas sadas, 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 sadas 0 e 5 e desligar as demais o valor palavra seria


SNNNNSNN .
Retorno :
-1
- indica que no foi possvel escrever nas sadas
0
- placa recebeu o comando de alterao das sadas.
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 sada atravs de uma parmetro inteiro.
Parmetros :
Nip Valor inteiro retornado da funo Seta_Ip correspondente a um IP para
comunicao.

28

PCLink 6.0
Toledo do Brasil - Indstria de balanas

Saida Nmero da sada que deseja escrever.


Estado Estado que se deseja escrever na sada :
0
-Desligar
1
-Ligar
Retorno :
-1
- indica que no foi possvel escrever na sada.
0
- placa recebeu o comando de alterao da sada.
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 sada atravs de uma parmetro String.
Parmetros :
Nip Valor inteiro retornado da funo Seta_Ip correspondente a um IP para
comunicao.
Saida Nmero da sada que deseja escrever.
Estado Estado que se deseja escrever na sada :
N
-Desligar
S
-Ligar
Retorno :
-1
0

- indica que no foi possvel escrever na sada.


- placa recebeu o comando de alterao da sada.

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 - Indstria de balanas

29

7 Exemplos de programao
7.1

Delphi 6

Este programa se destina para testes e para desenvolvimento de aplicaes para linguagem
de programao Delphi.
Na parte superior da tela, se encontram dados relativos a hardkey PCLink6 . Se esses dados
no estiverem aparecendo, significa que no foi possvel ler a hardkey, seja ela remota ou
local.

Ateno : as placas Firex no necessitam de hardkey


Do lado direito pode ser configurado uma leitura de balana 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 balana via FIREX. Antes de se
fazer esta leitura necessrio que se utilize o programa Firex Tools para configurar a placa
Firex com um endereo IP e parmetros dos canais A,B,C ou D. Alm disso, a Firex deve
ter uma placa SIM no canal que se deseja a leitura e placas PIM (Entradas e Sadas) se for
ativar IOs.

30

PCLink 6.0
Toledo do Brasil - Indstria de balanas

7.1.1 Cdigo 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 - Indstria de balanas
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 - Indstria de balanas

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 - Indstria de balanas
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 - Indstria de balanas

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 comunicao';
b1Bal1.Enabled
b1Bal2.Enabled
b1Bal3.Enabled
b1Bal4.Enabled

:=
:=
:=
:=

False;
False;
False;
False;

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

PCLink 6.0
Toledo do Brasil - Indstria de balanas
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 comunicao';
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('Balana A :'#10#13+'No foi possvel realizar
conexo');
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 - Indstria de balanas

ShowMessage('Balana B :'#10#13+'No foi possvel realizar


conexo');
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('Balana C :'#10#13+'No foi possvel realizar
conexo');
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('Balana D :'#10#13+'No foi possvel realizar
conexo');
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 - Indstria de balanas
//
'+

37

PortaIO := StrToInt((Sender as TBitBtn).caption);


if MessageDlg('Cuidado !'+#13#13+'Certifique-se que pode ser alterado

'o estado atual deste port de


sada.',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 - Indstria de balanas
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 - Indstria de balanas
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 - Indstria de balanas

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 - Indstria de balanas
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 - Indstria de balanas

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 - Indstria de balanas
begin
ShowMessage('Balana via porta serial :'#10#13+'No foi possvel
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 - Indstria de balanas

Exemplo VB 6

Este programa se destina para testes e para desenvolvimento de aplicaes para linguagem
de programao Visual Basic.
Na parte superior da tela, se encontram dados relativos a hardkey PCLink6 . Se esses dados
no estiverem aparecendo, significa que no foi possvel ler a hardkey, seja ela remota ou
local.
Do lado direito pode ser configurado uma leitura de balana 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 balana via FIREX. Antes de se
fazer esta leitura necessrio que se utilize o programa Firex Tools para configurar a placa
Firex com um endereo IP e parmetros dos canais A,B,C ou D. Alm disso, a Firex deve
ter uma placa SIM no canal que se deseja a leitura e placas PIM (Entradas e Sadas) se for
ativar IOs.
7.2.1 Cdigo 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 - Indstria de balanas
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 funes 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 - Indstria de balanas

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 - Indstria de balanas

47

' Aqui utilizado as funcoes OutPort e Inport, para todas as entradas e


sadas.
' 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 sadas 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 - Indstria de balanas

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 vrias balanas ao mesmo tempo, deve ser utilizado algum outro
modo
'multitarefa.
Private TabIo As PckIo

'Entradas e sadas lgicas

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 - Indstria de balanas
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 ("No foi possvel realizar conexo")
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 ("Balana via porta serial : No foi possvel realizar
leitura.")
Else
TimerSerial.Enabled = True
End If
bSerial.Enabled = True
End If
End Sub

49

50

PCLink 6.0
Toledo do Brasil - Indstria de balanas

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 - Indstria de balanas
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 sadas 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 - Indstria de balanas
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 no 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 - Indstria de balanas

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 no 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 - Indstria de balanas
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

Você também pode gostar