Hallo,
ich möchte einen kostengünstigen Datenlogger aufbauen, der zyklisch
Meßwerte erfasst und diese als Datensätze per LAN in eine
MS-SQL-Datenbank schreibt.
Lösungen mit einer S7-300 o.ä.sind viel zu teuer.
Eigentlich keine schlimme Sache für einen Mikrocontroller wenn nicht LAN
und SQL wäre.
Am liebsten wäre mir ein Controller mit LAN-Schnittstelle und BASIC.
Gibt es das überhaupt oder hat jemand schon mal so was ähnliches
realisiert?
Mit Access bzw. VB und SQL-Server habe ich Erfahrungen, aber nicht mit
Mikrocontroller und SQL-Server.
Micha
Ist das MS-SQL Protokoll überhaupt offengelegt? Wenn nicht kannst du mal
damit anfangen dieses Protokoll zu analysieren. Denn wenn der µC direkt
mit dem SQL-Server reden soll ist das ja Voraussetzung.
Es wäre naheliegenderweise einfacher, wenn der µC das nicht tun muss,
sondern irgendwas von sich gibt das ein PC dann mit einem eigenen Dienst
in MS-SQL übersetzt. Wobei dieser PC auch der SQL-Server sein kann, an
den der µC per LAN seine Daten sendet. Aber eben auf seine Art, dort
übersetzt, nicht gleich als MS-SQL-Protokoll mit kryptografischer
Authentifizierung.
Du kannst dich über das TDS-Protokoll informieren, es gibt eine Java
jdbc-Schnittstelle im Quellcode.
Der MS-SQL-Server verarbeitet eigentlich Klartext - ungefähr.
Du kannst die Kumpels von SELECT schicken:
INSERT INTO mydata fields(vorname,name,telefon) values
('Bill','Gates','0800-252627');
Hi,
ich weiß nicht, ob das Protokoll offengelegt ist.
Ansonsten wäre dein Vorschlag eine Möglichkeit.
Ich denke mal, Du willst RS232-Daten senden und diese mit eine
virtuellen COM-Port empfangen und dann in die Datenbank schreiben.
Allerdings komme ich an den SQL-Server nicht ran.
Da müsste ich noch einen PC zwischenschalten, der ständig läuft und die
Daten weiterverarbeitet.
Aber das wollte ich eigentlich vermeiden.
Gibt es denn einen Mikrokontroller mit LAN-Schnittstelle oder gerht das
nur über den (teuren) Xport.
Ich denke dem µC das SQL-Protokoll beizubringen nicht so einfach, wenn
nicht sogar unmöglich. Es ist halt nicht bloss ein Text-Protokoll wie
von Jorge geschrieben, da gehört schon ein wenig mehr dazu. Ich würde
auch empfehlen das der µC mit einen Programm über eine Recht einfachen
TCP/UDP Protokoll unterhält und das Programm die Verbindung zum
SQL-Server herstellt.
Selbst die Anmeldung könnte schon schwer werden, der SQL-Server
überträgt das Passwort nicht im Klartext.
Micha wrote:
> Gibt es denn einen Mikrokontroller mit LAN-Schnittstelle
Ja, gibt es. Aber das ist der einfachere Teil. Ob LAN drin oder
LAN-Controller dran oder Xport, das ist sekundär. Du solltest zuerst die
SQL-Frage angehen, denn damit steht und fällt alles.
Denn eines gibt es wahrscheinlich nicht: Einen fertigen Controller mit
Basic drauf der von bereits fix und fertig mit dem SQL-Server in dessen
Sprache spricht. Und der natürlich nichts kosten darf (wo dir doch schon
ein Xport prohibitiv teuer erscheint).
Es sei denn du verwendest einen Miniatur-PC mit einem VIA-Zwergboard. Da
ist zwar die Hardware etwas teurer, und der Strom leider auch, aber
dafür musst du dann nicht erst noch Monate Arbeit reinstecken um mit dem
SQL-Server zu reden.
Andreas:
Ja Du sagst es.... die Alternative wäre dann ein Artigo o.ä.
Zumindest ist das billiger als S7-300- basierte Lösungen.
Obwohl es ja eigentlich kein so ausgefallenes Problem ist, Daten aus der
Umwelt aufzunehmen und an eine Datenbank zu senden.
Da ich zur Zeit erst mal so checke was überhaupt möglich wäre, dachte
ich, dass auch µC zwischenzeitlich sowas können. Aber dem scheint ja
nicht so zu sein...
Trotzdem danke für eure Antworten.
Micha
Möglicherweise kann Linux mit SQL-Server reden. In dem Fall kommen
Microcontroller-Linux-Lösungen in Betracht. Sind aber neu auch nicht
viel billiger als ein Zwerg-PC, es sei denn du willst davon 10000 Stück
bauen.
Billig gibt's die allerdings in Form von Routern. Alte Fritz-Box
umwidmen, oder ähnliche Kisten. Aber wohl nicht mit Basic, das ist im
Linux-Umfeld eher selten anzutreffen.
Es sollen dann schon mehrere gebaut werden, die ihre Daten alle an einen
SQL-Server senden.
Fritz-Box usw. scheiden da aus.
Ich dachte hardwareseitig eher so an Stromversorgung, µC, RJ45-Buchse,
paar Optokoppler und gut.
Da bist du dann in der Dimension Grashopper (siehe
http://shop.embedded-projects.net) oder ATNGW100 oder Fox Board
(http://elmicro.com/de/foxboard.html). Davon gibt's in allen Farben und
Formen. Meist >100€, Atmel drückt aber beim AVR32 grad etwas auf den
Preis um in den Markt zu kommen.
Aber auch hier: Erst mal checken ob sich damit auf einfache Art ein
SQL-Server ansprechend lässt. Lässt sich erstmal mit PC Linux testen.
@Micha
Was spricht dann dageben auf dem Server wo der SQL-Server läuft ein
kleinen Dienst zu starten der die Umsetzung das Protokolls macht? Warum
muss es dann unbedingt auf dem µC sein? Hätte sogar den Vorteil das es
über ODBC geht und man danach MySQL, PostSQL, Oracle, Firefird, DB2
einstetzen könnte ohne etwas man µC oder an den Dienst zu ändern -
ausser dem Connectionstring.
@Andreas Kaiser
Oh hatte überlesen.
Aber wenn er nicht an den SQL-Server rankommt, kann er doch einfach ein
msi packet den Admin geben - muss ja nicht alles selber machen.
Ich habe nur Zugangsdaten und kann mit verschiedenen Clients (Access,
VB2005) auf den Server zugreifen.
Nun dachte ich dass auch ein Mikrokontroller (mit der entsprechenden
Software) ein Client sein kann.
Eventuell mal frage ob auf dem SQL-Server auch ein Webserver Iss oder
ähnliches läuft - oder auf einem anderem Rechner.
Wenn auf dem SQL-Server ein IIS läuft, einfach ein ASP seite einrichten
welche die Daten in den SQL-Server einträgt.
Der µC greift dann nur auf den Webseite zu und übergibt die paramete
alle im request.
http://sqlserver/import.asp?wert1=x&wert2=y
Das http im µC sollte kein Problem sein, die ASP kann ja als Quellcode
vorliegen, besteht eh bloss aus ein paar zeilen damit kann der Admin
auch die Sicherheit prüfen.
Das Ganze würde auch mit Apache und PHP/Perl gehen.
>Eher man sowas implementiert, würde ich irgendwo einen zusätzlichen>Rechner hinstellen, der die Daten der Datenlogger entgegennimmt und dann>passend zum Server schickt.
Sowas habe ich mir auch vorgestellt. Es gibt doch TCP/IP für AVR, damit
kann man eine Client/Server Schnittstelle z.B. über HTTP mit GET machen.
Die Implementierung des TDS-Protokolls in "C" auf dem Mikrocontroller
wird wohl hauptsächlich an der Codegrösse scheitern, es sei denn man
nimmt eine Nummer grösser (AVR32 oder ARM).
Man sollte es transaktional anlegen - kein Mehraufwand. Die
Authentifizierung ist natürlich an die entsprechenden bekannten
Algorithmen gebunden oder man gibt alles auf dem SQL-Server frei.
Es muss auch kein MS-SQL-Server sein (mittlerweile kostenfrei bis ein
paar GB Datenvolumen), da tuts auch PostgreSQL oder MySQL, die sind
nicht schlecht.
TCP muss sein, mit UDP würde ich gar nix machen dies ist nicht
gesichert.
Und doch, ausser vielleicht bei der Authentifizierung ein wenig geht
viel im Klartext.