C++ Networking - newbie

Pagina: 1
Acties:
  • 231 views sinds 30-01-2008
  • Reageer

  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 00:53
Hallo,

Als onderdeel van mijn eindwerk moet ik een programma schrijven. Het programma moet bij voorkeur geschreven worden in C++ (heb ik ervaring mee) en C++Builder 5 moet gebruikt worden als ontwikkelomgeving (heb ik totaal geen ervaring mee). Met dat programma moet het mogelijk zijn om te communiceren tussen een PC (win98 & win2000) en een PLC met ethernet-aansluiting. Eerlijk gezegd heb ik nog maar weinig hierover gevonden en ik ben dan ook op zoek naar FAQ's, (on-line) cursussen en vooral voorbeeldprogramma's.
Kan iemand mij hiermee verder helpen? Waar kan ik voorbeeldprogramma's en uitleg vinden over C++ en TCP/IP communicatie?

  • robbertb
  • Registratie: September 2000
  • Niet online

robbertb

winter

(offtopic)
Een PLC met een ethernet-aansluiting? wist niet dat die er ook waren dacht alleen parrallel :)
Zeker vrij duur apparaatje

  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 00:53
Op dinsdag 30 oktober 2001 14:45 schreef robbertb het volgende:
(offtopic)
Een PLC met een ethernet-aansluiting? wist niet dat die er ook waren dacht alleen parrallel :)
Zeker vrij duur apparaatje
Tja, gelukkig moet ik dat niet zelf betalen! De PLC wordt met een "intelligente co-processor" module uitgebreid (10 Base-T/100 Base-TX).

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:46

Creepy

Tactical Espionage Splatterer

Borland C++ Builder heeft wel wat standaard TCP/IP componentjes.. ik weet niet hoe slim die PLC is maar als dat ding TCP/IP aankan.. :)

Echt "low-level" Ehternet pakketjes aanmaken en versturen weet ik niet..

(ow ja.. geen idee of je Delphi kent, maar C++ Builder is Delphi maar dan met C++ i.p.v. Pascal)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • robbertb
  • Registratie: September 2000
  • Niet online

robbertb

winter

ja als hij gewoon een ip adres heeft zou dat wel wat makkelijker zijn :)

  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 00:53
Op dinsdag 30 oktober 2001 15:23 schreef robbertb het volgende:
ja als hij gewoon een ip adres heeft zou dat wel wat makkelijker zijn :)
Waarom dan?
Oh ja, als ik mij niet vergis heeft de PLC een IP-adres hoor. De PLC gedraagt zich als een webserver. Er kunnen zelfs HTML pagina's in opgeslagen worden.
Maar dat van dat IP-adres ben ik nog niet helemaal zeker (zal wel zeker als de PLC een webserver is?). De PLC moet nog aangekocht worden, zie je. (We zijn nog niet zolang bezig met het project..)

  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 00:53
Op dinsdag 30 oktober 2001 15:07 schreef Creepy het volgende:
Borland C++ Builder heeft wel wat standaard TCP/IP componentjes.. ik weet niet hoe slim die PLC is maar als dat ding TCP/IP aankan.. :)

Echt "low-level" Ehternet pakketjes aanmaken en versturen weet ik niet..

(ow ja.. geen idee of je Delphi kent, maar C++ Builder is Delphi maar dan met C++ i.p.v. Pascal)
Neen, ik ben dus echt een newbie! Enkel ervaring met C, C++ (beetje visual) en Java.
Wat precies zijn "low-level" Ethernet pakketjes? En enig idee waar ik ergens een on-line-"learn-C++Builder-in-3-minutes-and-2-seconds"-cursus kan vinden? :)

  • Bigs
  • Registratie: Mei 2000
  • Niet online
Als ie zich als een webserver gedraagt heeft ie wel een IP adres :). Het gaat erom of hij via TCP/IP werkt of via een ander protocol (webservers werken altijd via TCP/IP).
C++ Builder heeft standaard ondersteuning voor TCP/IP, gewoon ff de examples doorkijken dan heb je het zo door (enige kennis van TCP/IP is overigens wel gewenst).

  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 00:53
Ik denk dat ik hier even totaal de mist in ga... Ik heb hier de gegevens van verschillend PLC's even door elkaar gegooid, foutje.
Dat van die HTML-pagina's klopt waarschijnlijk niet. Het is echt moeilijk om informatie te vinden over die ethernet-module omdat die tamelijk recent is.
Op dinsdag 30 oktober 2001 15:23 schreef robbertb het volgende:
ja als hij gewoon een ip adres heeft zou dat wel wat makkelijker zijn :)
Dit begrijp ik niet zo goed, wat bedoelt u daarmee? Die PLC moet toch een IP-adres hebben? Hoe kan de PLC anders weten dat de informatie op het netwerk voor hem bestemd is? Of hoe kunnen we anders informatie uit die PLC halen als ie geen IP-adres heeft? Alle toestelen aangesloten op een ethernet moeten toch een IP(of MAC)-adres hebben?

Hier nog even de gegevens van die ethernet-module:

-------------------
Ethernet-TCP/IP
The intelligent co-processor module provides the PCD (dat is de PLC dus) with access to the Ethernet. For details see Technical Information 26/356 (die ben ik nog aan het zoeken).

Technical data:
Connection: 10 Base-T/100 Base-TX (RJ45)
Speed: 10/100 MBit/s (autosensing)
Protocols and services: TCP/IP or UDP/IP for PG5<=>PCD communciation, PCD<=>PCD multimaster communication and SCADA<=>PCD communication.
-------------------

  • stylee
  • Registratie: December 2000
  • Laatst online: 04-09-2021

stylee

blah zeg ik je


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:31
Op dinsdag 30 oktober 2001 15:33 schreef Laagvliegerke het volgende:

[..]

Waarom dan?
Oh ja, als ik mij niet vergis heeft de PLC een IP-adres hoor. De PLC gedraagt zich als een webserver. Er kunnen zelfs HTML pagina's in opgeslagen worden.
Maar dat van dat IP-adres ben ik nog niet helemaal zeker (zal wel zeker als de PLC een webserver is?). De PLC moet nog aangekocht worden, zie je. (We zijn nog niet zolang bezig met het project..)
Even off-topic. Die PLC is toevallig niet gefabriceerd door ene firma 'Unitronics'?

https://fgheysels.github.io/


  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
Misschien kan je bij de fabrikant van de PLC documentatie en een sdk (Software Development Kit) downloaden.

  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 00:53
Op dinsdag 30 oktober 2001 19:17 schreef whoami het volgende:

[..]

Even off-topic. Die PLC is toevallig niet gefabriceerd door ene firma 'Unitronics'?
Toevallig niet, nee :). Het is een SAIA-PLC. Waarom zou het een Unitronics zijn?

http://www.saia-burgess.com/

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:31
Op dinsdag 30 oktober 2001 19:57 schreef Laagvliegerke het volgende:

[..]

Toevallig niet, nee :). Het is een SAIA-PLC. Waarom zou het een Unitronics zijn?

http://www.saia-burgess.com/
Omdat die PLC's maken die via TCP/IP, dus ook via het web aanstuurbaar zijn.

https://fgheysels.github.io/


  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 00:53
Op dinsdag 30 oktober 2001 18:20 schreef stylee het volgende:
misschien heb je hier wat aan:

http://www.geocities.com/~ugo_varetto/net/inetprog.htm
Bedankt!! Zal ik zeker even bekijken, ziet er interessant uit.

  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 00:53
Op dinsdag 30 oktober 2001 20:00 schreef whoami het volgende:

[..]

Omdat die PLC's maken die via TCP/IP, dus ook via het web aanstuurbaar zijn.
Tja, tegenwoordig is dat een rage hé. Alles moet wel ergens een ethernet-aansluiting hebben. Ook Siemens heeft zoiets en waarschijnlijk ook nog andere fabrikanten.

  • BezurK
  • Registratie: Juni 2001
  • Laatst online: 14-06 09:12
http://www.ecst.csuchico.edu/~beej/guide/net/

Een hele goeie uitleg over de werking van TCP/UDP, en hoe je het kan toepassen in C/C++ programma's

Veel succes met je project!

Rookworst zonder R is ook worst.


  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 00:53
Op dinsdag 30 oktober 2001 20:15 schreef BezurK het volgende:
http://www.ecst.csuchico.edu/~beej/guide/net/

Een hele goeie uitleg over de werking van TCP/UDP, en hoe je het kan toepassen in C/C++ programma's

Veel succes met je project!
Ook bedankt, ga ik ook zeker lezen! :)
[fluistermode]
Djeezes, wanneer ga ik dat allemaal doen? Ik heb momenteel vakantie hoor!
[/fluistermode]
Ik zou jullie natuurlijk wel graag laten weten hoe mijn eindwerk evolueert, maar wat zijn jullie eigenlijk met mijn stukje code? ;) Ik vraag mij af of ik dat eigenlijk wel zou mogen publiceren aangezien ik dat voor een bedrijf doe en het de bedoeling is dat de code geïmplementeerd wordt in hun eigen software (weliswaar herwerkt, maar toch).

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op dinsdag 30 oktober 2001 14:38 schreef Laagvliegerke het volgende:
<...knip...>
Wat een eindopdracht... je hebt er hopelijk maar 1 a 2 uur voor gekregen? ;)

Je PLC ondersteunt Ethernet, TCP/IP en kan als webserver fungeren: ergo hij heeft een IP-adres zodra ie op een netwerk zit. Vervolgens hoef je in de Windows-applicatie enkel een TClientSocket aan te maken en die te connecten naar het IP-adres van de PLC, waarschijnlijk op poort 80. Als het echt om HTTP-serving gaat kun je zelfs het meegeleverde THTTP component ervoor gebruiken. Even in Borland de helpfiles naslaan op die 2 componenten en je bent er.

En klaar is klara! :P

Professionele website nodig?


  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 00:53
Op dinsdag 30 oktober 2001 21:05 schreef curry684 het volgende:
Wat een eindopdracht... je hebt er hopelijk maar 1 a 2 uur voor gekregen? ;)
Tja, voor mij is dat compleet iets nieuws. En dat programma is een onderdeel van mijn eindwerk. De PLC zou eigenlijk moeten verbonden worden aan een drukpers waardoor het mogelijk moet zijn om allerlei gegevens van deze machine vanop afstand op te halen.
En eerlijk gezegd, van uw uitleg heb ik niet alles begrepen :) maar dat zal nog wel komen zeker? Nu ja, hopelijk is het inderdaad niet zo moeilijk.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op dinsdag 30 oktober 2001 21:16 schreef Laagvliegerke het volgende:
Tja, voor mij is dat compleet iets nieuws.
Er stond een grote knipoog bij hoor... :P
En eerlijk gezegd, van uw uitleg heb ik niet alles begrepen :) maar dat zal nog wel komen zeker? Nu ja, hopelijk is het inderdaad niet zo moeilijk.
Tja er is weinig aan te snappen. Masjientje A praat met masjientje B. Ethernet zorgt ervoor *dat* ze uberhaupt met elkaar kunnen praten op het laagste niveau. TCP/IP (Transfer Connect Protocol/Internet Protocol) ligt hier bovenop en zorgt ervoor dat ze via een 'adres' (x.x.x.x met 0 <= x <= 256) elkaar kunnen herkennen en dat er foutcorrectie/herkenning plaatsvindt. Op ieder adres kun je een stapel poorten openen, zeg maar huisnummers binnen de straat. Een HTTP-server woont altijd op poort 80, een SMTP-server op poort 25 enzovoorts. Deze 2 voorbeelden hebben ieder een strak gespecificeerd protocol om met elkaar te praten, maar je kunt ook over een willekeurige poort 'botte data' gaan pompen.

A zet dus een poort open waar B aan connect, en dan moet je een protocolletje afspreken waardoor A herkent wat B stuurt. Dit kan binair of ascii zijn, jouw feestje. Zie het bijvoorbeeld als wat een SMTP-server doet (ongeveer):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(A connect aan B op poort 25)
B: Welcome to SMTP-server blahdiblah.blah.com
A: helo chello.nl
B: Welcome user 123.45.67.89 on chello.nl
A: mail from:piet@chello.nl
B: Sender set to: piet@chello.nl
A: rcpt to:sjaak@chello.nl
B: Recipient set to: sjaak@chello.nl
A: data
Hoi sjaak
.
B: Mail sent
A: exit
B: Goodbye.
(B sluit connectie)

Dit is een voorbeeld van een erg simpel protocolletje (het SIMPLE Mail Transfer Protocol oftewel SMTP :Y) ), en zoiets zal jij ook moeten ontwikkelen.

Zo al duidelijker? (8>

Professionele website nodig?


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 23:59
Pfff....er zijn mensen hier die volgens mij teveel SQL scripten. >:)

- Bijna iedere PLC fabrikant heeft sinds een jaar of 3 een uitbreidingsmodule of een processor met ethernet+tcp/ip protocol.
- Bijna altijd kunnen deze modulen met sockets aangesproken worden.
- Het kan zijn dat er op tcp/ip nog een protocol is gezet voor uniforme (voor zover dat mogelijk is) access. Voorbeeld hiervan is ModBus op TcpIp. (Niet hetzelfde formaat als normaal Modbus)
- Sommige komen met webserver functionaliteit. (Nuttig?)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 23:59
Op dinsdag 30 oktober 2001 21:16 schreef Laagvliegerke het volgende:

[..]
De PLC zou eigenlijk moeten verbonden worden aan een drukpers waardoor het mogelijk moet zijn om allerlei gegevens van deze machine vanop afstand op te halen.
Jij zoekt geen webserver functionaliteit. Waarschijnlijk komt er een SCADA boven of een zelf geschreven applicatie? Je moet dan alleen zorgen dat je via udp of tcp een link legt met de ethernet module.

Misschien dat deze ethernet module al wat standaard protocollen aan boord heeft? Op dat moment is het een goed idee om aan de client kant (de PC) dit protocol te implementeren, anders moet je zowel in de PLC als in de PC een protocol bakken, zoals curry al aangaf.

succ6 :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Knorrend_varken
  • Registratie: Juni 2000
  • Laatst online: 16-09 19:43
Bestaat er niet zoiets als OPC (OLE for Process control?) voor communcatie met PLC's? Volgens mij zijn er OPC servers voor Melsec, Simatic, Modbus etc. te krijgen.

  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 00:53
Op dinsdag 30 oktober 2001 22:01 schreef curry684 het volgende:
Zo al duidelijker? (8>
Ja, dat begrijp ik wel hoor. Ik weet ongeveer wel hoe dat allemaal in elkaar zit (verschillende lagen en zo, zie OSI-model). Dat is de theorie, mijn probleem is de praktische kant, hoe kan ik dat in een programma stoppen? Maar ik denk dat wij hier een heleboel dingen door elkaar aan het halen zijn. Ik wil dus gewoon weten hoe ik een verbinding open (IP-adres + poort, socket dus) en deze terug kan sluiten en hoe ik gegevens kan versturen en ophalen. En daar zou ik een on-line cursus en voorbeelden van willen...
Het is natuurlijk niet de bedoeling dat jullie mijn programma maken, ik wil gewoon in de juiste richting gestuurd worden.
stylee en BezurK hebben mij al iets bezorgd dat ik zeker zal bekijken (nog geen tijd gehad, moet nog een heleboel veel te gemakkelijke proggies maken voor school :r)
En ik wil ook nog even iedereen bedanken mij hier probeert te helpen, echt bedankt, nooit gedacht dat hier zoveel reactie zou op komen! THANKS!!! :) :)

  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 00:53
Op woensdag 31 oktober 2001 09:19 schreef farlane het volgende:
Jij zoekt geen webserver functionaliteit. Waarschijnlijk komt er een SCADA boven of een zelf geschreven applicatie? Je moet dan alleen zorgen dat je via udp of tcp een link legt met de ethernet module.
Die webserver heb ik niet echt nodig neen. Is wel leuk natuurlijk. Maar wat is een SCADA eigenlijk? Dat heb ik al zien staan in de heel beknopte "technical data" van die module. Maar er zal inderdaad een zelfgeschreven applicatie moeten bovenokomen. En de module ondersteund UDP en TCP maar de link naar de ethernet-module moet bij voorkeur gebeuren met TCP (betrouwbaarder).
Op woensdag 31 oktober 2001 09:19 schreef farlane het volgende:
Misschien dat deze ethernet module al wat standaard protocollen aan boord heeft?
Ja, dat is zo, s-bus-ethernet.
Op woensdag 31 oktober 2001 09:19 schreef farlane het volgende:
Op dat moment is het een goed idee om aan de client kant (de PC) dit protocol te implementeren, anders moet je zowel in de PLC als in de PC een protocol bakken, zoals curry al aangaf.
Het protocol moet dus inderdaad geïmplementeerd worden in mijn proggie, anders kan ik niet communiceren met de PLC ;) Het is dus de bedoeling dat één of meerdere van die PLC's aan een netwerk gekoppeld worden en het moet dus mogelijk zijn om vanop elke PC de status van de PLC te bekijken en eventueel ook om de PLC te programmeren.

  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 00:53
Op woensdag 31 oktober 2001 09:35 schreef Knorrend_varken het volgende:
Bestaat er niet zoiets als OPC (OLE for Process control?) voor communcatie met PLC's? Volgens mij zijn er OPC servers voor Melsec, Simatic, Modbus etc. te krijgen.
Daar heb ik geen idee van. OLE ken ik wel, maar kan dit gebruikt worden over netwerken?

  • Knorrend_varken
  • Registratie: Juni 2000
  • Laatst online: 16-09 19:43
Op woensdag 31 oktober 2001 10:20 schreef Laagvliegerke het volgende:

[..]

Daar heb ik geen idee van. OLE ken ik wel, maar kan dit gebruikt worden over netwerken?
Bijvoorbeeld op

http://www.opcfoundation.org/05_products/saia1.htm

staat iets over communicatie via rs232.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:46

Creepy

Tactical Espionage Splatterer

Op dinsdag 30 oktober 2001 20:09 schreef Laagvliegerke het volgende:

[..]

Tja, tegenwoordig is dat een rage hé. Alles moet wel ergens een ethernet-aansluiting hebben. Ook Siemens heeft zoiets en waarschijnlijk ook nog andere fabrikanten.
Ethernet is niet hetzelfde als TCP/IP networking hoor!
Neem een internet connectie via een modem... das WEL TCP/IP maar zeker geen Ethernet!! Dus je bedoelt TCP/IP? Daar zijn volgens mij standaard componenten voor in C++ Builder. Kan je vrij makkelijk de data in een TCP pakket opgeven, versturen en ontvangen..

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 23:59
Op woensdag 31 oktober 2001 10:18 schreef Laagvliegerke het volgende:

Maar wat is een SCADA eigenlijk? Dat heb ik al zien staan in de heel beknopte "technical data" van die module. Maar er zal inderdaad een zelfgeschreven applicatie moeten bovenokomen.
Een SCADA is een applicatie om een proces te bewaken en bedienen (Supervisiory Control And Data Aquisition). Het is eigenlijk wat jij wilt maken, maar dan vanuit een standaard pakket. (Vergelijk het met Visual Basic voor besturingen :))

Het vereenvoudigde idee is over het algemeen dat je tags definieert die overeenstemmen met punten (bijvoorbeeld een register) in je PLC. Je kunt dan bijvoorbeeld een click op een knop hangen aan het hoogzetten van een bitje in de PLC. (Waarop je vervolgens je drukpers start oid)
Bij het SCADA worden dan bijvoorbeeld tcp/ip drivers geleverd voor Siemens PLC's.
Ja, dat is zo, s-bus-ethernet.
Hmmm...ken ik niet, maar klinkt als iets dat op een lager niveau ligt dan tcp/ip. In dat geval heb je er niet zoveel aan.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op woensdag 31 oktober 2001 10:48 schreef Creepy het volgende:
Dus je bedoelt TCP/IP? Daar zijn volgens mij standaard componenten voor in C++ Builder. Kan je vrij makkelijk de data in een TCP pakket opgeven, versturen en ontvangen..
Dat zei ik gisteravond inderdaad ook al: TClientSocket en TServerSocket. Werken als een tiet.

Professionele website nodig?


  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 00:53
Op woensdag 31 oktober 2001 10:37 schreef Knorrend_varken het volgende:
http://www.opcfoundation.org/05_products/saia1.htm

staat iets over communicatie via rs232.
RS-232 (422,485,...) heb ik niet nodig. Het is dus echt de bedoeling dat de PLC aan een netwerk gekoppeld wordt. Die S-Bus is SAIA-BUS, een protocol van SAIA. Toch bedankt voor de URL, ga ik ook eens bekijken.

  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 00:53
Op woensdag 31 oktober 2001 11:22 schreef curry684 het volgende:
Werken als een tiet.
:) :) Als dat zo goed werkt, dan ga ik dat maar even proberen hé!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 23:59
OPC drivers worden steeds vaker gemaakt omdat er (uiteindelijk) maar 1 driver geschreven hoeft te worden. Je hebt dan een standaard interface waar elke OPC client (bv het SCADA) gebruik van kan maken.

Overigens is het zo dat OPC onafhankelijk is van het medium (232,485,ethernet) waarover gecommuniceerd wordt. Vraag is natuurlijk of er OPC server is zijn voor een SAIA Ethernet module.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1