String-trenner Funktion

Diese Funktionen musst ich mal während meiner LAP arbeit machen, findet selber raus wozu sie gut sind… 😉

char <em>strtrenner(char </em>string, char trennzeichen, int element)
//Gibt den n'ten teil eines strings zurück den man mit dem Trennzeichen unterteilt hat,
//wobei n = element.
//Beispiel:  stringtrenner("123:456:789", ':', 2)  =   "456"
//Wenn das Attribut element eine höhere Zahl erhält als der String Elemente besitzt wird das letzte Element
//zurückgegeben.
{
	static char returnstring [50];
	unsigned int  i_count;
	int  i_elementcount;
	int  i_endstrpos;
	int  i_startstrpos;
	i_startstrpos = 0;
	i_elementcount = 0;
	for(i_count = 0; (i_count <= strlen(string)) && (element != i_elementcount); i_count++)
	{
		if((string[i_count] == trennzeichen) || (string[i_count] == 'n'))
		{
			i_elementcount++;
			if(i_elementcount < element)
			{
				i_startstrpos = i_count+1;
			}
		}
	}
	i_endstrpos = i_count-1;
	strncpy(returnstring, &string[i_startstrpos], i_endstrpos - i_startstrpos);
	returnstring[i_endstrpos-i_startstrpos] = '';
	return returnstring;
}

Zeitfunktionen

long zeitinh(char *string, char trenn1, char trenn2, char trenn3)
//wandelt einen String der eine Zeit enthält in hundertstelsekunden um.
//erwartet wird ein string im format: HH:mm:ss:hh wobei der erste Doppelpunkt dem
//trenn1, der zweite dem trenn2 und der dritte dem trenn3 entspricht.
//Vorsicht: die funktion strtrenner() wird benötigt
{
  long l_hundertstel;
  char s_temp[12];
  l_hundertstel = 0;
  strcpy(s_temp, strtrenner(string, trenn1, 1));
  printf("n%st", s_temp);
  l_hundertstel += atoi(s_temp) <em> 60 </em> 60 * 100;
  strcpy(s_temp, strtrenner(strtrenner(string, trenn1, 2), trenn2, 1));
  printf("%st", s_temp);
  l_hundertstel += atoi(s_temp) <em> 60 </em> 100;
  strcpy(s_temp, strtrenner(strtrenner(strtrenner(string, trenn1, 3), trenn2, 2), trenn3, 1));
  printf("%st", s_temp);
  l_hundertstel += atoi(s_temp)  * 100;
  strcpy(s_temp, strtrenner(strtrenner(strtrenner(string, trenn1, 4), trenn2, 3), trenn3, 2));
  printf("%sn", s_temp);
  l_hundertstel += atoi(s_temp);
  return l_hundertstel;
}
 
 
 
 
 
char *zeitformatieren(long zeitinh, char trenn1, char trenn2, char trenn3)
//gegenstueck zu zeitinh()
//formatiert die zeit mit den angegebenen Trennzeichen
//als eingabe wird die zeit in hundertstelsekunden erwartet
{
  long l_hundertstel;
  static char returnstring[20];
  int stunden;
  int minuten;
  int sekunden;
  int hundertstel;
  l_hundertstel = zeitinh;
 
  stunden = l_hundertstel / 100 / 60 / 60;
  l_hundertstel -= stunden <em> 100 </em> 60 * 60;
  minuten = l_hundertstel / 100 / 60;
  l_hundertstel -= minuten <em> 100 </em> 60;
  sekunden = l_hundertstel / 100;
  l_hundertstel -= sekunden *100;
  hundertstel = l_hundertstel;
 
  strcpy(returnstring, "                   ");
 
  if(stunden >= 10)
    itoa(stunden, returnstring, 10);
  else
    itoa(stunden, &returnstring[1], 10);
  returnstring[2] = trenn1;
 
  if(minuten >= 10)
    itoa(minuten, &returnstring[3], 10);
  else
  {
    returnstring[3] = '0';
    itoa(minuten, &returnstring[4], 10);
  }
  returnstring[5] = trenn2;
 
  if(sekunden >= 10)
    itoa(sekunden, &returnstring[6], 10);
  else
  {
    returnstring[6] = '0';
    itoa(sekunden, &returnstring[7], 10);
  }
  returnstring[8] = trenn3;
 
  if(hundertstel >= 10)
    itoa(hundertstel, &returnstring[9], 10);
  else
  {
    returnstring[9] = '0';
    itoa(hundertstel, &returnstring[10], 10);
  }
  return returnstring;
}

Spaltennamen einer DB auslesen

Dim RS
set RS = Server.CreateObject("ADODB.Recordset")
RS.ActiveConnection = Cnn
RS.Source = "SELECT * FROM Tabelle"
RS.Open
 
Dim Feld
FOR EACH Feld IN RS.Fields
   Response.Write Feld.Name & "<br>"
   Response.Write Feld.Type & "<br>"
Next
 
RS.Close
set RS = nothing
Cnn.Close
set Conn = nothing

".Type" gibt Dir dann auch den datentyp aus.

Tabellen einer Access Datenbank auflisten

Die einfachste Variante ist die Abfrage der Systemtabellen der Datenbank. Unter Access muss der
User "Administrator" Lesezugriff auf die Tabelle "MSysObjects" haben. Dies können Sie in Access 2000
unter "Extras -> Sicherheit -> Benutzer- und Gruppenberechtigungen" einstellen.

[listtables.asp]

<%
' --- SQL-String für Access
ListSQL = "SELECT name AS tablename FROM MSysObjects WHERE [type] = 1 AND [flags] = 0"
 
' --- SQL-String für Microsoft SQL Server 7.0
' --- ListSQL = "SELECT name AS tablename FROM SysObjects WHERE [type] = 'U'"
 
' --- SQL-String für Oracle 7.x oder höher (alle Tabellen, auf die der User Zugriff hat)
' --- ListSQL = "SELECT table_name AS tablename FROM all_tables"
 
' --- SQL-String für Oracle 7.x oder höher (alle Tabellen, die dem User gehören)
' --- ListSQL = "SELECT table_name AS tablename FROM user_tables"
 
Set ListRS = Server.CreateObject("ADODB.Recordset")
    ListRS.Open ListSQL, objConn, 3, 3
 
        ' --- Ausgabe der Überschrift
        Response.Write "<b><u>Tabellen in DB</u></b><br>" & vbCrLf
 
        Do While Not ListRS.EOF
 
            ' --- Ausgabe des Tabellennamens
            Response.Write ListRS.Fields("tablename") & "<br>" & vbCrLf
            ListRS.MoveNext
 
        Loop
 
    ListRS.Close
Set ListRS = Nothing
%>

——————————————————————————–
Alternativ kann man auch auf eine relativ unbekannte Methode des Connection-Objekts zurückgreifen.
Die OpenSchema-Methode. Mit Hilfe dieser Methode können Sie sehr viel über Ihre Datenbank erfahren.
So zum Beispiel auch, welche Tabellen in der Datenbank enthalten sind.

[listtables.asp]

<%
' --- Öffnen der Datenbankverbindung
Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.Open "<DSN>", "<UID>", "<PWD>"
 
' --- Instantiieren des Recordsets für das Auslesen der Tabellen
' --- adSchemaTables = 20 (Konstante definiert in adovbs.inc)
Set objRS = objConn.OpenSchema(adSchemaTables)
 
    Response.Write "<b>Tabellenname</b><br>"
    Do Until objRS.EOF
 
        ' --- Da auch die Systemtabelle (objRS.Fields("TABLE_TYPE") = "SYSTEM_TABLE")
        ' --- zurückgegeben werden, wird eine Eingrenzung auf die Usertabellen implementiert
        If objRS.Fields("TABLE_TYPE") = "TABLE" THEN
            Response.Write objRS.Fields("TABLE_NAME") & "<br>" & vbCrLf
        End if
 
        objRS.MoveNext
 
    Loop
 
' --- Schliessen und terminieren des Recordets
    objRS.Close
Set objRS = Nothing
 
' --- Schliessen und terminieren der Datenbankverbindung
    objConn.Close
Set objConn = Nothing
%>

Browser ermitteln

' --- Ermitteln des Browsertyps
Set objBrowser = Server.CreateObject("MSWC.BrowserType")
    If objBrowser.Browser = "IE" Then
        CSSFile = "ie.css"
        Else
            CSSFile = "ns.css"
    End if
Set objBrowser = Nothing
 
In den Head-Tag fügst du dann folgendes ein:
<link rel=stylesheet href="<%=CSSFile%>" type="text/css">

An NT-Domäne anmelden

<%
If Request.ServerVariables("LOGON_USER") = "" Then
    Response.Status = "401 - Not allowed"
    Response.End
End if
 
' --- Wenn der User hierhin kommt, ist das Login OK
' --- daher kann man einfach weitermachen ohne weitere Prüfung
...
%>

Wartefunktion

Mittels diesem code kann man in ASP eine warte-funktion wie in VB erstellen:

<%
While a=1
Response.Write "Hi" & "<br>"
WaitNSeconds(1)
Wend
 
Private Sub WaitNSeconds(n)
 
    Response.Write Now & " - " & Timer & "<br>"
    StopTimer = Timer + n
    Do While Timer < StopTimer
    Loop
    Response.Write Now & " - " & Timer & "<br>"
 
End Sub
%>

Pfad entfernen

' Pfad entfernen
Function GetFileName(FileName)
    Dim TmpFileName
    TmpFileName = FileName
    TmpFileName = Trim(Replace(TmpFileName,"", "/"))
    TmpFileName = Right(TmpFileName, Len(TmpFileName) -
InStrRev(TmpFileName, "/",true, vbTextCompare))
    GetFileName = TmpFileName
End Function
Respone.Write GetFileName("c:inetpubwwwrootfilesblabla.asp")

ergibt
blabla.asp

Statt einem phys. Pfad kann man auch eine URL der Func. übergeben

ggf. muss man es noch ein wenig anpassen.

Application / Session / global.asa – Unterschiede und FAQ

[…]
> In der global.asa kann man für Application_OnStart/OnEnd Code angeben. Mir
> ist aber nicht ganz klar wann OnStart/OnEnd ausgeführt wird.
[…]

Application_onStart wird beim ersten Aufruf der Applikation (nach Start des
IIS oder nach Änderung der global.asa) aufgerufen

Application_onEnd wird beim Beenden des IIS aufgerufen

Session_onStart wird beim ersten Aufruf eines Users innerhalb einer
Applikation aufgerufen (wenn der User keine Cookies akzeptiert, wird
die Session_onStart bei jedem Aufruf einer ASP-Seite aufgerufen.

Session_onEnd wird nach dem Session-Timeout (Zeit, in der der User
kein ASP-Skript mehr aufruft, Standard 20 Minuten) oder beim
Aufruf von Session.Abandon aufgerufen. ACHTUNG !!! Session.Abandon
wird IMMER AM ENDE des Scripts aufgerufen, selbst wenn es in der
ersten Zeile des Scripts steht.

> Zur Global.asa dann noch: Kann man in Application_Onstart oder irgendwo in
> der global.asa eine Variable angeben die überall in der Webseite ablesbar
> ist oder ist genau für diesen Zweck Session()/Application() gedacht?

Application("") ist auf allen Seiten für alle User verfügbar.
Session("") ist auf allen Seiten für einen User verfügbar.

> Dann hab ich auch vor kurzem gelesen das man in die global.asa folgendes
> eintragen kann . Welchen
> Zweck hat das?

Damit kannst Du Objekte instantiieren, die dann mit dem entsprechenden Namen
(nicht Application(""), sondern angesprochen werden
können.

Car-PC

__Seit schon sehr langer zeit, träumte ich davon einen Computer im Auto zu haben und nun hab ich mich an die Umsetzung des Projektes gemacht, dass ich hier beschreiben werde.

Das Auto indem ich den PC eingebaut habe ist mein Honda Prelude (BA4).__

Ausgangslage

Das Auto verfügte bereits über ein Car-MP3-Player, der auch weiterhin bestehen bleiben sollte, sowie einen kleinen Verstärker.

Zuhause hatte ich noch ein Pentium 3 Mainboard (onBoard Sound/Grafik), dass sich mit einem Prozessor (800 MHz) und etwas RAM für ca. 50 EUR (ebay) gut eignete.
Eine 10GB Notebook HD (2.5") war ebenfalls bereits vorhanden; eine neue 40GB hätte man aber für unter 100 EUR gekriegt.

Der Kofferraum sollte seine Funktion, nämlich das verstauen von Koffern weiterhin wahren können; das Reserverad unten dran musste ebenfalls noch vorhanden und leicht zugänglich sein.

Meine Idee zum Einbau fiel deshalb auf die kleine Verengung ganz hinten im Kofferraum.

Anforderungen

Zunächst mal galt als einzige Anforderung ein Navigationssystem laufen zu lassen; später sollen aber noch diverse Erweiterungen, wie z.B. Kameras und die Bordelektronik damit gesteuert werden können.
Zusätzlich musste der Car-PC über WLAN Zugang zum internet bekommen; hauptsächlich wegen der (Fern-) Wartung von meinem Arbeitsplatz aus.

Materialien

Zunächst mal waren einiges an Material vonnöten; das meiste bezog ich vom car-pc-shop , den Rest von einem lokalen PC und Elektronik Händler. Die Baumaterialien kamen vom Baumarkt.

Hardware

{IMG(fileId="18",thumb="y",rel="box[g]",imalign="left",align="left")}{IMG}

  • Mainboard, CPU, RAM (vorhanden)
  • 2.5 Notebook Festplatte (vorhanden)
  • Touchscreen
  • GPS Empfänger (inkl. USB Adapterkabel)
  • 12V Netzteil (M2 vom car-pc-shop)
  • WLAN-Karte
  • 15m VGA Kabel (um vom touchscreen bis hinten zum Kofferaum zu kommen)
  • 15m Audio Kabel (Stereo-Cinch für den Anschluss am Verstärker)
  • ca. 30m Stromkabel rot und 15m Stromkabel schwarz (masse)
  • ca. 15m USB Kabel (touchscreen-PC)Abstandhalter</LI>
  • 2 Plexiglasplaten
  • Sicherungshalter mit 1A und 5A Sicherungen
  • Strom-Verteilerboxen

{IMG(fileId="19",thumb="y",rel="box[g]",imalign="left",align="left")}{IMG}

Werkzeuge

  • Voltmeter (Stromprüfgerät)
  • Lötkolben / Zinn
  • Schrumpfschläuche
  • Schraubendreher

Car-PC zusammenbauen

Am besten ist, man setzt erst den Car-PC auf, da man diesen nach dem Umbau auch gleich testen kann. 😉
Ich habe hier eine Plexiglasplatte zurecht gesägt, die Abstandhalter auf auf das Mainboard und das Netzteil gesteckt und dann "aufgeklebt".

Für die Festplatte sollte man sich irgend ein Schock-Resistentes Gehäuse basteln. Ich habe hier für ca. 10 EUR von Pearl ein Case für 2.5 HDs besorgt. Danach hab ich vier Winkel im Baumarkt gekauft und diese auf die Platte geschraubt. Dann das ganze mit Gummibändern in der Luft zusammen gebunden (siehe Bild).

{IMG(fileId="20",thumb="y",rel="box[g]",imalign="left",align="left")}{IMG} Steht der PC, kann man ihn mit einem normalen ATX Netzteil anschliessen und aufsetzten. Windows XP oder wer rankommt FLP sind gut dafür.

Läuft Windows kann man sich an die Installation von cPOS und der Navi-Software machen. Tutorials dazu gibts genügend bei car-pc.info .

Der Umbau

Strom

Zunächst mal braucht man drei Stromleitungen:

Zündplus: Auf dieser Leitung kommt nur dann Strom, wenn die Zündung (bzw. das Fahrzeug) an ist. Diese Leitung wird verwendet um Geräte automatisch auszuschlaten, wenn das Auto ausgeschaltet wird.
[stextbox id=“warning“ caption=“Wichtig“]Der Strom auf der Zündplus-Leitung ist nicht sehr gleichmässig und soll deswegen nicht verwendet werden um die Geräte zu Speisen, sondern ausschliesslich als sog. "remote-leitung" um die Geräte an/aus zu schalten![/stextbox]

Dauerplus: Hier ist immer, also auch im ausgeschaltetem Zustand Strom drauf. Dies ist z.B. nützlich, wenn man den PC nach dem ausschalten des Autos automatisch herunterfahren will; dazu muss er nämlich noch einige Sekunden Strom erhalten nach dem ausschalten, diesen erhält er vom Dauerplus.

Masse: Das Erdungskabel oder "minus".

Während die beiden Plus-Kabel allgemein rot sind (Zünd plus kann auch gelb oder weiss sein), ist das Minus-Kabel schwarz. So gibt es keine Verwechslungen und damit verbundene Kurzschlüsse… 😉

Vor-Überlungen

Beim verlegen der Kabel ist darauf zu achten, dass man Signal Kabel (VGA/Sound) und Stromkabel nicht miteinander mischt, da sonst das Stromkabel das Signalkabel stört und es so zu unerwünschten Störungen in der Grafik/Sound kommen kann.
[stextbox id=“warning“ caption=“Achtung“]Das USB-Kabel gilt als Stromkabel![/stextbox]

Am besten, man zieht auf der einen Seite die Stromkabel, auf der anderen die Signalkabel durch.

Verlegung

{IMG(fileId="21",thumb="y",rel="box[g]",imalign="left",align="left")}{IMG} Nun, kommt das verlegen der Kabel. Diese sollen möglichst unsichtbar nach hinten führen, da man ja kein Kabelbaum quer durchs Auto haben möchte… g

Am besten geht man dazu den schon verlegten Kabeln für Lautsprecher, usw. nach. Praktisch alle Autos haben hier schon versteckte Kanäle, die man benutzen kann um mit eigenen Kabeln zu erweitern… 😉 -Bei meinem Prelude war dies z.B. unter den Einstiegsleisten der Fall.

Hat man die Kanäle gefunden, kann man die Kabel durchziehen. Auf eine Seite kommen Strom- (2x rot, 1x schwarz) und USB- Kabel, auf die andere VGA und Stereo. Das Kabel sollte locker von der Mittelkonsole bis ganz hinten in den Kofferraum kommen.
Die Mittelkonsole, bzw. das Auto Radio sollte man schon mal ausbauen; erstens findet man so noch versteckte Durchgänge zu den Kabelschächten und zweites wird dies eh gleich nötig sein. 😉 {IMG(fileId="22",thumb="y",rel="box[g]",imalign="right",align="right")}{IMG}

[stextbox id=“note“ caption=“Hinweis“]Das Stereo Kabel ist bei mir nur aus dem Grund nach vorne verlegt, weil ich auch den Verstärker vorne habe! -Wer den Verstärker schon hinten im Kofferraum hat muss natürlich kein Kabel nach vorne ziehen…[/stextbox]

Hat man die Kabel gezogen geht es darum den Strom anzuzapfen. Dazu ist meistens das ausbauen des Autoradios vonnöten, dann gehts ans Strom vermessen der Kabel am ISO Stecker; gesucht sind alle Kabel, die Strom haben. Erst bei eingeschalteter Zündung, danach Zündung ausschalten und alle Kabel die Strom hatten nochmals messen; das Kabel, das dann kein Strom mehr hat ist das Zünd plus und wird zur remote Leitung werden (am besten gleich anschreiben!).

Dauer plus und Masse kann man entweder ebenfalls von einem solchen Kabel holen oder direkt bei der Batterie. Wichtig ist auf jedenfall, dass man eine Sicherung dazwischen schaltet, da sonst beim kleinsten Kurzschluss die Geräte kaputt gehen könnten! 1A oder max. 5A sollten ausreichen.

Nun beginnt die Löt-Arbeit: Die entsprechenden Kabel (Zünd plus, Dauer plus, Masse) werden abgeklipst und kommen in einem Strom-Verteiler. Von da aus führen wir für jedes Kabel zwei raus, eins verlöten wir wieder mit dem Original-Kabel am ISO Stecker, das andere kommt an das 15m lange Car-PC Kabel, das wir zum Kofferraum gezogen haben.
In den Verteiler kann man nun alle weiteren Stromkabel auch anschliessen, wie z.B. das des Touchscreens.

Hat man bisher alles richtig gemacht, sollt man jetzt vorne bei der Mittelkonsole ein VGA, (ein Stereo / Verstärker vorne) und ein USB Kabel haben. Diese kann man nun vorne an den Bildschirm und hinten mit dem Car-PC verbinden. Hat man alles richtig angeschlossen sollte nun der Car-PC starten und auf dem Touchscreen ersichtlich sein.

Falls nicht: Kabel und Stromverbindungen überprüfen!

Abschliessende Tests / Konfiguration

{IMG(fileId="23",thumb="y",rel="box[g]",imalign="left",align="left")}{IMG} Nun geht es darum die Hard- und Software zu konfigurieren, dies kann auch einige zeit in Anspruch nehmen.

So, dies war’s fürs erste. Gerne werde ich den Guide noch erweitern, Vorschläge dazu bitte im Kommentar unten hinterlassen.

Bilder

Hier noch einige Bilder:
{IMG(fileId="24",thumb="y",rel="box[g]")}{IMG} {IMG(fileId="25",thumb="y",rel="box[g]")}