none
Mostrar em um textbox a saída de um console RRS feed

  • Pergunta

  • Boa noite, 

    Possuo uma aplicação em visual C# que me retorna valores lidos na rede no console, eu gostaria de exibir o mesmo resultado em um textbox em um form.

    segue o programa:

    namespace MySample
    {
    /// <summary>
    /// Demonstration of NModbus
    /// </summary>
    public class Driver
    {
    static void Main(string[] args)
    {
    log4net.Config.XmlConfigurator.Configure();


    try
    {

                    StartModbusTcpSlave();
                    ModbusTcpMasterReadInputs();
                }
                catch (Exception e)
    {
    Console.WriteLine(e.Message);
    }

    Console.ReadKey();
    }

    public static void StartModbusTcpSlave()
    {
    byte slaveId = 1;
    int port = 502;
    IPAddress address = new IPAddress(new byte[] { 127, 0, 0, 1 });

    // create and start the TCP slave
    TcpListener slaveTcpListener = new TcpListener(address, port);
    slaveTcpListener.Start();

    ModbusSlave slave = ModbusTcpSlave.CreateTcp(slaveId, slaveTcpListener);
    slave.DataStore = DataStoreFactory.CreateDefaultDataStore();

    slave.Listen();

    // prevent the main thread from exiting
    Thread.Sleep(Timeout.Infinite);
    }

    public static void ModbusTcpMasterReadInputs()
    {
    using (TcpClient client = new TcpClient("127.0.0.1", 502))
    {
    ModbusIpMaster master = ModbusIpMaster.CreateIp(client);

    // read five input values
    ushort startAddress = 100;
    ushort numInputs = 5;
    bool[] inputs = master.ReadInputs(startAddress, numInputs);

    for (int i = 0; i < numInputs; i++)
    Console.WriteLine("Input {0}={1}", startAddress + i, inputs[i] ? 1 : 0);

                    
    }

    }

    Obrigado pela ajuda, pois minhas pesquisas pela internet não me retornaram resultados satisfatórios.

    segunda-feira, 1 de fevereiro de 2016 00:34

Respostas

  • Voce deve criar um elemento texbox do windows forms, feito isto, vá em propriedades e veja qual é o ID  dele, voltando ao código, voce passa o valor para ele, imagine que o ID dele é TextBox1, o código ficará assim:

    TextBox1.Text = "Seu valor";

    lembrando que o valor precisa ser uma string, então se mandar qualquer outra coisa que não for uma string, ele dará erro, então é só pegar o valor e dar um .ToString() no fim.

    Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Sugerido como Resposta Erick WendelMVP segunda-feira, 1 de fevereiro de 2016 00:47
    • Marcado como Resposta Marcos SJ segunda-feira, 1 de fevereiro de 2016 15:24
    segunda-feira, 1 de fevereiro de 2016 00:47

Todas as Respostas

  • Voce deve criar um elemento texbox do windows forms, feito isto, vá em propriedades e veja qual é o ID  dele, voltando ao código, voce passa o valor para ele, imagine que o ID dele é TextBox1, o código ficará assim:

    TextBox1.Text = "Seu valor";

    lembrando que o valor precisa ser uma string, então se mandar qualquer outra coisa que não for uma string, ele dará erro, então é só pegar o valor e dar um .ToString() no fim.

    Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Sugerido como Resposta Erick WendelMVP segunda-feira, 1 de fevereiro de 2016 00:47
    • Marcado como Resposta Marcos SJ segunda-feira, 1 de fevereiro de 2016 15:24
    segunda-feira, 1 de fevereiro de 2016 00:47
  • Boa noite Erik, 

    Esta é a estrutura do meu programa, como pode ver o programa fica dentro do Driver.cs, se eu adiciono um form ao projeto ele não abre, e mesmo eu adicionando um textbox no form, dentro do meu programa que é executado no console não consigo fazer referencia a este textbox.. Só para ressaltar, não sou programador experiente. 

    Muito obrigado novamente

    segunda-feira, 1 de fevereiro de 2016 23:26
  • Há um erro de conceito aí. Você não pode inserir um form em uma aplicação console. Você precisa criar um novo projeto WindowsApplication.
    terça-feira, 2 de fevereiro de 2016 01:43
  • Certo, mas como faço para executar Driver.cs?
    terça-feira, 2 de fevereiro de 2016 02:01
  • O mesmo código que você tem na sua aplicação console, você vai colocar na sua aplicação WindowsForms. 
    terça-feira, 2 de fevereiro de 2016 02:03
  • Correto, mas se você ver o meu código roda dentro da main, ai em um novo projeto (com form) onde eu executaria esse código? 
    quarta-feira, 3 de fevereiro de 2016 01:20
  • Correto, mas se você ver o meu código roda dentro da main, ai em um novo projeto (com form) onde eu executaria esse código? 
    No evento Load do form. Quando criar o projeto, duplo clique no form já te leva direto ao evento Load do form, basta colar seu código.
    quarta-feira, 3 de fevereiro de 2016 01:33
  • Perfeito, e como faço para colocar "Console.WriteLine("Input {0}={1}", startAddress + i, inputs[i] ? 1 : 0);" no textbox? 
    quarta-feira, 3 de fevereiro de 2016 01:47
  • Perfeito, e como faço para colocar "Console.WriteLine("Input {0}={1}", startAddress + i, inputs[i] ? 1 : 0);" no textbox? 

    É aí que entra o DataGridView como comentei. Existem duas maneiras de fazer isso, você pode adicionar linha à linha ao DataGridView ou repassar a lista(inputs) para o grid, assim:

    Primeiro adicione um objeto DataGridView ao seu form. Então substitua a linha que você mostrou para:

    DataGridView1.Items.Add(String.Format("Input {0}={1}", startAddress +1, inputs[1]));


    quarta-feira, 3 de fevereiro de 2016 01:52
  • Maravilha, até agora tudo certo, como sou leigo no assunto fico apanhando nas tentativas e erros, deu só um errinho conforme a imagem...

    E mais uma coisa, no evento load do form, o meu código só vai executar quando for carregado o form? ou fica rodando direto? pois este sóftware é um servidor modbus TCP IP onde fica recebendo e escrevendo dados na rede..

    Obrigado novamente

    quarta-feira, 3 de fevereiro de 2016 02:12
  • Esqueci de um detalhe importante, precisamos criar a coluna antes, então fica assim:

                    dataGridView1.Columns.Add("Coluna 1", "dados");
                dataGridView1.Columns.Add("Coluna 1", "dados");
    
                for (int i = 0; i < inputs.Length; i++)
                {
                    dataGridView1.Rows.Add("Input {0}={1}", startAddress + i, inputs[i] ? 1 : 0);
                }
    

    • Marcado como Resposta Diegops2 quarta-feira, 3 de fevereiro de 2016 13:41
    • Não Marcado como Resposta Diegops2 quarta-feira, 3 de fevereiro de 2016 13:41
    quarta-feira, 3 de fevereiro de 2016 02:33
  • E mais uma coisa, no evento load do form, o meu código só vai executar quando for carregado o form? ou fica rodando direto? pois este sóftware é um servidor modbus TCP IP onde fica recebendo e escrevendo dados na rede..
    quarta-feira, 3 de fevereiro de 2016 22:43
  • Vai funcionar exatamente da mesma maneira que o seu projeto Console. Desde que você não feche a aplicação
    quarta-feira, 3 de fevereiro de 2016 23:07
  • Depois de muitas tentativas, funcionou até certa parte o programa, somente na função "ModbusTcpMasterReadInputs();" não me retorna nenhum valor da rede... da como estivesse tudo em zero, mas na aplicação quando executado no console funciona perfeitamente, mas em form não, mas se observar que no final da função do console tenho isso "Thread.Sleep(Timeout.Infinite);" que se eu deixo esta linha no form ele nem é aberto, então tive que deixar comentado esta linha.. Saberia me dizer o que quer dizer isto? e o que eu poderia fazer para contornar isso?

    Obrigado 

    Abaixo está a aplicação rodando junto com o programa Modbus Poll que conecta nesta aplicação e escreve nos endereços modbus onde não deveriam estar com o valor 0.

    sexta-feira, 5 de fevereiro de 2016 02:07
  • Substitua o "Thread.sleep..." por System.Threading.Thread.Sleep(1000)

    Sleep, é um método que serve para fazer o processador dar uma paradinha antes ou depois de se fazer algo. 

    sexta-feira, 5 de fevereiro de 2016 03:02