Hohe Systemlast und Freeze bei serieller Fernsteuerung [3.0.1 Build 541]

Hallo Torben,

wenn ich in mAirList die serielle Fernsteuerung aktiviere, friert bei mir die Oberfläche ein, mAirList ist unbedienbar und macht 99% Systemlast, sobald ein Kommando über die Fernsteuerung reinkommt, oder mAirList aus einem Script heraus etwas an den seriellen Port sendet. Immer und reproduzierbar, sobald ich die serielle Fernsteuerung und das Notificationscript entferne, funktioniert alles.

Einstellungen der Schnittstelle sind 9600 Baud und Standard (8N1, keine Flusskontrolle weil CTS/RTS unbeschaltet), empfangen und gesendet werden nur Plaintext-Kommandos, terminiert mit CRLF (#13#10).

Gruß
Dominique Görsch

Nachtrag: in Build 534 tritt das Problem nicht auf, dort laufen serielle Fernsteuerung und auch das entsprechende Script problemlos.

Ich steuere das PFL am Mischpult über meinen Comport1 mittels eines notification scripts…

Kann das mit der Systemlast nicht bestätigen, jedoch geht das PFL Flag an und sofort wieder aus…während mAirList sich aber noch im PFL Modus befindet…

Dominique, bitte lade dir doch nochmal den jetzt aktuellen Snapshot (derzeit 544) herunter. Nicht dass ich glaube, dass das Problem dort weg ist - aber es hat sich die Verwaltung der seriellen Schnittstellen dort grundlegend geändert (zentrale Einstellung der Parameter in mAirListConfig), und es wäre gut, wenn wir beide die gleiche Basis zum Testen/Fehlersuchen hätten.

Kein Problem, gerne. Mache ich gleich.

Gesagt getan. Die hohe Systemlast und der Freeze der Oberfläche findet beim aktuellen Snapshot nichtmehr statt, allerdings funktioniert nun eins meiner Notificationscripte nichtmehr: “Während der Initialisierung sind die folgenden Fehler aufgetreten: Fehler beim Laden von M:\mAirList3\scripts\notification\Mixercontrol.mls: [Error] (14:39): Type mismatch”

Die relevante Stelle aus dem Script:

procedure OnStartup; begin ComPort(2).SendStr('RESET' + #13#10); end;

Durch gezieltes Auskommentieren konnte ich feststellen, dass der Fehler überall dort vorkommt, wo mittels SendStr ein String mit Angehängtem #13#10 gesendet werden soll.

Gruß
Dominique Görsch

  1. Was steht denn in Zeile 14, Spalte 39? Das wäre mal zu klären.

  2. Ohne das #13#10 gibt es keinen Absturz?! Geheimnisvoll, geheimnisvoll.

  ComPort(2).SendStr('RESET' + #13#10);

Das ist Zeile 14, Spalte 39 ist das Zeilenende.

Nein, auch dann kommt es zum Type mismatch.

Gruß
Dominique Görsch

PS: Kann man eigentlich Einstellen, dass man nach dem Absenden einer Antwort zurück zum Thread und nicht zur Übersicht kommt? narv

Der Fehler rührt vermutlich daher, dass die seriellen Schnittstellen jetzt über ihren Namen angesprochen werden und nicht mehr über die Nummer. Du musst also schreiben:

  ComPort('COM2').SendStr('RESET' + #13#10);

Bitte damit mal testen :slight_smile:

PS: Kann man eigentlich Einstellen, dass man nach dem Absenden einer Antwort zurück zum Thread und nicht zur Übersicht kommt? *narv*

Guck mal in deinem Profil unter “Profil”, da gibt es einen Haken “Nach dem Schreiben zum Thema zurückkehren?”

Danke, genau das wars.
Kann man eigentlich Konstanten innerhalb der Sciprte verwenden? Gerade bei umfangreicheren Scripten würde sich das ja z.B. für den Port anbieten…

Danke für den Hinweis mit der neuen Schreibweise…soweit meckert mAirList nun mit meinem PFL Script nicht mehr…

Kann es aber sein, daß sich noch etwas verändert hat? Unter mAirList 2 hat es bei PFL eine Flanke auf dem Comport gegeben, jetzt wird nur noch ein Puls rausgegeben…bzw. das Signal sofort wieder zurückgesetzt. Das Mischpult geht für den Bruchteil einer Sekunde in den PFL Modus und gleich weider raus…

procedure OnPFLOn(PlayerControl: IPlayerControl; Item: IPlaylistItem;
PFLCount: integer);
begin
ComPort(‘COM1’).Open;
IOPort($3FC).WriteOR(1);
end;

procedure OnPFLOff(PlayerControl: IPlayerControl; Item: IPlaylistItem;
PFLCount: integer);

begin
if(PFLCount = 0) then
ComPort(‘COM1’).Close;
end;

begin
end.

[quote=“dgoersch, post:9, topic:5941”]Danke, genau das wars.
Kann man eigentlich Konstanten innerhalb der Sciprte verwenden? Gerade bei umfangreicheren Scripten würde sich das ja z.B. für den Port anbieten…[/quote]

Klar:

const
  port = 'COM1';

Ich sehe hier ein grundlegendes Problem: Du vermischst zwei Arten der Ansteuerung des Ports. Einmal (wie man es für die Datenübertragung machen würde) über die IComPort-Schnittstelle, und einmal greifst du direkt per inpout32.dll auf den Port zu und veränderst ein Bit. Mich wundert, dass diese Mischung (bei mAirList 2.2) überhaupt funktioniert.

Welche Datenleitung setzt du denn da überhaupt? Funktioniert das eventuell, ohne dass man den Port überhaupt initialisieren muss?

Hi Torben,

das ist nur die “Ansteuerung” eines Relais, wie es Charly aus dem englischen Forum für den RDS-Flag benutzt hat…

http://forum.mairlist.com/index.php/topic,2800.0.html

…daher auch das abgewandelte Script. Das Script setzt am Comport den Flag “bereit” und dann stehen an einem Pin 12V/5V an…diese schalten dann über einen Optokopler an meinem Pult 2 Kontakte zusammen. Dadurch geht das Pult in den PFL-Modus.

Wenn mit “bereit” das DTR-Flag genannt ist, dann kannst du auch

ComPort('COM1').SetDTR(true);

benutzen, vielleicht klappt das besser.

Bitbanging unter Windows ist irgendwie immer ein bissl frickelig, ich seh das bei den simplen ISP-Programmierern für meine AVRs. Allerdings wird da auf allen Leitungen gebangt, das Script von Timo zieht ja nur DTR auf High…

Genau…das DTR Flag! Danke Torben, ich werde das später zuhause gleich mal versuchen!

Code:

ComPort(‘COM1’).SetDTR(true);

Hmm…geht leider nicht…keine Reaktion

ComPort(‘COM1’).Open hast du aufgerufen?

Ja hab ich…es blinkt nach wie vor nur kurz auf…keine Flanke

[code]procedure OnPFLOn(PlayerControl: IPlayerControl; Item: IPlaylistItem;
PFLCount: integer);
begin
ComPort(‘COM1’).Open;
ComPort(‘COM1’).SetDTR(True);
end;

procedure OnPFLOff(PlayerControl: IPlayerControl; Item: IPlaylistItem;
PFLCount: integer);

begin
if(PFLCount = 0) then
ComPort(‘COM1’).SetDTR(False);
ComPort(‘COM1’).Close;
end;

begin
end.
[/code]

Ich habe eine Vermutung. Morgen wissen wir mehr.

btw, unten fehlt um die beiden ComPort-Befehle noch “begin” und “end”, sonst bezieht sich das “if” nur auf den SetDTR-Befehl, und das Close wird immer ausgeführt, auch wenn PFLCount > 0 ist.