-- DEFINITIONS-Script zum Schalten der Conrad Relaiskarten: Bestell-Nr.: 197720 - 62 oder Bestell-Nr.: 197730 - 62
-- Autoren: Sven Giermann und Manuel (Spiderbyte) Hachfeld, Sept. 2014, ver. 1.0
-- ComPort bestimmen:
relaisComPort = 3
-- Debuggen:
-- Um zu prüfen, welche Daten an den ComPort gesendet werden, muss die nachfolgende Zeile auf debugLog = 1 geändert werden.
-- Dies öffnet bei JEDEM Zugriff auf den ComPort ein Fenster, welches die gesendeten 4 Bytes anzeigt. Sollte das Spiel im
-- Vollbild ausgeführt werden, wird dieses dabei minimiert.
-- Man kann die Debugg-Funktion aber auch gezielt durch das jeweilige AUSFÜHRUNGS-Script einsetzen, z.B.:
-- debugLog = 1
-- senden(6, 1, 16)
-- debugLog = 0
--In dem Fall wird nur dann ein Fenster geöffnet, wenn dieses AUSFÜHRUNGS-Scrip aufgerufen wird.
debugLog = 0
-- Relais schalten:
-- Um ein Relais zu schalten wird ein AUSFÜHRUNGS-Script verwendet, dass so aussehen könnte:
-- senden(6, 1, 16)
-- Der erste Parameter (6) steht für das Kommando. In dem Fall: einschalten
-- Der zweite Parameter (1) steht für die Kartenadresse. In dem Fall Karte 1
-- Der dritte Parameter (16) steht für Daten und ist die Relaisnummer auf der Karte. In dem Fall Relais Nr. 5
-- Die Prüfsumme wird durch das weiter unten stehende Script errechnet. Daher braucht dieser Parameter nicht angegeben werden.
-- Kommandos: 1 = initialisieren, 6 = einschalten, 7 = ausschalten, 8 = Umschalten (Toggle)
-- Kartenadressen: erste Karte = 1, zweite Karte = 2, dritte Karte = 3, vierte Karte = 4..... max. 255 Karten können kaskadiert werden.
-- Daten: Relais 1 = 1, Relais 2 = 2, Relais 3 = 4, Relais 4 = 8, Relais 5 = 16, Relais 6 = 32, Relais 7 = 64, Relais 8 = 128
-- Beispiele:
-- senden (6, 1, 16) - schaltet Relais Nr. 5 auf der ersten Karte ein.
-- senden (7, 3, 64) - schaltet Relais Nr. 7 auf der dritten Karte aus.
-- senden (8, 2, 8) - schaltet Relais Nr. 4 auf der zweiten Karte um (von aus auf ein, oder von ein auf aus) Toggle
-- Prüfsummenberechnung:
function xor(a, b, c)
local x = 0
a = a or 0
b = b or 0
c = c or 0
i = 0
while i < 8 do
local aa = a % 2^(i+1)
local bb = b % 2^(i+1)
local cc = c % 2^(i+1)
x = x + ( (aa+bb+cc) % 2^(i+1) )
a = a - aa
b = b - bb
c = c - cc
i = i + 1
end
return x
end
-- Senden:
-- Hier werden die Parameter aus dem AUSFÜHRUNGS-Script z.B senden(6, 1, 16) an den ComPort gesendet. Die Prüfsumme wird selbst ermittelt.
-- Sollte debugLog auf 1 gesetzt sein, wird ein Fenster mit den gesendeten Bytes geöffnet. Sollte das Spiel im Vollbild ausgeführt werden,
-- wird dieses minimiert.
function senden(Kommando, Kartenadresse, Daten)
Kommando = Kommando or 0
Kartenadresse = Kartenadresse or 0
Daten = Daten or 0
local Pruef = xor(Kommando, Kartenadresse, Daten)
wserial:write(string.format("%c%c%c%c", Kommando, Kartenadresse, Daten, Pruef))
wserial:flush()
if debugLog > 0 then
os.execute( string.format("start echo Kommando: %d, Kartenadresse: %d, Daten: %d, Pruef: %d", Kommando, Kartenadresse, Daten, Pruef) )
end
end
-- ComPort Einstellungen:
-- Die nachfolgende Zeile (os.execute...) ändert, wenn sie nicht auskommentiert ist die Einstellungen für den Comport auf:
-- Bits pro Sekunde: 19200
-- Flusssteuerung (Handshake): keine
-- Datenbits: 8
-- Stoppbits: 1
-- Sollte das Spiel im Vollbild ausgeführt werden, wird dieses minimiert. Sind die Einstellungen für den ComPort im Gerätemanager bereits
-- eingetragen, kann diese Zeile auskommentiert bleiben.
-- os.execute( string.format("mode COM%d:19200,n,8,1", relaisComPort) )
-- Der ComPort wird im binary mode geöffnet
wserial=io.open( string.format("COM%d", relaisComPort), "w+b" )
-- Karten werden initialisiert:
senden(1, 1, 1)
wserial:write(string.format("%c%c%c%c", Kommando, Kartenadresse, Daten, Pruef))
wserial:write(string.char(Kommando, Kartenadresse, Daten, Pruef))
Hallo zusammen. Hat vieleicht noch jemand von euch einen Downloadlink für die Vis-Projektdatei zur der Karte?
Gruss