• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Dotinho

utilização da libnodave

13 mensagens neste tópico

como sabemos e libnodave é uma lib para varias linguas de programação que nos liga aos automatos siemens, mas nao é muito clara (pelo menos para mim) entao gostaria que todos colaborasse-mos para descobrir-mos realmente o que a biblioteca é capaz, inclusivamente postar-mos algumas partes de codigo..

eu proprio ja a tentei usar e da-me erro na connectPLC, é o erro -1025..

cmps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esse erro é de TimeOut aumenta o tempo:

Na rotina:

    Private Sub Comms()
        Dim localMPI As Integer = 0, plcMPI As Integer = 2

        Dim fds As libnodave.daveOSserialType
        Dim di As libnodave.daveInterface
        Dim dc As libnodave.daveConnection
        Dim res As Integer
        Dim buf(1000) As Byte
        Dim inputsres As Integer
        Dim InputBuffer(1000) As Byte
        Dim Inputs(6 * 8) As Integer
        Dim outputsres As Integer
        Dim OutputBuffer(1000) As Byte
        Dim Outputs(6 * 8) As Integer
        Dim MemoryBuffer(1000) As Byte
        Dim Memory(15 * 8) As Integer

        fds.rfd = libnodave.setPort("com1", "19200", AscW("E"))  ' step 1, open a connection
        fds.wfd = fds.rfd
        If fds.rfd > 0 Then       ' if step 1 is ok
            di = New libnodave.daveInterface(fds, "My Interface 1", localMPI, libnodave.daveProtoPPI, libnodave.daveSpeed19k)
            di.setTimeout(100000)  ' Make this longer if you have a very long response time
            res = di.initAdapter
            '
            If res = 0 Then       ' init Adapter is ok
                dc = New libnodave.daveConnection(di, plcMPI, 0, 2)  ' rack amd slot don't matter in case of MPI
                res = dc.connectPLC()
                If res = 0 Then
                    inputsres = dc.readBytes(libnodave.daveInputs, 0, 0, 6, InputBuffer)
                    outputsres = dc.readBytes(libnodave.daveOutputs, 0, 0, 6, OutputBuffer)

                    If inputsres = 0 And outputsres = 0 Then
                        Dim h As Integer = 0

                        For i As Integer = 0 To 5
                            For j As Integer = i * 8 To (i * 8 + 7)
                                Inputs(j) = InputBuffer(i) And (2 ^ h)
                                Outputs(j) = OutputBuffer(i) And (2 ^ h)
                                Memory(j) = MemoryBuffer(i) And (2 ^ h)
                                If Inputs(j) > 1 Then Inputs(j) = 1
                                If Outputs(j) > 1 Then Outputs(j) = 1
                                If Memory(j) > 1 Then Memory(j) = 1
                                h += 1
                            Next
                            h = 0
                        Next

                        '  Já temos os bytes em bits agora é só usar
                        ' por exemplo:
                        TR1_Manual = Inputs(0)
                        TR1_Automático = Inputs(1)
                    Else
                        frmComunicação.txbLog.AppendText("Error {0:d}={1:s} in readBytes.res = " & res & vbCrLf)
                    End If
                    dc.disconnectPLC()
                Else
                    frmComunicação.txbLog.AppendText("Error {0:d}={1:s} in connectPLC.res = " & res & vbCrLf)
                End If
                di.disconnectAdapter()  ' End connection to adapter
            Else
                frmComunicação.txbLog.AppendText("Error {0:d}={1:s} in initAdapter.res = " & res & vbCrLf)
            End If
            libnodave.closePort(fds.rfd)    ' Clean up
        Else
            frmComunicação.txbLog.AppendText("Couldn't open serial port!" & vbCrLf)
        End If 'fds.rfd >0
    End Sub

aumenta o valor de:

            di.setTimeout(100000)  ' Make this longer if you have a very long response time

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só para contextualizar:

O exemplo que dei está noutro tópico (neste quadro), mas resumidamente é assim:

O último programa que fiz em:

http://rapidshare.com/files/228316732/Scada.7z.html

Não está optimizado, foi desenvolvido apenas para ajudar a fazer debug do autómato mais rapidamente e mostrar ao cliente o funcionamento (teórico).

Estou a usar um cabo RS232-PPI.

Um CPU224XP

Com a porta configurada para 19200 (limite máximo do meu PC)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já consegui ligar ao cpu222 com o libnodave, alem do tempo ser curto, tabem tinha o interface mal configurado para o libnodave..

Funciona bem e ja entendi os imputs e ou outputs..

Obrigado pelas sugestões e ideias..

==Modificado==

Nao sei como ler as VW ou VD do 200, pois aparece tudo a zero..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, a minha opinião é a mesma, não é fácil de arrancar, mas depois da 1ª vez é sempre há andar.

Nao sei como ler as VW ou VD do 200, pois aparece tudo a zero..

res = dc.readBytes(libnodave.daveDB, 1, 200, 16, RCVbuf) ' Lê 16 bytes a partir de VB200

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E é muito interessante e útil.

Permite fazer 1 software de visualização a custo Zero (muito positivo), VB.NET em C, no Excel (muito positivo para pequenas aplicações).

Funciona em Windows e em Linux (muito positivo, mais uma vez).

Só não sei, nem encontrei informação, se é compatível com o S7-1200.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É compatível com 1200 sim.

Já testei e funciona muito bem!

Tens apenas de te certificar que colocas o Slot 2 em vez de 1;

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva,

eu em tempos usei a libnodave com um cabo RS232 e aquilo funcionava bem. Na altura fiz um programa de interface com um autómato S5 sem problemas de maior.

Na altura lembro-me que a libraria para aceder aos autómatos por Ethernet não estava ainda muito desenvolvida ou tinha alguns parêntesis, alguém sabe se isso já está mais avancado hoje em dia e se funciona tão bem como MPI ou PPI?

Cumprimentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Com PPI funciona bem com o cabo Série, (acho que ainda não dá com o cabo USB). MPI (não experimentei, mas teoricamente) funciona bem com cabo MPI série (mais uma vez não permite USB) e algumas CPs (CP5611...)

Em Ethernet com S7-200 também funciona bem, nota-se que não é um protocolo Siemens, por isso o comportamento do autómato (a nível de comunicações) não é o mesmo, mas consegue-se actualizar variáveis a 500ms (normalmente)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em Ethernet com S7-200 também funciona bem, nota-se que não é um protocolo Siemens, por isso o comportamento do autómato (a nível de comunicações) não é o mesmo, mas consegue-se actualizar variáveis a 500ms (normalmente)

Hmmm, serve perfeitamente para supervisão... :)

Obrigado pela resposta.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora