Results 1 to 6 of 6

Thread: Data van comport (38400 baud) doorsturen over netwerk

  1. #1
    Senior Member
    Join Date
    Sep 2001
    Location
    Schoonhoven
    Posts
    276

    Data van comport (38400 baud) doorsturen over netwerk

    Hallo,

    Ik heb en vraag over het doorsturen van data die ik binnen krijg via een comport (38400 baud). Deze data wil ik doorsturen over het netwerk/internet naar een 3e applicatie. Ik gebruik hiervoor nu de TClientSocket/TServerSocket). Het probleem hierbij is dat ik de data niet met dezelfde snelheid verstuurd krijgt waardoor data verloren gaat bij de 3e applicatie. Heeft iemand enig idee hoe ik de data kan versturen op een hoge snelheid zodat de 3e applicatie wel alle data kan ontvangen.

    Alvast bedankt voor het meedenken.
    Vincent

  2. #2
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    Dat je niet dezelfde snelheid krijgt kan liggen aan de internet-snelheid.. Het kan ook liggen aan het feit dat je pakketjes te klein zijn, waardoor er veel moeite moet worden gedaan om een klein beetje te doen. Misschien kun je een aantal gegevens tegelijk sturen?
    !

  3. #3
    Chaotic member ChaosBear's Avatar
    Join Date
    May 2004
    Location
    Emmen, Drenthe
    Posts
    132
    Ik begrijp niet zoveel van de vraag; eerst even een paar ingangen: een derde applicatie? Wat doen die andere twee dan? Er zijn wel programma's die een COM-poort over een netwerk kunnen 'sharen' (eens een demo van gehad, weet niet meer hoe het heet); helpt je dat niet verder? Er zijn Rs232/LAN converters zoals die van de firma Moxa (www.moxa.com); kun je daar iets mee? We hebben hier zo'n ding en die doet het prima (voor COM-poort Delphi-component gebruiken we AsyncPro). Dan de snelheid: open en sluit je de TCP connectie telkens? Als je dat doet gaat de snelheid onderuit. Misschien zou je iets meer willen uitleggen over het probleem.
    A fool with a tool is still a fool

  4. #4
    Senior Member
    Join Date
    Sep 2001
    Location
    Schoonhoven
    Posts
    276
    De data die verstuurd wordt is een zelfverzonnen protcol. Dit protocol verstuurd kleine pakketjes data met vraag en antwoord. Normaal gesproken verloopt deze communicatie via een 485 verbinding. Het is in mijn geval dus niet mogelijk om meerdee gegevens tegelijk te versturen omdat de applicaties elkaar anders niet meer begrijpen. Ik begrijp uit je antwoord dat ik een andere manier moet verzoinnen om de communicatie toch voor elkaar te krijgen.

    Even en uitleg zoals het nu werkt en wat mijn doel is:
    Via 485 luisteren alle applicaties mee op de lijn en filteren ze eruit wat voor hun is en zullen daar op reageren. 1 programma is de "master" en lle andere stations praten met de master. In geval van de socket verbinding zal een pc (=A en heeft verbinding met de master via 485) fungeren als doorgeef luik. Alle data wordt via de socket doorgestuurd naar een andere pc (=B). B reageerd en stuurt het antwoord via de socket weer terug naar A. A gooit de data weer op de 485 lijn waardoor het lijkt alsof B zelf gereageerd heeft

    Is socket de beste manier om dit voor elkaar te krijgen of zijn er hier andere/betere technieken voor?
    Vincent

  5. #5
    Senior Member
    Join Date
    Sep 2003
    Location
    Beuningen
    Posts
    1,207
    Data gaat niet verloren als je maar een buffer voor de ontvangen berichten hebt gemaakt in applicatie 3. Je hebt namelijk kans dat je alle data wel ontvangt maar dat je het niet snel genoeg verwerkt. Als volgt werkt het bij mij ook al zijn de berichten bij mij strings. Je kunt ook objecten/pakketen kwijt in een stringlist:

    Code:
    procedure TheMessageHandler;
    var TheMessage : string;
    begin
      TheMessage := DataThread.ReceivedMessage;
      // check whether this is a response message or not ....
      if TheMessage <> '' then
      begin
        Trim(TheMessage);
        MessageBuffer.Append(TheMessage);
        if (MessageBuffer.Count = 1) then
        begin
          while (MessageBuffer.Count > 0) do
          begin
            TheMessage := MessageBuffer[0];
            // Werken met the message 
            MessageBuffer.Delete(MessageBuffer.IndexOf(TheMessage));
          end; // While
        end; // If MessageBuffer.Count
      end; // if TheMessage <> ''
    end; // TheMessageHandler
    In theorie werkt alles maar hoe maak je het dan waar, in de praktijk werkt het maar niemand weet waarom.

  6. #6
    Senior Member
    Join Date
    Sep 2001
    Location
    Schoonhoven
    Posts
    276
    Die buffer was een goed idee alleen die buffer had ik al. Er bleek en fout te zitten in de data verwerking waardoor de data een rommel werd. Nu werkt het.

    Bedankt voor het meedenken!
    Vincent

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •