Jump to content

Recommended Posts

Posted

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

Luis Lourenço

Posted

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

Ricardo Timóteo

Posted

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)

Ricardo Timóteo

Posted

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..

Luis Lourenço

Posted

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

Ricardo Timóteo

  • 5 months later...
Posted

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.

Ricardo Timóteo

  • 10 months later...
Posted

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.

include <ai se te avio>

Mãe () {

}

Posted

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)

Ricardo Timóteo

Posted

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.

include <ai se te avio>

Mãe () {

}

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.