Implementao do projeto MPEU com MSVisual Studio projeto

  • Slides: 40
Download presentation
Implementação do projeto MPEU com MS-Visual Studio

Implementação do projeto MPEU com MS-Visual Studio

projeto MPEU PUBLICA CLIENTE_2 MOSQUITTO PUBLICA ASSINA MODBUS CLIENTE_1

projeto MPEU PUBLICA CLIENTE_2 MOSQUITTO PUBLICA ASSINA MODBUS CLIENTE_1

PROGRAMANDO EM VISUAL BASIC NO MS-VISUAL STUDIO • Baseada em elementos gráficos (controles) e,

PROGRAMANDO EM VISUAL BASIC NO MS-VISUAL STUDIO • Baseada em elementos gráficos (controles) e, atualmente, com recursos para programação orientada por objetos • Possibilita o desenvolvimento de aplicativos para Windows com baixo custo e tempo • Teve início com um IDE (Integrated Development Environment) dedicado: VB 3. 0; VB 4. 4; VB 5. 0 e VB 6. 0 • Em 2001, com o lançamento da plataforma. NET Framework , a Microsof lançou o Visual Studio com sendo o novo IDE para programação em VB, C++, C# e outros. • A partir de 2010 a Microsoft lançou um versão gratuita do Visual Studio e foi denominada com Visual Studio Express e atualmente é conhecida como Community e já está na versão 2019.

INICIANDO UM PROJETO EM VISUAL BASIC. . NET Versão Community 2017 A versão atual

INICIANDO UM PROJETO EM VISUAL BASIC. . NET Versão Community 2017 A versão atual do Visual Basic possibilita, além de aplicativos baseados em formulários, a criação de versões do tipo console, biblioteca de classes e as WPF (Microsoft Windows Presentation Foundation ) Selecione a opção “Aplicativo do Windows Forms” Crie uma pasta específica para armazenar o projeto. Dê um nome para o mesmo e acione o botão “OK”. Evite manter o nome genérico para o projeto, tal como “windows. App 1”.

Leiaute do IDE para aplicativos do tipo Windows Forms Um formulário funciona como um

Leiaute do IDE para aplicativos do tipo Windows Forms Um formulário funciona como um pano de fundo para inserção dos controles que serão visíveis em tempo de execução. Após acionar o botão “OK” aparece (automaticamente) um formulário vazio; o “Gerenciado de Soluções” ; a “caixa de ferramentas” ; a”lista de propriedades”; . . .

Alterando propriedades do formulário principal e incluindo controles Mude o nome do formulário de

Alterando propriedades do formulário principal e incluindo controles Mude o nome do formulário de Form 1 para , por exemplo, MAQUINAS. Para adicionar um controle ao formulário Arraste-o e solte-o no local desejado ou execute um “duplo click” sobre ele.

A parte seguinte desta apostila foi retirada da apostila anterior (programando em Visual Basic

A parte seguinte desta apostila foi retirada da apostila anterior (programando em Visual Basic 2010) disponível em : http: //www. labusig. ufpr. br/cnc/apst_VB_2010_express. pdf ou http: //www. labusig. ufpr. br/cnc/apst_VB_2010_express. pptx A apostila 2010 aborda o seguinte : • Montagem do leiaute com controles de texto e rótulos para entrada e saída de dados • Tipos e declarações de variáveis • Operadores • Atribuição de valores • Manipulação de strings • Iterações • Condicionais • Arquivos (leitura e gravação) • Controles para leitura e gravação de dados em arquivos • Funções e sub-rotinas

Além dos slides da apostila anterior, foram acrescentados os seguintes tópicos: tópicos Inclusão de

Além dos slides da apostila anterior, foram acrescentados os seguintes tópicos: tópicos Inclusão de pacotes Inclusão de Referências Inclusão de classes Criação do aplicativo “MAQUINAS” para publicação de mensagens no Broker Mosquitto • Criação do aplicativo “NUVEM” para assinatura e recebimento de mensagens enviadas pelo aplicativo “MAQUINAS” por meio do Broker Mosquitto • Interfaceamento do aplicativo “MAQUINAS” com a rede Fieldbus do Laboratório de Usiangem * Monitoramento do torno CNC e sua publicação em nuvem • •

Inclusão de pacotes do Nu. Get em projetos MS-Visual Basic Pacotes contêm classes que

Inclusão de pacotes do Nu. Get em projetos MS-Visual Basic Pacotes contêm classes que podem ser utilizadas em outros aplicativos

Inclusão do pacote M 2 Mqtt desenvolvido por Paulo Patierno para establecer as conexões

Inclusão do pacote M 2 Mqtt desenvolvido por Paulo Patierno para establecer as conexões para publicação e assinatura no broker Mosquitto

Após a inclusão do pacote M 2 Mqtt acerte o leiaute do formulário principal,

Após a inclusão do pacote M 2 Mqtt acerte o leiaute do formulário principal, tal como sugerido abaixo Renomeie os seguintes controles : Group box Text. Box label Button Controle Nome Texbox 1 Tb. Tpc. Pub Texbox 2 Tb. Msg. Pub Button 1 Bt. Pub Button 2 Bt. Fim Altere a propriedade text dos labels Mude cores e fontes de acordo com o seu interesse

Dê um “duplo click” na área interna do formulário principal e inclua as classes

Dê um “duplo click” na área interna do formulário principal e inclua as classes utilizando o comando “imports” 'classes do pacote M 2 Mqtt Imports u. PLibrary. Networking. M 2 Mqtt. Messages 'classe para tratamento de texto: Imports System. Text Estas classes devem ser incluídas antes do formulário principal (classe MAQUINAS)

Dê um “duplo click” na área interna do formulário principal para abrir e editar

Dê um “duplo click” na área interna do formulário principal para abrir e editar o evento “Load”. Declare as variáveis “client” e “client. Id” antes do evento “Load” Dim client As Mqtt. Client Dim client. Id As String Inclua o código para estabelecer a conexão com o broker no evento “Load” Private Sub MAQUINAS_Load(sender As Object, e As Event. Args) Handles My. Base. Load 'CÓDIGO PARA CONEXÃO COM O BROKER MOSQUITTO - DESENVOLVIDO POR PAULO PATIERNO 'Dim Broker. Address As String = "85. 119. 83. 194" 'ENDEREÇO ALTERNATIVO Dim Broker. Address As String = "test. mosquitto. org" client = New Mqtt. Client(Broker. Address) ' // GERA UM IDENTIFICADOR ÚNICO PARA CLIENTE A CADA INÍCIO DO APLICATIVO MAQUINAS client. Id = Guid. New. Guid(). To. String() client. Connect(client. Id) End Sub

Dê um “duplo click” no botão “PUBLICA” para abrir e editar o evento “click”.

Dê um “duplo click” no botão “PUBLICA” para abrir e editar o evento “click”. Inclua o código para publicação das mensagens nos tópicos que serão digitados em tempo de execução nos controles de texto If (Tb. Tpc. Pub. Text <> "") Then '' // whole topic Dim Topic As String = "/Elektor. My. Journey. Io. T/" + Tb. Tpc. Pub. Text + "/test" '' // publish a message with Qo. S 2 client. Publish(Topic, Encoding. UTF 8. Get. Bytes(Tb. Msg. Pub. Text), Mqtt. Msg. Base. QOS_LEVEL_EXACTLY_ONCE, True) Else Message. Box. Show("Vc tem que informar o tópico a ser publicado!") End If

Dê um “duplo click” no botão “ENCERRA” para abrir e editar o evento “click”.

Dê um “duplo click” no botão “ENCERRA” para abrir e editar o evento “click”. Inclua o código para desconexão com o broker e encerramento do aplicativo 'desconecta do broker client. Disconnect() 'fecha aplicativo End Esses dois últimos eventos devem ficar assim. .

Compile o projeto para verificar inconsistências “aperte a tecla F 5” A tela final

Compile o projeto para verificar inconsistências “aperte a tecla F 5” A tela final deve ficar assim. . Click no botão “ENCERRA” e feche o aplicativo. Ele será testado mais tarde

Repita os passos anteriores para iniciar o novo aplicativo. Se quiser, dê o nome

Repita os passos anteriores para iniciar o novo aplicativo. Se quiser, dê o nome de sua preferência para ele e o formulário principal e monte os controle conforme o leiaute sugerido abaixo Renomeie os seguintes controles : Controle Nome Texbox 1 Tb. Tpc. Asnd Texbox 2 Tb. Msg. Rcb Button 1 Bt. Asnd Button 2 Bt. Fim Altere a propriedade text dos labels Mude cores e fontes de acordo com o seu interesse

Inclua o pacote M 2 Mqtt e importe as suas classes para dentro do

Inclua o pacote M 2 Mqtt e importe as suas classes para dentro do aplicativo, conforme mostrado nos slides anteriores O evento “Load” deverá ser programado conforme abaixo: Private Sub Nuvem_Load(sender As Object, e As Event. Args) Handles My. Base. Load 'PROGRAMA DESENVOLVIDO POR PAULO PATIERNO 'Dim Broker. Address As String = "85. 119. 83. 194"'ENDEREÇO AUXILIAR Dim Broker. Address As String = "test. mosquitto. org" client = New Mqtt. Client(Broker. Address) 'cria uma gerenciamento do HANDLER. . . PARA RECEBER AS MENSAGENS DISPARADAS 'UM EVENTO DO BROKER SERÁ PROCESSADO AUTOMATICAMENTE 'VEJA DEFINIÇÃO EM: https: //docs. microsoft. com/pt-br/dotnet/visual-basic/languagereference/statements/addhandler-statement Add. Handler client. Mqtt. Msg. Publish. Received, Address. Of client_Mqtt. Msg. Publish. Received Application. Do. Events() ' // usa um identificador único toda vez que iniciar este aplicativo client. Id = Guid. New. Guid(). To. String() client. Connect(client. Id) End Sub

Crie uma rotina nova (Sub) abaixo do evento “Load” nomeando-a por “client_Mqtt. Msg. Publish.

Crie uma rotina nova (Sub) abaixo do evento “Load” nomeando-a por “client_Mqtt. Msg. Publish. Received” e insira o código abaixo: Sub client_Mqtt. Msg. Publish. Received(sender As Object, e As Mqtt. Msg. Publish. Event. Args) Dim Received. Message As String = Encoding. UTF 8. Get. String(e. Message) 'tem que testar se existem linhas( trheads) separadas 'vide exemplo em: https: //dotnetbrowser. support. teamdev. com/support/solutions/articles/9000119178 --cross-threadoperation-not-valid-control-accessed-from-a-thread-other-than-the-thread-it-was-create If Me. Tb. Msg. Rcb. Invoke. Required Then Begin. Invoke(Sub() Me. Tb. Msg. Rcb. Text = Received. Message End Sub) Else Me. Tb. Msg. Rcb. Text = Received. Message End If End Sub

Programe o evento “Click” do botão “ASSINA TÓPICO” conforme código abaixo If (Tb. Tpc.

Programe o evento “Click” do botão “ASSINA TÓPICO” conforme código abaixo If (Tb. Tpc. Asnd. Text <> "") Then '// todo o tópico: : : ? ? ? Dim Topic(0) As String Topic(0) = "/Elektor. My. Journey. Io. T/" + Tb. Tpc. Asnd. Text + "/test" Dim Qs(0) As Byte Qs(0) = 2 ' // assina o tópico com Qo. S 2 client. Subscribe(Topic, Qs) Me. Tb. Msg. Rcb. Text = "" Else Message. Box. Show("Vc deve entrar o nome do tópico para assinar!") End If

Programe o evento “Click” do botão “ENCERRA” conforme código abaixo Dim Topic(0) As String

Programe o evento “Click” do botão “ENCERRA” conforme código abaixo Dim Topic(0) As String Topic(0) = "/Elektor. My. Journey. Io. T/" + Me. Tb. Tpc. Asnd. Text + "/test" client. Unsubscribe(Topic) client. Disconnect() End

Compile o projeto para verificar inconsistências “aperte a tecla F 5” A tela final

Compile o projeto para verificar inconsistências “aperte a tecla F 5” A tela final deve ficar assim. . Abra o projeto anterior “MAQUINAS” e faça um teste para verificar se a comunicação com o broker Mosquitto está funcionando

De volta ao primeiro projeto “MAQUINAS”. . Baixe o pacote “KONECT-V 19. dll” no

De volta ao primeiro projeto “MAQUINAS”. . Baixe o pacote “KONECT-V 19. dll” no link: E armazene-o na pasta do projeto “MAQUINAS” Abra o projeto com o Visual Studio e insira o pacote “KONECTV 19. dll” como uma referência

Inserindo referências em projetos do Visual Basic Após selecionado, o pacote “KONECTV 19” Deverá

Inserindo referências em projetos do Visual Basic Após selecionado, o pacote “KONECTV 19” Deverá aparecer na lista de Referencias do GERENCIADOR DE SOLUÇÕES Pressione “OK” para confirmar a inserção da Referência

Algumas informações sobre a classe KONECT. . . Const. Kron CRC Medidor Serial. Port

Algumas informações sobre a classe KONECT. . . Const. Kron CRC Medidor Serial. Port Elt. Par Konect Notação UML

Algumas informações sobre a classe KONECT. . . Medidor End. Med: Byte Arq. Sd:

Algumas informações sobre a classe KONECT. . . Medidor End. Med: Byte Arq. Sd: String Sr. Port: Serial. Port Status. Md: Byte Grnd(): Eltpar() Tmp. Inc: Float Lst. Grv: String Const. Proj: Const. Kron Read. Grnd(): Boolean Readstatus(): As Byte Set. Grnd. Z()

Algumas informações sobre a classe KONECT. . . Konect Lfunc: Byte Crcerro: Byte Reg.

Algumas informações sobre a classe KONECT. . . Konect Lfunc: Byte Crcerro: Byte Reg. Ini: Integer Qt. Reg: Frame. Ri. R: Rcb. Dados: Read. Grnd(): Boolean Readstatus(): Byte Set. Grnd. Z() Mnt. Frame() Leitura(): Boolean

Índices das grandezas medidas conforme definido no método Set. Grnd. Z ÍNDICE 0 1

Índices das grandezas medidas conforme definido no método Set. Grnd. Z ÍNDICE 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Índice 32 33 34 35 NOME UNIDADE DIMENSIONAL Tensão trifásica Tensão linha 1 Tensão linha 2 Tensão linha 3 Tensão fase/fase (A-B) Tensão fase/fase (B-C) Tensão fase/fase (C-A) Corrente trifásica Corrente de neutro Corrente de linha 1 Corrente de linha 2 Corrente de linha 3 Frequência linha 1 Frequência linha 2 Frequência linha 3 Frequência Potência ativa trifásica Potência ativa linha 1 Potência ativa linha 2 Potência ativa linha 3 Potência reativa trifásica Potência reativa linha 1 Potência reativa linha 2 Potência reativa linha 3 Potência aparente trifásica Potência aparente linha 1 Potência aparente linha 2 Potência aparente linha 3 Fator de potência trifásico Fator de potência linha 1 Fator de potência linha 2 Fator de potência linha 3 Nome W V V V A A A Hz Hz W W VAr VAr VA VA ENERGIA ATIVA POSITIVA Unidade dimensional k. Wh ENERGIA REATIVA POSITIVA k. VAr ENERGIA ATIVA NEGATIVA KWh ENERGIA REATIVA NEGATIVA k. VAr BLOCO II

De volta ao projeto “Maquinas” – cliente 1 Selecione o controle “Group. Box 1”

De volta ao projeto “Maquinas” – cliente 1 Selecione o controle “Group. Box 1” referente ao “PUBLICADORPROVISÓRIO” e mude as propriedades ENABLE e VISIBLE para FALSE isto irá desabilitar e esconder, em tempo de execução, todos os controles agrupados por ele.

De volta ao projeto “Maquinas” – cliente 1 Modifique o leiaute do formulário principal

De volta ao projeto “Maquinas” – cliente 1 Modifique o leiaute do formulário principal incluindo os controles montados acima

De volta ao projeto “Maquinas” – cliente 1 ajuste as propriedades dos controles como

De volta ao projeto “Maquinas” – cliente 1 ajuste as propriedades dos controles como indicado na tabela abaixo CONTROLE TEXTO/FUNÇÃO NAME Combo. Box Lista de portas seriais Cb 1 Instrumentos disponíveis na rede Gb 1 Monitora usinagem Gb 2 ENABLED Group. Box TRUE Numeric. Up. Down Endereços dos medidores Nup. D 1 Máquina Situação Tb 3 Tb 4 Duração Tópico Encerra Monitora Tdm Tb 2 Bt. Fim Bt. Lab Text. Box Button OBS. : LABELS NÃO PRECISAM SER ALTERADOS FALSE

Dê um “duplo click” na área interna do formulário principal e atualize as classes

Dê um “duplo click” na área interna do formulário principal e atualize as classes utilizando o comando “imports” 'classes do pacote M 2 Mqtt Imports u. PLibrary. Networking. M 2 Mqtt. Messages 'classe para tratamento de texto: Imports System. Text 'porta serial RS 232 Imports System. IO. Ports 'Controle da formatação de números: Imports System. Threading Imports System. Globalization Estas classes devem ser incluídas antes do formulário principal (classe MAQUINAS)

Continue com o código do formulário principal aberto e atualize a declaração de variáveis

Continue com o código do formulário principal aberto e atualize a declaração de variáveis da classe principal (formulário) Dim client As Mqtt. Client 'CLASSE DO PACOTE M 2 MQTT Dim client. Id As String 'IDENTIFICADOR TIPO "ADRESS" DO CLIENTE Public RS 232 As New Serial. Port 'CLASSE REFERENTE À PORTA SERIAL TIPO RS 232 Public Instr. Mt As New KONECT_V 19. KONECT ' DEFINE OBJETO DA CLASSE KONECT Public End. Instr As Byte = 2 'endereço do instrumento (medidor) conforme cadastro na rede Fieldbus - 2 É VALOR DEFAULT DO TORNO CNC Public Flg. Par As Boolean = False 'flag que habilita execu ção automática de alguns eventos Estas variáveis devem ser incluídas antes do evento LOAD do formulário principal (classe MAQUINAS)

No menu principal, selecione “Projeto” e depois “Adicionar módulo” renomeie-o para “Test. Fieldbus” e

No menu principal, selecione “Projeto” e depois “Adicionar módulo” renomeie-o para “Test. Fieldbus” e pressione o botão “OK”

Dentro do editor do módulo (vide figura abaixo) inclua o código para teste do

Dentro do editor do módulo (vide figura abaixo) inclua o código para teste do “status” dos instrumentos, tal como disponível no link: http: //www. labusig. ufpr. br/Mnf_INT/func-read. Status. txt

Dê um “duplo click” no controle Numeric. Up. Down (Nup. D 1) e inclua

Dê um “duplo click” no controle Numeric. Up. Down (Nup. D 1) e inclua o seguinte código entre “Private Sub Nup. D 1_Value. Changed(sender As Object, e As Event. Args) Handles Nup. D 1. Value. Changed” e “End Sub” End. Instr = Nup. D 1. Value Select Case End. Instr 'segue cadastro já realizado na rede Fieldbus do Lab. Usinagem Case 1 'menor valor 'medidor MKM Tb 3. Text = "TORNO CONVENCIONAL" Case 2 'medidor KONECT Tb 3. Text = "TORNO MAZAK" Case 3 'medidor KONECT Tb 3. Text = "CENTRO DE USINAGEM DISCOVERY" Case Else 'medidor NÃO EXISTE AINDA Tb 3. Text = "MEDIDOR NÃO CADASTRADO NA REDE" Tb 4. Text = "INSTRUMENTO DESLIGADO" Bt. Lab. Enabled = False 'DESABILITA BOTÃO DA LEITURA Exit Sub 'PUXA TOMADA!!! End Select If Flg. Par Then ' todos os parâmentos do instrumentos j á foram carregados If Ligado(End. Instr, Instr. Mt) Then Tb 4. Text = "INSTRUMENTO LIGADO" Bt. Lab. Enabled = True 'HABILITA BOTÃO PARA INÍCIO DA LEITURA Else Tb 4. Text = "INSTRUMENTO DESLIGADO" Bt. Lab. Enabled = False 'DESABILITA BOTÃO DA LEITURA End If

Dê um “duplo click” no controle Button (Bt. Lab) e inclua o seguinte código

Dê um “duplo click” no controle Button (Bt. Lab) e inclua o seguinte código entre “Private Sub Bt. Lab_Click(sender As Object, e As Event. Args) Handles Bt. Lab. Click” e “End Sub” 'DISPARA EVENTO PARA LER, PELA PORTA SERIAL RS 232, OS VALORES ENVIADOS PELO MEDIDOR SELECIONADO Dim msg. BPS As String = "" 'TROCA MENSAGENS COM USUÁRIO Dim Tmp. L As Single = CSng(Tdm. Text) 'duração do monitoramento em segundos, conforme valor digitado pelo usuário 'Define valores necessários para a configuração do instrumento 'Isto poderia ficar em um arquivo de texto do tipo "Config", mas vamos deix á-lo aqui 'por facilidade Const Ng As Short = 35 '36 grandezas no KONECT, contando desde ZERO Re. Dim Instr. Mt. Grnd(Ng) '3: DEFINE ENDEREÇO DO MEDIDOR; PORTA SERIAL PARA COMUNICAÇÃO E PREFIXO PARA GRAVAÇÃO Instr. Mt. End. Md = End. Instr 'esse endereço será definido pelo usuário em tempo de execução 'MAS É POSSIVEL MODIFICAR ESSA ROTINA PARA LEITURA EM TODA A REDE FIELDBUS ' DEFINE ENDEREÇO DOS REGISTROS DAS GRANDEZAS A SEREM LIDAS; OPÇÃO DE GRAVAÇÃO E OPÇÃO DE VISUALIZAÇÃO Dim id As Short = 0 'eneumerador ' os endereços das grandezas estão ordenados sequencialmente, contando de dois em dois ' e divididos em dois blocos. Maiores detalhes vide protocolo MODBUS-KONECT Rev. 1. 2 de Dezembro/2015 'BLOCO 1: For id = 0 To 31 'inicializa objeto Instr. Mt. Grnd(id) = New KONECT_V 19. Elt. Par 'acerta endereços Instr. Mt. Grnd(id). End. Reg = 30003 + 2 * id 'redimensiona array da leitura Re. Dim Instr. Mt. Grnd(id). Regs(3) 'cancela opção para gravação Instr. Mt. Grnd(id). Flag. Grv = False Next 'BLOCO 2: For id = 32 To 35 'inicializa objeto Instr. Mt. Grnd(id) = New KONECT_V 19. Elt. Par 'acerta endereços - incia com '30. 201 Instr. Mt. Grnd(id). End. Reg = 30199 + 2 * id 'redimensiona array da leitura Re. Dim Instr. Mt. Grnd(id). Regs(3) 'cancela opção para gravação Instr. Mt. Grnd(id). Flag. Grv = False Next '################ 'ENTRA EM LOOP PARA LEITURA ENVIO DE DADAOS PARA O MOSQUITTO (28/09/19) 'TESTA SE DURAÇÃO PARA MONITORAMENTO É VÁLIDA: : Instr. Mt. Tmp. Inc = Date. Now. Time. Of. Day. Total. Seconds 'AJUSTA RELÓGIO. . . Dim Atl. Time As Double = Date. Now. Time. Of. Day. Total. Seconds 'TEMPO ATUAL Dim Topic As String = "/Elektor. My. Journey. Io. T/" + Tb 2. Text + "/test" ' Dim Qs(1) As Byte Do While (Atl. Time - Instr. Mt. Tmp. Inc) <= Tmp. L If Instr. Mt. Read. Grnd() Then '###EM TESTE - PUBLICA APENAS O VALOR DA POTÊNCIA msg. BPS = Tb 3. Text & "//" & Instr. Mt. Grnd(16). Vlr. Dec '' // PUBLICA UMA MENSAGEM COM Qo. S 2 client. Publish(Topic, Encoding. UTF 8. Get. Bytes(msg. BPS), Mqtt. Msg. Base. QOS_LEVEL_EXACTLY_ONCE, True) End If Atl. Time = Date. Now. Time. Of. Day. Total. Seconds Loop 'FIM DAS LEITURAS: : : client. Publish(Topic, Encoding. UTF 8. Get. Bytes("FIM DAS LEITURAS"), Mqtt. Msg. Base. QOS_LEVEL_EXACTLY_ONCE, True)

Dê um “duplo click” no formulário principal e atualize o código do evento “LOAD”

Dê um “duplo click” no formulário principal e atualize o código do evento “LOAD”

Dê um “duplo click” no formulário principal e inclua a sub-rotina “Load. Spar ”

Dê um “duplo click” no formulário principal e inclua a sub-rotina “Load. Spar ” referente à “ configuração da porta serial Sub Load. Spar() Dim msg. BPS As String = "" 'acertando separador decimal. . . Dim sep As New System. Globalization. Number. Format. Info If Number. Format. Info. Current. Info. Number. Decimal. Separator = ", " Then 'troca para ponto Thread. Current. Culture = New Culture. Info("en-us") Number. Format. Info. Current. Info. Number. Decimal. Separator = ". " End If 'define parametros comunicação serial Dim Lst. Port() As String = System. IO. Ports. Serial. Port. Get. Port. Names If Lst. Port. Length > 0 Then 'LISTA PORTAS SERIAIS TIPO RS-232 DISPONÍVIEIS NO MICRO 'ISTO SERÁ APENAS PARA VISUALIZAÇÃO, POIS A POSSIBILIDADE DE ALTERAR A PORTA NÃO SERÁ 'IMPLEMENTADA AGORA Cb 1. Items. Add. Range(Lst. Port) 'INCLUI LISTA NO CONTROLE TIPO "COMBOBOX" Cb 1. Sorted = True 'ARRANJA EM ORDEM ALFABÉTICA Cb 1. Selected. Index = 0 'apresenta primeira porta como alternativa 'verifica EXISTE UMA PORTA aberta/fechada If Not RS 232. Is. Open Then 'porta fechada, então abre RS 232. Port. Name = "COM 1" 'SERÁ MANTIDA COMO CONSTANTE, POIS SÓ EXISTE 'UM CONVERSOR DO TIPO RS 232//RS 485. E ELE ESTÁMONTADO NA PORTA 1 RS 232. Open() Else 'porta aberta (pouco provável, mas pode acontecer) msg. BPS = "A PORTA SERIAL " & RS 232. Port. Name & " ESTÁ OCUPADA. CONTINUA MESMO ASSIM? !!" If Msg. Box(msg. BPS, vb. Yes. No, "MPEU") = Msg. Box. Result. No Then 'ENCERRA. . End If Else. If (Msg. Box("ESTE COMPUTADOR NÃO POSSUI PORTA SERIAL! CONTINUA? ", vb. Yes. No, "MPEU") = Msg. Box. Result. No) Then 'ENCERRA. . . End Else '. . . End If 'SE CHEGOU AQUI: ACERTA CONFIGURAÇÃO DA PORTA '1: opções para configuração da porta serial 'EXISTE A POSSIBILIDADE DE DEIXAR OS PAR METROS DA PORTA SERIAL COMO VARIÁVIES 'O QUE POSSIBILITA AO USUÁRIO FINAL MODIFICÁ-LOS PARA FINS DE TESTES 'ENTRETANTO, AGORA ELES SERÁ FIXADOS EM TEMPO DE PROJETO RS 232. Data. Bits = 8 'TAMANHO DO BYTE DE DADOS RS 232. Parity = Parity. None 'SEM CONTROLE DE PARIDADE RS 232. Stop. Bits = 2 'SEGUE O FORMATO 8 N 2 RS 232. Baud. Rate = 57600 '- DEVE SER ESTA TAXA PARA EFETUAR A TRANSFERÊNCIA "EM MASSA" DOS REGISTROS RS 232. Handshake = Handshake. None 'ISTO INTERFERE DEVE SER "NONE" (OBRIGATORIAMENTE) Instr. Mt. Sr. Port = RS 232 'TRANSFERE PAR METROS DA PORTA SERIAL End Sub

Compile o código criado – tecle F 5 e verifique possíveis erros. Mude o

Compile o código criado – tecle F 5 e verifique possíveis erros. Mude o endereço do instrumento para 2 e veja o que acontece. . . A tela de abertura será semelhante à imagem abaixo. O TESTE FINAL SERÁ FEITO NO LABORATÓRIO DE USINAGEM