Hoe te includen in C++ [NModbus]
Hoe te includen in C++ [NModbus]
Ik heb op internet een mooie libary gevonden om een modbus master op een computer te realiseren. http://www.nmodbus.com
Nu het grote probleem. Ik weet niet hoe ik dit moet includen in mijn C++ project. Wie kan mij vertellen hoe ik dit gebruik wat op http://www.nmodbus.com ?
Heel erg bedankt die deze (waarschijnlijk makkelijk & basic) vraag kan beantwoorden!
Ohja: Ik gebruik nu Visual Studio of kan ik beter een ander programma gebruiken dat dat makkelijker maakt?
Nu het grote probleem. Ik weet niet hoe ik dit moet includen in mijn C++ project. Wie kan mij vertellen hoe ik dit gebruik wat op http://www.nmodbus.com ?
Heel erg bedankt die deze (waarschijnlijk makkelijk & basic) vraag kan beantwoorden!
Ohja: Ik gebruik nu Visual Studio of kan ik beter een ander programma gebruiken dat dat makkelijker maakt?
[url=http://www.heinoken.nl/proxy/stats/index.html]Team Heinoken[/url] Flusht naar u toe deze zomer!
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Ah! Ik zie het probleem!
Maar wat kan ik er aandoen? Een andere programmeer omgeving of zie ik het nog verkeerd..?
Ik kan geen andere (gratis) libary o.i.d. vinden...
Maar wat kan ik er aandoen? Een andere programmeer omgeving of zie ik het nog verkeerd..?
Ik kan geen andere (gratis) libary o.i.d. vinden...
[url=http://www.heinoken.nl/proxy/stats/index.html]Team Heinoken[/url] Flusht naar u toe deze zomer!
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
C++ en C# zijn twee verschillende programeertalen. Als je al een programma hebt gemaakt in C++ en je wilt dat uitbreiden met deze modbus module, dan zul je naar een andere moeten gaan zoeken.
Als je nog (helemaal) moet beginnen, dan zou je even moeten kijken naar je Visual Studio versie of die C# ondersteund, en dat als uitgangspunt nemen.
Mag ik vragen wat je gaat maken? /me heeft ook redelijk veel gedaan met Modbus, maar dan met de TCP/IP versie
Als je nog (helemaal) moet beginnen, dan zou je even moeten kijken naar je Visual Studio versie of die C# ondersteund, en dat als uitgangspunt nemen.
Mag ik vragen wat je gaat maken? /me heeft ook redelijk veel gedaan met Modbus, maar dan met de TCP/IP versie
Ik wil met Modbus RTU een PLCtje uitlezen.. In dit PLCtje heb ik een urentellertje geschreven.. Nu wil ik dus simpel en snel een exe schrijven die een aantal Holding registers uitleest uit het PLC..
Ofwel via de comport van de PLC via een converter naar RS485 wat gegevens uitlezen.. Wat ik zag wat op http://www.nmodbus.com staat lijkt simpel en mooi om te gebruiken..
Ik heb Visual Studio.Net 2003 geinstalleerd staan dus volgens mij moet het dan lukken of niet? Ik moet met het PC programmatje nog helemaal beginnen dus ik kan alle kanten nog op
(Maar ik dacht dus op de site van NModbus te hebben gezien dat eht ook met C++ kon werken.. Maar het maakt me niks uit nu ga ik het met C# proberen!)
Ofwel via de comport van de PLC via een converter naar RS485 wat gegevens uitlezen.. Wat ik zag wat op http://www.nmodbus.com staat lijkt simpel en mooi om te gebruiken..
Ik heb Visual Studio.Net 2003 geinstalleerd staan dus volgens mij moet het dan lukken of niet? Ik moet met het PC programmatje nog helemaal beginnen dus ik kan alle kanten nog op
(Maar ik dacht dus op de site van NModbus te hebben gezien dat eht ook met C++ kon werken.. Maar het maakt me niks uit nu ga ik het met C# proberen!)
[url=http://www.heinoken.nl/proxy/stats/index.html]Team Heinoken[/url] Flusht naar u toe deze zomer!
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Hmm ik krijg het er ook niet in in C# :S
Hier iemand een idee wat ik verkeer kan doen?
[IMG:1280:1024]http://i14.tinypic.com/6b3fjnm.jpg[/img]
Hier iemand een idee wat ik verkeer kan doen?
[IMG:1280:1024]http://i14.tinypic.com/6b3fjnm.jpg[/img]
[url=http://www.heinoken.nl/proxy/stats/index.html]Team Heinoken[/url] Flusht naar u toe deze zomer!
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Nope dat is het niet.. Op een schip hebben ze een onderhoudsprogramma.. Dat onderhoudsprogramma moet weten hoeveel uur de hoofdmotor heeft gedraaid en hoeveel uur de 3 generator sets hebben gedraaid om aan te geven wanneer er standaard onderhoud nodig is.
Vandaar dat ik daar lokaal een plctje heb geplaatst (Twido van Schneider, klein onmogelijk #$%^& ding) en ik die wil uitlezen met Modbus.
Ik heb de source proberen in te laden maar de .dll bestanden die daar bij zitten krijg ik precies de zelfde fouten...
Vandaar dat ik daar lokaal een plctje heb geplaatst (Twido van Schneider, klein onmogelijk #$%^& ding) en ik die wil uitlezen met Modbus.
Ik heb de source proberen in te laden maar de .dll bestanden die daar bij zitten krijg ik precies de zelfde fouten...
[url=http://www.heinoken.nl/proxy/stats/index.html]Team Heinoken[/url] Flusht naar u toe deze zomer!
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Ik ga het nog is proberen om de hele boel er in te krijgen van NModbus.. Het klopt ik heb alleen functiecode 3 nodig voor deze toepassing.
Maar voor het lekkere hobbyen hoop ik toch dat ik alles erin kan krijgen!
Heb jij nog tips hoe ik het er in kan krijgen?
Maar voor het lekkere hobbyen hoop ik toch dat ik alles erin kan krijgen!
Heb jij nog tips hoe ik het er in kan krijgen?
[url=http://www.heinoken.nl/proxy/stats/index.html]Team Heinoken[/url] Flusht naar u toe deze zomer!
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Het is mij onderhand gelukt NModbus te includen omdat ik ook geen goede vervanger kon vinden...
Het was een kwestie van een C++ CLR project aanmaken en dan de regel #using "Modbus.dll" en natuurlijk Modbus.dll kopieren naar de project directory...
Maar helaas schieten mijn C++ skills weer te kort om er wat fatsoenlijks van te maken. Kan iemand is kijken wat ik fout doe?
Het was een kwestie van een C++ CLR project aanmaken en dan de regel #using "Modbus.dll" en natuurlijk Modbus.dll kopieren naar de project directory...
Maar helaas schieten mijn C++ skills weer te kort om er wat fatsoenlijks van te maken. Kan iemand is kijken wat ik fout doe?
Code: Select all
#include "stdafx.h"
#include <iostream>
#include <string>
#using "Modbus.dll"
#using "log4net.dll"
using namespace std;
using namespace System;
using namespace System::Diagnostics;
using namespace System::IO::Ports;
using namespace System::Threading;
using namespace Modbus;
using namespace Modbus::Device;
public ref class MyModbusMasterClass : public ModbusMaster {
public:
void MyModbusMaster() {
SerialPort^ port;
port = gcnew SerialPort("COM2");
port->BaudRate = 9600;
port->DataBits = 8;
port->StopBits = StopBits::One;
port->Parity = Parity::Even;
port->Open();
MyModbusMasterClass^ CreateRtu(port);
}
};
void main()
{
cout << "Reading out data from Main Engine & Generator sets...";
MyModbusMasterClass master;
master.MyModbusMaster();
// SerialPort^ port;
// port = gcnew SerialPort("COM2");
// ModbusSerialMaster^ CreateRtu (SerialPort^ port);
unsigned char slaveID = 10;
unsigned short startAddress = 10;
unsigned short registers = 5;
master.ReadHoldingRegisters(slaveID, startAddress, registers);
//read five registers
//master->ReadHoldingRegisters(slaveID, startAddress, registers);
cin.get();
}
[url=http://www.heinoken.nl/proxy/stats/index.html]Team Heinoken[/url] Flusht naar u toe deze zomer!
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Nou het probleem is dat ik het niet voor elkaar krijg iets uit te lezen.. Ik krijg het spul dus goed geinclude maar ik krijg het niet voor elkaar om de goede functies op de goede manier aan te roepen...
Het is niet zozeer dat ik nu hele vreemde foutmeldingen krijg mar ik weet niet meer hoe ik verder moet :S
Het is niet zozeer dat ik nu hele vreemde foutmeldingen krijg mar ik weet niet meer hoe ik verder moet :S
[url=http://www.heinoken.nl/proxy/stats/index.html]Team Heinoken[/url] Flusht naar u toe deze zomer!
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Heb je geen voorbeeld kunnen vinden op internet? Vaak zitten bij dit soort modules ook wel voorbeelden hoe je ze moet gebruiken.
Maar als ik het zo even bekijk, geef je nog nergens aan dat hij verbinding moet maken (dus dat hij de seriele poort moet openen etc..)
[edit] Hier staan een hoop voorbeelden:
http://www.nmodbus.com/Samples.aspx
[/edit]
Maar als ik het zo even bekijk, geef je nog nergens aan dat hij verbinding moet maken (dus dat hij de seriele poort moet openen etc..)
[edit] Hier staan een hoop voorbeelden:
http://www.nmodbus.com/Samples.aspx
[/edit]
Hmm, nou ik heb wel een stukje erin zitten dat hij de poort moet openen/aanroepen alleen lukt het niet met de CreatRTU functie..madman wrote:Maar als ik het zo even bekijk, geef je nog nergens aan dat hij verbinding moet maken (dus dat hij de seriele poort moet openen etc..)
Ik moet zeggen dat dit de eerste keer is dat ik een dll file include en ik moet zeggen dat ik de structuur nog niet helemaal door heb. Hij jij hier wel een helder beeld van..?
Nou deze voorbeelden zijn nog niet zo makkelijk als je zou denken. Het probleem is dat de voorbeelden niet compleet zijn en het dus maar een 'klein' stukje code is en deze voorbeelden zijn niet C++ gebaseerd...madman wrote:Heb je geen voorbeeld kunnen vinden op internet? Vaak zitten bij dit soort modules ook wel voorbeelden hoe je ze moet gebruiken.
[edit] Hier staan een hoop voorbeelden:
http://www.nmodbus.com/Samples.aspx
[/edit]
[url=http://www.heinoken.nl/proxy/stats/index.html]Team Heinoken[/url] Flusht naar u toe deze zomer!
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
In feite is een DLL niets anders dan een gecompileerde C++ file. Deze stelt je functies etc ter beschikking die je weer kan gebruiken in je eigen programma.
Helaas is de laatste keer dat ik wat in C++ gedaan heb al weer een paar jaartjes terug, dus hoe het precies moet weet ik niet. Maar je kan toch gewoon het C# vertalen naar C++?
In pseudo code staat hier:
Nu aan jou de eer om dit te vertalen naar C++
Helaas is de laatste keer dat ik wat in C++ gedaan heb al weer een paar jaartjes terug, dus hoe het precies moet weet ik niet. Maar je kan toch gewoon het C# vertalen naar C++?
Code: Select all
using (SerialPort port = new SerialPort("COM1"))
{
// configure serial port
port.BaudRate = 9600;
port.DataBits = 8;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.Open();
// create modbus master
IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);
byte slaveID = 1;
ushort startAddress = 100;
ushort[] registers = new ushort[] { 1, 2, 3 };
// write three registers
master.WriteMultipleRegisters(slaveID, startAddress, registers);
}
Code: Select all
Maak een nieuwe seriele poort "port" aan
En als dat is gelukt, ga dan verder:
Stel de nodige variabelen van "port" in (dus BaudRate, DataBits, Parity en StopBits)
Open seriele poort "port"
Maak een nieuwe ModbusMaster aan door CreateRTU aan te roepen met de geopende seriele poort.
Gebruik de master om registers te schrijven
Het aanroepen van de CreateRTU functie is dus eigenlijk het 'enige' wat nog niet goed gaat..madman wrote:Maak een nieuwe ModbusMaster aan door CreateRTU aan te roepen met de geopende seriele poort.
Hier de code die ik had zoals jij het hierboven had beschreven:
Code: Select all
#include "stdafx.h"
#include <iostream>
#include <string>
#using "Modbus.dll"
#using "log4net.dll"
using namespace std;
using namespace System;
using namespace System::Diagnostics;
using namespace System::IO::Ports;
using namespace System::Threading;
using namespace Modbus;
using namespace Modbus::Device;
void main()
{
cout << "Reading out data from Main Engine & Generator sets...";
SerialPort port("COM2");
// configure serial port
port.BaudRate = 9600;
port.DataBits = 8;
port.Parity = Parity::Even;
port.StopBits = StopBits::One;
port.Open();
// create modbus master ----!! Het probleempunt!
IModbusSerialMaster^ master;
//IModbusSerialMaster^ CreateRtu(port);
unsigned char slaveID = 10;
unsigned short startAddress = 100;
unsigned short registers = 5;
//read five registers
master.ReadHoldingRegisters(slaveID, startAddress, registers);
cin.get();
}
[url=http://www.heinoken.nl/proxy/stats/index.html]Team Heinoken[/url] Flusht naar u toe deze zomer!
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Misschien dat het voorbeeld op deze oostblok site je wat kan helpen:
http://programujte.com/forum.php?akce=p ... svc++--net
http://programujte.com/forum.php?akce=p ... svc++--net
Hmm.. Mooi gevonden maar helpt niet echt heb nog even geprobeerd wat zij daar anders deden maar dat is ook niks volgens mij..madman wrote:Misschien dat het voorbeeld op deze oostblok site je wat kan helpen:
http://programujte.com/forum.php?akce=p ... svc++--net
Volgens mij is het hun daar niet gelukt.. Maar kan het ook niet helemaal volgen...
[url=http://www.heinoken.nl/proxy/stats/index.html]Team Heinoken[/url] Flusht naar u toe deze zomer!
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Alleen dat pakt hij helaas om 1 of andere vage reden niet.. Ik heb geen idee waar het aan kan liggen..venomous wrote:Wat is nu eigenlijk het probleem? Nou is mijn c++ skill ook weer erg ver weg, maar je definitie van master moet gewoon goed zijn.
bv: IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port);
Gelukkig kan ik het even aan de kant leggen ik heb het opgelost door het even in C# uit te voeren en hoe ik het wou hebben werkt nu in iedergeval. Maar omdat ik zelf meer met Modbus werk wil ik de hele handel nog wel werkend krijgen eigenlijk dus waarschijnlijk dat ik het over een paar dagen weer oppak
[url=http://www.heinoken.nl/proxy/stats/index.html]Team Heinoken[/url] Flusht naar u toe deze zomer!
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..
Kijk een keer op [url=http://www.heinoken.nl]Heinoken[/url] voor uitgaansfoto's & het bruisende leven rond Heino..