Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    DDE tra RSLinx e programma in VB6

    Perchè questa subroutine lanciata circa 4700 volte genera l'errore "ERRORE 7 MEMORIA ESAURITA"? Errore che tra l'altro non riesco ad intercettare in fase di esecuzione.
    La comunicazione DDE avviene con un applicativo di nome RSLinx che a sua volta comunica in TCP/IP con un PLC.


    Sub ReadPLC(Topic, Item, ValRead)
    'Topic = nome topic per la comunicazione DDE con RSLinx, applicativo
    'della Rockwell automation che gestisce la comunicazione con il PLC
    'Item = nome della variabile da leggere sul PLC
    'ValRead = valore restituito dalla lettura

    On Error GoTo GErr
    'ComRSL è un form dove è presente una textbox di nome RSL
    L00:
    ComRSL.RSL.LinkTopic = "RSLinx|" & Topic
    ComRSL.RSL.LinkItem = Item
    ComRSL.RSL.LinkMode = vbLinkManual
    ComRSL.RSL.LinkRequest
    ValRead = ComRSL.RSL.Caption
    ComRSL.RSL.LinkMode = 0

    Exit Sub
    GErr:
    Select Case Err.Number
    Case 282
    Msg = "Errore " & Err.Number & Chr(13)
    Msg = Msg & "Manca comunicazione con PLC" & Chr(13)
    Msg = Msg & "Riprovare ?"
    If MsgBox(Msg, 4, "ReadPLC") = vbYes Then
    ValRead = "NO"
    Exit Sub
    End If
    End
    Case 287 'Tasto ESC durante un'operazione DDE
    GoTo L00
    Case Else
    Msg = "Errore " & Err.Number & Chr(13)
    Msg = Msg & Err.Description & Chr(13)
    Msg = Msg & Topic & "|" & Item
    MsgBox Msg, , "ReadPLC"
    End
    End Select

    End Sub

    Grazie per la collaborazione, non so più che pesci pigliare...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    DDE e' una tecnologia "vecchiotta" non priva di bug (non posso assicurarti quindi che il problema non sia di DDE).

    Ti posso consigliare, se non l'hai fatto, di installare il SP6.

    Inoltre, quel

    GoTo L00

    e' sbagliato in quanto non elimina la condizione di errore (cosa che potrebbe innescare un loop tale da riempire lo stack e fornire l'errore di out of memory). Sostituiscilo con un

    Resume L00

  3. #3

    RISOLTO !

    Ho scoperto come poter evitare l'interruzione del programma anche se non ho capito bene il perchè lo fa.

    Se ho un canale DDE aperto costantemente (proprietà vbLinkMode=vbLinkAutomatic) e uso un secondo canale che continuo ad aprire e chiudere con la subroutine "ReadPLC" descritta nel primo intervento, arrivato a 4800 volte circa il programma viene interrotto bruscasmente.

    Se invece non apro e chiudo questo secondo canale ma lo lascio costantemente aperto e per leggere le diverse variabili cambio solo la proprietà LinkItem, questo non ho più problemi.

    Sembra che aprire e chiudere un canale DDE prende della memoria (non di RAM perchè il numero di 4800 volte è indipendente dalla RAM del PC) fino ad esaurirla...???

    Sarà così per tutte le comunicazioni con DDE o sarà il mio DDE server della Rockwell "RSLinx" che genera l'inconveniente???

    CHI LO SA, MAAAAHHHH !

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.