none
Enviar dados Porta Serial?

    Question

  • Boa noite pessoal, estou com uma CLP com 6 relês e tenho um código fonte de um programa em VB6, o caso e que não sei nada de VB e sim de C# e não consegui tirar proveito nenhum do mesmo, alguem tem alguma dica como faço para ativar os reles pelo componente do C# SerialPort? já tentei de varias maneiras e não consegui, quem poder me dar uma luz ficarei grato. Obrigado.
    Wednesday, July 07, 2010 4:12 AM

Answers

  • Foi mal Cassiano,

    Eu olhei ali e te falei errado mesmo,  SB é o código que o pic envia com os resultados dos relés, para acionar os relés é SM mesmo.

    Mas agora eu fui ver, tem uma coisa que pode dar problema, o .net usa como padrão char de 16 bits em unicode, o pic usar char de 8 bits em ascii. Uma forma de coverter isso é:

    byte[] asBytes = Encoding.ASCII.GetBytes("SM31");
    sp.Write(asBytes, 0, 4);

     

    Reformulando o que eu tinha dito antes:

    Configura a porta serial assim:
                    SerialPort sp = new SerialPort();   
                    sp.PortName = COM2;//poem a porta que tu for usar
                    sp.BaudRate = 19200;
                    sp.DataBits = 8;
                    sp.Parity = Parity.None;
                    sp.StopBits = StopBits.One;
                    sp.ReadTimeout = 1000;
                    sp.WriteTimeout = 1000;
                    sp.Open();

    pra ler o valor dos reles:

                    byte[] asBytes = Encoding.ASCII.GetBytes("SL");
                    sp.Write(asBytes, 0, 2);

    pra ler o valor das entradas:

                    byte[] asBytes = Encoding.ASCII.GetBytes("SE");
                    sp.Write(asBytes, 0, 2);

    pra acionar um relé:

                    byte[] asBytes = Encoding.ASCII.GetBytes("SM"+ numeroDoRele + estadoDoRele_0ou1);
                    sp.Write(asBytes, 0, 4);

    quando receber a resposta da leitura dos reles:

    byte0 = "S"; byte1 = "B"; byte1 = valor Rele1; Byte1+n = valor Rele1+n


    quando receber a resposta da leitura das entradas:

    byte0 = "E"; byte1 = "B"; byte1 = valor Rele1; Byte1+n = valor Rele1+n

    Wednesday, July 14, 2010 4:19 PM
  • Amigo o problema que estava faltando era simples!!! eu estava esquecendo de por "/n" depois so sm11 e deu certo!!! obrigado viu a você e a todos que me ajudaram de verdade até mais.
    Thursday, July 15, 2010 5:49 AM

All replies

  • Boa noite pessoal, estou com uma CLP com 6 relês e tenho um código fonte de um programa em VB6, o caso e que não sei nada de VB e sim de C# e não consegui tirar proveito nenhum do mesmo, alguem tem alguma dica como faço para ativar os reles pelo componente do C# SerialPort? já tentei de varias maneiras e não consegui, quem poder me dar uma luz ficarei grato. Obrigado.


    Olha pega o seu codigo que esta em VB e coloca neste pagina, eles traduzim.

    http://www.developerfusion.com/tools/convert/vb-to-csharp/

    Tudo de bom.


    Just Be Humble Malange!
    Wednesday, July 07, 2010 5:55 AM
    Moderator
  • Então amigo muito obrigado pela ajuda mas o caso é que ele traduz apenas VB.NET e esse codigo VB é antigo e não deu certo, não tem uma outra forma? obrigado.
    Wednesday, July 07, 2010 12:56 PM
  • Qual é o marca/modelo do CLP?

     

    As vezes o fabricante fornece os drivers para .NET.

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    Wednesday, July 07, 2010 1:00 PM
    Moderator
  • Opa amigo então foi um amigo meu que montou ele usou o PIC 16F628A abraços.
    Wednesday, July 07, 2010 2:45 PM
  • Pela prota serial voce pode mandar codigos ASCII, um codigo pra cada rele.

    Ai é só voce interpretar o que voce receber no programa do microcontrolador.

    Wednesday, July 07, 2010 3:09 PM
  • Opa, então amigo ai é que está o problema eu não sei qual o codigo de cada rele, isso que ta me matando, pois na real e so colocar assim não é? serialPort.write("o codigo")?
    Wednesday, July 07, 2010 3:31 PM
  • Os CLPs, pelo menos todos os comerciais, utilizam algum protocolo de comunicação. Ou seja, não é só enviar  o código para acionar o relé. Normalmente os CLPs usam o protocolo Modbus, nesse caso tu precisa implementar um protocolo Modbus mestre em C# pra conseguiar se comunicar com o CLP.

    Como esse CLP fo iteu amigo que fez, tu precisa falar com ele para ver como ele fez a comunicação, protocolo, o baudrate, endereços, etc.

    Wednesday, July 07, 2010 3:52 PM
  • certo vou conversar com ele certinho como ele fez!!! vou postar o codigo em VB tbm caso alguem saiba interpretar mais ou menos !!! abraços valeu..

     

    Dim string_recebida As String * 12
    Dim enviado As Boolean
    Dim enviado2 As Boolean
    Dim ler_saidas As Boolean
    Dim novo_comando As Boolean
    Dim porta_alvo As String * 1
    Dim novo_valor As String * 1
    Dim liga As String * 1
    Private Sub A_Sair_Click()
    If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
    End
    End Sub

    Private Sub A_Salvar_Click()
    Form4.Visible = True
    End Sub

    Private Sub Abrir_porta_serial_Click()
    Call Command1_Click
    End Sub

    Private Sub C_PS_C1_Click()
    Option1 = True
    End Sub

    Private Sub C_PS_C2_Click()
    Option2 = True
    End Sub

    Private Sub Command1_Click()
    On Error GoTo porta_ocupada
    If MSComm1.PortOpen = False Then
    If Option1 = True Then
    numero = 1
    Else
    numero = 2
    End If
    MSComm1.CommPort = numero
    MSComm1.Settings = "19200,n,8,1"
    MSComm1.InputLen = 0
    MSComm1.PortOpen = True
    Command4.Enabled = True
    Iniciar_comm.Enabled = True
    Command2.Enabled = True
    Fechar_porta_serial.Enabled = True
    Option1.Enabled = False
    Option2.Enabled = False
    C_PS.Enabled = False
    If numero = 1 Then Option1 = True
    If numero = 2 Then Option2 = True
    Command1.Enabled = False
    Abrir_porta_serial.Enabled = False
    End If
    GoTo fim_sub3
    porta_ocupada:
    OK_pressionado = MsgBox("A porta selecionada está em uso por outro programa!", 48, "Erro")
    fim_sub3:
    End Sub


    Private Sub Command10_Click()
    If Picture14.BackColor = &H40& Then
    novo_comando = True
    porta_alvo = "6"
    novo_valor = "1"
    Picture14.BackColor = &HFF&
    GoTo saida_sub
    End If
    If Picture14.BackColor = &HFF& Then
    novo_comando = True
    porta_alvo = "6"
    novo_valor = "0"
    Picture14.BackColor = &H40&
    GoTo saida_sub
    End If
    saida_sub:
    End Sub

    Private Sub Command2_Click()
    If MSComm1.PortOpen = True Then
    If Timer1.Enabled = True Then
    GoTo saida
    End If
    MSComm1.PortOpen = False
    Command4.Enabled = False
    Iniciar_comm.Enabled = False
    Command2.Enabled = False
    Fechar_porta_serial.Enabled = False
    Option1.Enabled = True
    Option2.Enabled = True
    C_PS.Enabled = True
    Command1.Enabled = True
    Abrir_porta_serial.Enabled = True
    End If

    saida:
    End Sub

    Private Sub Command3_Click()
    If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
    End
    End Sub


    Private Sub Command4_Click()
    If Timer1.Enabled = True Then
    Timer1.Enabled = False
    Command4.Caption = "Iniciar comunicação"
    Iniciar_comm.Caption = "Iniciar comunicação"
    Command2.Enabled = True
    Fechar_porta_serial.Enabled = True
    Command5.Enabled = False
    Command6.Enabled = False
    Command7.Enabled = False
    Command8.Enabled = False
    Command9.Enabled = False
    Command10.Enabled = False
    Picture1.BackColor = &H8000000F
    Picture2.BackColor = &H8000000F
    Picture3.BackColor = &H8000000F
    Picture4.BackColor = &H8000000F
    Picture5.BackColor = &H8000000F
    Picture6.BackColor = &H8000000F
    Picture7.BackColor = &H8000000F
    Picture8.BackColor = &H8000000F
    Picture9.BackColor = &H8000000F
    Picture10.BackColor = &H8000000F
    Picture11.BackColor = &H8000000F
    Picture12.BackColor = &H8000000F
    Picture13.BackColor = &H8000000F
    Picture14.BackColor = &H8000000F
    GoTo saida
    End If
    If MSComm1.PortOpen = True Then
    If Timer1.Enabled = False Then
    Timer1.Enabled = True
    enviado = False
    enviado2 = False
    ler_saidas = True
    Command4.Caption = "Encerrar comunicação"
    Iniciar_comm.Caption = "Encerrar comunicação"
    Command2.Enabled = False
    Fechar_porta_serial = False
    Command5.Enabled = True
    Command5.Enabled = True
    Command6.Enabled = True
    Command7.Enabled = True
    Command8.Enabled = True
    Command9.Enabled = True
    Command10.Enabled = True
    End If
    End If
    saida:
    End Sub

    Private Sub Command5_Click()
    If Picture9.BackColor = &H40& Then
    novo_comando = True
    porta_alvo = "1"
    novo_valor = "1"
    Picture9.BackColor = &HFF&
    GoTo saida_sub
    End If
    If Picture9.BackColor = &HFF& Then
    novo_comando = True
    porta_alvo = "1"
    novo_valor = "0"
    Picture9.BackColor = &H40&
    GoTo saida_sub
    End If
    saida_sub:
    End Sub

    Private Sub Command6_Click()
    If Picture10.BackColor = &H40& Then
    novo_comando = True
    porta_alvo = "2"
    novo_valor = "1"
    Picture10.BackColor = &HFF&
    GoTo saida_sub
    End If
    If Picture10.BackColor = &HFF& Then
    novo_comando = True
    porta_alvo = "2"
    novo_valor = "0"
    Picture10.BackColor = &H40&
    GoTo saida_sub
    End If
    saida_sub:
    End Sub

    Private Sub Command7_Click()
    If Picture11.BackColor = &H40& Then
    novo_comando = True
    porta_alvo = "3"
    novo_valor = "1"
    Picture11.BackColor = &HFF&
    GoTo saida_sub
    End If
    If Picture11.BackColor = &HFF& Then
    novo_comando = True
    porta_alvo = "3"
    novo_valor = "0"
    Picture11.BackColor = &H40&
    GoTo saida_sub
    End If
    saida_sub:
    End Sub

    Private Sub Command8_Click()
    If Picture12.BackColor = &H40& Then
    novo_comando = True
    porta_alvo = "4"
    novo_valor = "1"
    Picture12.BackColor = &HFF&
    GoTo saida_sub
    End If
    If Picture12.BackColor = &HFF& Then
    novo_comando = True
    porta_alvo = "4"
    novo_valor = "0"
    Picture12.BackColor = &H40&
    GoTo saida_sub
    End If
    saida_sub:
    End Sub

    Private Sub Command9_Click()
    If Picture13.BackColor = &H40& Then
    novo_comando = True
    porta_alvo = "5"
    novo_valor = "1"
    Picture13.BackColor = &HFF&
    GoTo saida_sub
    End If
    If Picture13.BackColor = &HFF& Then
    novo_comando = True
    porta_alvo = "5"
    novo_valor = "0"
    Picture13.BackColor = &H40&
    GoTo saida_sub
    End If
    saida_sub:
    End Sub

    Private Sub Fechar_porta_serial_Click()
    Call Command2_Click
    End Sub

    Private Sub Form_Load()
    Option1 = True
    Timer1.Enabled = False
    enviado = False
    enviado2 = False
    novo_comando = False
    End Sub

    Private Sub Menu_Click(Index As Integer)

    End Sub

    Private Sub Image1_Click()

    End Sub

    Private Sub Iniciar_comm_Click()
    Call Command4_Click
    End Sub

    Private Sub LDC_Click()
    Form3.Visible = True
    End Sub

    Private Sub lista_comandos_Click()
    Form3.Visible = True
    End Sub

    Private Sub salvar_dados_Click()
    Form4.Visible = True
    End Sub

    Private Sub Sobre_Click()
    Form2.Visible = True
    End Sub

    Private Sub Timer1_Timer()
    If ler_saidas = True And enviado2 = False Then
    MSComm1.Output = "SL" + Chr(13)
    enviado2 = True
    GoTo saida_sub
    End If
    If ler_saidas = True And enviado2 = True Then
    string_recebida = MSComm1.Input 'Recebe da placa os valores das saídas
    comprimento = Len(string_recebida)
    If comprimento = 12 Then 'recebeu corretamente a string contendo os valores das saídas
    cabecalho = Mid$(string_recebida, 1, 2)
    If cabecalho = "EB" Then 'recebeu as entradas, então pede novamente os valores das saídas
    ler_saidas = True
    enviado2 = False
    GoTo saida_sub
    End If
    If cabecalho = "SB" Then 'recebeu corretamente a sring contendo o cabeçalho SaídaBinaria
    ler_saidas = False
    If Mid$(string_recebida, 3, 1) = "0" Then 'Se verdade, saida desativada
    Picture9.BackColor = &H40&
    End If
    If Mid$(string_recebida, 3, 1) = "1" Then 'Se verdade, saida ativada
    Picture9.BackColor = &HFF&
    End If

    If Mid$(string_recebida, 4, 1) = "0" Then 'Se verdade, saida desativada
    Picture10.BackColor = &H40&
    End If
    If Mid$(string_recebida, 4, 1) = "1" Then 'Se verdade, saida ativada
    Picture10.BackColor = &HFF&
    End If

    If Mid$(string_recebida, 5, 1) = "0" Then 'Se verdade, saida desativada
    Picture11.BackColor = &H40&
    End If
    If Mid$(string_recebida, 5, 1) = "1" Then 'Se verdade, saida ativada
    Picture11.BackColor = &HFF&
    End If

    If Mid$(string_recebida, 6, 1) = "0" Then 'Se verdade, saida desativada
    Picture12.BackColor = &H40&
    End If
    If Mid$(string_recebida, 6, 1) = "1" Then 'Se verdade, saida ativada
    Picture12.BackColor = &HFF&
    End If

    If Mid$(string_recebida, 7, 1) = "0" Then 'Se verdade, saida desativada
    Picture13.BackColor = &H40&
    End If
    If Mid$(string_recebida, 7, 1) = "1" Then 'Se verdade, saida ativada
    Picture13.BackColor = &HFF&
    End If

    If Mid$(string_recebida, 8, 1) = "0" Then 'Se verdade, saida desativada
    Picture14.BackColor = &H40&
    End If
    If Mid$(string_recebida, 8, 1) = "1" Then 'Se verdade, saida ativada
    Picture14.BackColor = &HFF&
    End If
    End If
    End If
    GoTo saida_sub
    End If

    If novo_comando = True Then
    MSComm1.Output = "SM" + porta_alvo + novo_valor + Chr(13)
    novo_comando = False
    GoTo saida_sub
    End If

    If enviado = False Then
    MSComm1.Output = "E" + Chr(13) 'Solicita a placa que envie os valores das entradas
    enviado = True
    Else
    string_recebida = MSComm1.Input 'Recebe da placa os valores das entradas
    enviado = False
    comprimento = Len(string_recebida)
    If comprimento = 12 Then 'recebeu corretamente a string contendo os valores das entradas
    cabecalho = Mid$(string_recebida, 1, 2)
    If cabecalho = "EB" Then 'recebeu corretamente a sring contendo o cabeçalho EntradaBinaria

    If Mid$(string_recebida, 3, 1) = "0" Then 'Se verdade, entrada desativada
    Picture1.BackColor = &H40&
    End If
    If Mid$(string_recebida, 3, 1) = "1" Then 'Se verdade, entrada ativada
    Picture1.BackColor = &HFF&
    End If

    If Mid$(string_recebida, 4, 1) = "0" Then 'Se verdade, entrada desativada
    Picture2.BackColor = &H40&
    End If
    If Mid$(string_recebida, 4, 1) = "1" Then 'Se verdade, entrada ativada
    Picture2.BackColor = &HFF&
    End If

    If Mid$(string_recebida, 5, 1) = "0" Then 'Se verdade, entrada desativada
    Picture3.BackColor = &H40&
    End If
    If Mid$(string_recebida, 5, 1) = "1" Then 'Se verdade, entrada ativada
    Picture3.BackColor = &HFF&
    End If

    If Mid$(string_recebida, 6, 1) = "0" Then 'Se verdade, entrada desativada
    Picture4.BackColor = &H40&
    End If
    If Mid$(string_recebida, 6, 1) = "1" Then 'Se verdade, entrada ativada
    Picture4.BackColor = &HFF&
    End If

    If Mid$(string_recebida, 7, 1) = "0" Then 'Se verdade, entrada desativada
    Picture5.BackColor = &H40&
    End If
    If Mid$(string_recebida, 7, 1) = "1" Then 'Se verdade, entrada ativada
    Picture5.BackColor = &HFF&
    End If

    If Mid$(string_recebida, 8, 1) = "0" Then 'Se verdade, entrada desativada
    Picture6.BackColor = &H40&
    End If
    If Mid$(string_recebida, 8, 1) = "1" Then 'Se verdade, entrada ativada
    Picture6.BackColor = &HFF&
    End If

    If Mid$(string_recebida, 9, 1) = "0" Then 'Se verdade, entrada desativada
    Picture7.BackColor = &H40&
    End If
    If Mid$(string_recebida, 9, 1) = "1" Then 'Se verdade, entrada ativada
    Picture7.BackColor = &HFF&
    End If

    If Mid$(string_recebida, 10, 1) = "0" Then 'Se verdade, entrada desativada
    Picture8.BackColor = &H40&
    End If
    If Mid$(string_recebida, 10, 1) = "1" Then 'Se verdade, entrada ativada
    Picture8.BackColor = &HFF&
    End If
    End If
    End If
    End If
    saida_sub:
    End Sub

    Wednesday, July 07, 2010 4:17 PM
  • Alguem ai que entende de VB6 pode me ajudar a converter esse código para C# ou pelo menos me ajudar a entender?
    Wednesday, July 07, 2010 8:16 PM
  • A Pessoal esse daqui é o codigo do programa em C para gravar na PIC

     

    //----------------------------------------------------//
    // Programa IO SERIAL do CLP de 8 entradas e 6 saídas


    //    Configurações da IOSERIAL:
    //
    //       Porta Serial:
    //       B2 TX - Transmite
    //       B1 RX - Recebe

    //             Saídas a relé:
    //             B7 - Saída número 1
    //             B0 - Saída número 2
    //             B3 - Saída número 3
    //             B6 - Saída número 4
    //             B5 - Saída número 5
    //             B4 - Saída número 6

    //             Entradas optoacopladas:
    //             A6 - Entrada número 1
    //             A7 - Entrada número 2
    //             A0 - Entrada número 3
    //             A1 - Entrada número 4
    //             A2 - Entrada número 5
    //             A3 - Entrada número 6
    //             A4 - Entrada número 7
    //             A5 - Entrada número 8
    //----------------------------------------------------//

    #include <16F628A.h>

    #use delay(clock=4000000)

    #fuses INTRC,INTRC_IO,NOWDT,PUT,NOBROWNOUT,NOMCLR, NOLVP

    #use rs232 (baud = 19200, xmit = PIN_B2, rcv = PIN_B1)

    #rom 0x2100 = {0} // Relés desligados

    #define  Saida_rele1 PIN_B7
    #define  Saida_rele2 PIN_B0
    #define  Saida_rele3 PIN_B3
    #define  Saida_rele4 PIN_B6
    #define  Saida_rele5 PIN_B5
    #define  Saida_rele6 PIN_B4

    #define  Entrada_opto1  PIN_A6
    #define  Entrada_opto2  PIN_A7
    #define  Entrada_opto3  PIN_A0
    #define  Entrada_opto4  PIN_A1
    #define  Entrada_opto5  PIN_A2
    #define  Entrada_opto6  PIN_A3
    #define  Entrada_opto7  PIN_A4
    #define  Entrada_opto8  PIN_A5

    int estado_reles;
    #bit  estado_rele1 = estado_reles.0
    #bit  estado_rele2 = estado_reles.1
    #bit  estado_rele3 = estado_reles.2
    #bit  estado_rele4 = estado_reles.3
    #bit  estado_rele5 = estado_reles.4
    #bit  estado_rele6 = estado_reles.5

    void le_entradas(void);
    void le_saidas(void);
    void le_e2prom(void);
    void escreve_e2prom(int endereco, int dado_para_gravar);

    void main()
       {
       static char string_recebida[5];

       setup_comparator (NC_NC_NC_NC);
       setup_timer_0 (RTCC_INTERNAL | RTCC_DIV_1);
       setup_timer_1 (T1_DISABLED);
       setup_timer_2 (T2_DISABLED, 127, 1);
       setup_ccp1 (CCP_OFF);
       disable_interrupts (GLOBAL);

       delay_ms (20);

       printf ("CLP PIC - 628 v1.3\r\n");
       printf ("---\r\n");
       printf ("Linha de dados RS232 full duplex.\r\n");
       printf ("---\r\n");
       printf ("CLP PIC PRONTO!\r\n");
       printf ("---\r\n");

       le_e2prom();

       while (true)
          {
          gets (string_recebida);

          if (string_recebida[0] == 'S' || string_recebida[0] == 's')
             {
             if (string_recebida[1] == 'M' || string_recebida[1] == 'm')
                {
                if (string_recebida[2] == '1') {if (string_recebida[3] == '1') {output_high(saida_rele1); estado_rele1 = 1;} else {output_low(saida_rele1); estado_rele1 = 0;}}
                if (string_recebida[2] == '2') {if (string_recebida[3] == '1') {output_high(saida_rele2); estado_rele2 = 1;} else {output_low(saida_rele2); estado_rele2 = 0;}}
                if (string_recebida[2] == '3') {if (string_recebida[3] == '1') {output_high(saida_rele3); estado_rele3 = 1;} else {output_low(saida_rele3); estado_rele3 = 0;}}
                if (string_recebida[2] == '4') {if (string_recebida[3] == '1') {output_high(saida_rele4); estado_rele4 = 1;} else {output_low(saida_rele4); estado_rele4 = 0;}}
                if (string_recebida[2] == '5') {if (string_recebida[3] == '1') {output_high(saida_rele5); estado_rele5 = 1;} else {output_low(saida_rele5); estado_rele5 = 0;}}
                if (string_recebida[2] == '6') {if (string_recebida[3] == '1') {output_high(saida_rele6); estado_rele6 = 1;} else {output_low(saida_rele6); estado_rele6 = 0;}}
                escreve_e2prom (0, estado_reles);
                }

             if (string_recebida[1] == 'L' || string_recebida[1] == 'l')
                {
                le_saidas();
                }
             }

          if (string_recebida[0] == 'E' || string_recebida[0] == 'e')
             {
             le_entradas();
             }
          }
       }
      
    void le_entradas(void)
       {
       printf("EB");
       if (input(entrada_opto1) == 1) {printf ("1");} else {printf ("0");}
       if (input(entrada_opto2) == 1) {printf ("1");} else {printf ("0");}
       if (input(entrada_opto3) == 1) {printf ("1");} else {printf ("0");}
       if (input(entrada_opto4) == 1) {printf ("1");} else {printf ("0");}
       if (input(entrada_opto5) == 1) {printf ("1");} else {printf ("0");}
       if (input(entrada_opto6) == 1) {printf ("1");} else {printf ("0");}
       if (input(entrada_opto7) == 1) {printf ("1");} else {printf ("0");}
       if (input(entrada_opto8) == 1) {printf ("1\r\n");} else {printf ("0\r\n");}
       }

    void le_saidas(void)
       {
       printf("SB");
       if (estado_rele1 == 1) {printf ("1");} else {printf ("0");}
       if (estado_rele2 == 1) {printf ("1");} else {printf ("0");}
       if (estado_rele3 == 1) {printf ("1");} else {printf ("0");}
       if (estado_rele4 == 1) {printf ("1");} else {printf ("0");}
       if (estado_rele5 == 1) {printf ("1");} else {printf ("0");}
       if (estado_rele6 == 1) {printf ("1\r\n");} else {printf ("0\r\n");}
       }

    void le_e2prom(void)
       {
       estado_reles = read_eeprom (0);
       if (estado_rele1 == 1) {output_high (saida_rele1);} else {output_low (saida_rele1);}
       if (estado_rele2 == 1) {output_high (saida_rele2);} else {output_low (saida_rele2);}
       if (estado_rele3 == 1) {output_high (saida_rele3);} else {output_low (saida_rele3);}
       if (estado_rele4 == 1) {output_high (saida_rele4);} else {output_low (saida_rele4);}
       if (estado_rele5 == 1) {output_high (saida_rele5);} else {output_low (saida_rele5);}
       if (estado_rele6 == 1) {output_high (saida_rele6);} else {output_low (saida_rele6);}
       return;
       }

    void escreve_e2prom(int endereco, int dado_para_gravar)
       {
       write_eeprom (endereco,dado_para_gravar);
       return;
       }

    Wednesday, July 07, 2010 11:15 PM
  • Tens de ir ao forum de vb6, amigo. Nao sei que alguem aqui te pode ajudar, tenta no vb6 forum, se que existe algum neste mundo ainda.

    Veja esta dica, http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx

    aqui tem um projecto simples com Serial Porte em c# http://csharp.simpleserial.com/

     

     


    Just Be Humble Malange!
    Thursday, July 08, 2010 8:57 AM
    Moderator
  • É verdade amigo vai ser dificil achar alguem que trabalhe com VB6, más o caso e que acho que estou fazendo certinho, não estou mesmo e sabendo o comando que vai no writeLine mas agradeço pela ajuda amigo brigado a você e a todos.
    Thursday, July 08, 2010 11:41 AM
  • Configura a porta serial assim:


                    SerialPort sp = new SerialPort();   
                    sp.PortName = COM2;//poem a porta que tu for usar
                    sp.BaudRate = 19200;
                    sp.DataBits = 8;
                    sp.Parity = Parity.None;
                    sp.StopBits = StopBits.One;
                    sp.ReadTimeout = 1000;
                    sp.WriteTimeout = 1000;
                    sp.Open();

    pra ler o valor dos reles:
                    sp.Write("L");

    pra ler o valor das entradas:
                    sp.Write("E");

    pra acionar um relé:
                    sp.Write("SB" + numeroDoRele + estadoDoRele_0ou1);

     

    quando receber a resposta da leitura dos reles:

    byte0 = "S"; byte1 = "B"; byteX = valor ReleX

     

    quando receber a resposta da leitura das entradas:

    byte0 = "E"; byte1 = "B"; byteX = valor entradaX

     

    era isso, boa sorte

     

     

    Thursday, July 08, 2010 11:56 AM
  • Eu trabalhei com vb6 por mais de 10 anos... O primeiro codigo que vc enviou se refere a controle de tela.. ja o segundo se parece sim com controle da porta serial...

    vou dar uma olhada, mas estou meio sem tempo até sexta.... se até lá ninguem tiver respondido, eu me atrevo a "converter" esse códgio para C#

     

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    Thursday, July 08, 2010 12:22 PM
    Moderator
  • Opa amigo deu uma clareada boa esse código que tu me mandou vou tentar fazer uns testes aqui e te falo obrigado.
    Thursday, July 08, 2010 12:25 PM
  • Opa amigo vou tentar o código do amigo aqui caso não de certo se você poder converter para mim eu iria ficar muito agradecido mesmo!!! a tarde te falo se deu certo. obrigado
    Thursday, July 08, 2010 12:26 PM
  • Aqui tem alguns porgramas para o PIC escritos em C++

    http://burningsmell.org/pic16f628/

     

    e esse outro aqui fala de comunicaçao serial/USB

    http://msmvps.com/blogs/coad/archive/2005/03/23/SerialPort-_2800_RS_2D00_232-Serial-COM-Port_2900_-in-C_2300_-.NET.aspx

     

    E esse daqui é especifico para PIC16.. + C#

    http://www.codeproject.com/KB/system/PicRS232.aspx

     

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    Thursday, July 08, 2010 12:33 PM
    Moderator
  • Estou tentando aqui mas não da certo, eu não sei bem o que tem que ser feito, primeiro eu tenho que mandar ler as entradas pra depois gravar?
    Thursday, July 08, 2010 2:29 PM
  • William infelizmente não consegui mesmo, estou tendo uma grande dificuldade por nunca ter mexido com VB se tu poder me ajudar a converter ficarei grato amigo, Obrigado
    Thursday, July 08, 2010 4:17 PM
  • Se o código do PIC for aquilo ali mesmo só precisa enviar o comando pra acionar os relés. Se tu analizar o código do PIC dá pra ver isso.

    No teu código em vb6 tem um "Chr(13)" que eu não sei o que é, mas pelo código do PIC isso não deve precisar.

    Tu consegue ver se o PIC está recebendo o sinalk da serial? É bom revisar a montagem também.

    Se tu enviar:

    sp.Write("SB" + "2"+ "1");

    Deveria acionar o relé 2.

    Thursday, July 08, 2010 4:25 PM
  • Engraçado amigo e que ele não da sinal algum!! o serial está normal pq no outro programa funciona legal, mas percebi uma coisa, criei um botao com essa função sp.Write("SB" + "2"+ "1"); e quando eu clico no botão varias vezes seguidas um dos reles acendem e apagam imediatamente, amigo desculpa estar te incomodando e que sou burro mesmo ehehheheheh valeu!!! caso  tenha mais alguma dica agradeço
    Thursday, July 08, 2010 6:06 PM
  • É Pessoal infelizmente não consegui mesmo fazer funcionar, será que por eu estar fazendo usando o framework 4.0 pode estar dando algum conflito ou não tem nada a ver?
    Friday, July 09, 2010 3:28 PM
  • Amigo descobri que o comando para acionar o Rele é SM 3 1 aciona o Rele 3, mas o fato e que no C# não funciona, e em um programa que uso para testar porta funciona normalmente. sabe o que pode ser? obrigado
    Wednesday, July 14, 2010 3:49 PM
  • Foi mal Cassiano,

    Eu olhei ali e te falei errado mesmo,  SB é o código que o pic envia com os resultados dos relés, para acionar os relés é SM mesmo.

    Mas agora eu fui ver, tem uma coisa que pode dar problema, o .net usa como padrão char de 16 bits em unicode, o pic usar char de 8 bits em ascii. Uma forma de coverter isso é:

    byte[] asBytes = Encoding.ASCII.GetBytes("SM31");
    sp.Write(asBytes, 0, 4);

     

    Reformulando o que eu tinha dito antes:

    Configura a porta serial assim:
                    SerialPort sp = new SerialPort();   
                    sp.PortName = COM2;//poem a porta que tu for usar
                    sp.BaudRate = 19200;
                    sp.DataBits = 8;
                    sp.Parity = Parity.None;
                    sp.StopBits = StopBits.One;
                    sp.ReadTimeout = 1000;
                    sp.WriteTimeout = 1000;
                    sp.Open();

    pra ler o valor dos reles:

                    byte[] asBytes = Encoding.ASCII.GetBytes("SL");
                    sp.Write(asBytes, 0, 2);

    pra ler o valor das entradas:

                    byte[] asBytes = Encoding.ASCII.GetBytes("SE");
                    sp.Write(asBytes, 0, 2);

    pra acionar um relé:

                    byte[] asBytes = Encoding.ASCII.GetBytes("SM"+ numeroDoRele + estadoDoRele_0ou1);
                    sp.Write(asBytes, 0, 4);

    quando receber a resposta da leitura dos reles:

    byte0 = "S"; byte1 = "B"; byte1 = valor Rele1; Byte1+n = valor Rele1+n


    quando receber a resposta da leitura das entradas:

    byte0 = "E"; byte1 = "B"; byte1 = valor Rele1; Byte1+n = valor Rele1+n

    Wednesday, July 14, 2010 4:19 PM
  • Vixe amigo você acredita que não deu certo, o engraçado e que baixei um programa que chama-se RCom serial, e quando envio o comando sm31 aciona o rele 3 ou os outros normalmente, mas no csharp não sei o que acontece, tenho que colocar algum timer pra ficar atualizando a porta? ou algo do tipo pq muita gente me apresentou varias formas de fazer e nada funciona, tenho que colocar todos esses comandos para receber respostas? para ler entradas? num era apenas para criar um componente sp, definir configurações a ele e escrever

    byte[] asBytes = Encoding.ASCII.GetBytes("SM31");
    sp.Write(asBytes, 0, 4);

    que ele não teria que ativar um rele? obrigado amigo está me ajudando bastaste e obrigado pela paciencia.

    Wednesday, July 14, 2010 6:48 PM
  • Se tu tiever mais de uma porta serial no PC ou conversor USB e tiver cabos seriais, liga uma porta serial na outra do PC, então envia pelo programa em C# e ve o que tu recebe com o RCom. Depois poem um jump no cabo serial pra enviar e ele mesmo receber e envia pelo RCom o mesmo dado. Desse jeito tu pode ver se o programa tá mesmo enviando e como tá enviando

    Wednesday, July 14, 2010 8:27 PM
  • certo amigo comprei o cabo vou fazer ele amanha de manha e testa ai qualquer coisa te amolo mais hehehhe obrigado.
    Wednesday, July 14, 2010 9:25 PM
  • Amigo o problema que estava faltando era simples!!! eu estava esquecendo de por "/n" depois so sm11 e deu certo!!! obrigado viu a você e a todos que me ajudaram de verdade até mais.
    Thursday, July 15, 2010 5:49 AM