APROLmicha
Level-1
- Beiträge
 - 27
 
- Reaktionspunkte
 - 0
 
-> Hier kostenlos registrieren
Hallo,
Ich versuche seit einiger Zeit mehr oder Weniger erfolgreich eine gemultiplexte 7-Segment-Anzeige einer Maschine mit BCD-CODE einzulesen, um Fehler zu Visualisieren. Bis jetzt wird den Bedienern nur ein Fehlercode angezeigt, was neuen bzw. unerfahrenen Bedienern zum Verhängnis wird. Die Neue Anzeige soll dann auf einem Signage-Display erfolgen in Klartext.
Leider bekomme ich einige Ziffern nicht mit bzw. es werden Ziffern erkannt, die nicht angezeigt werden.
Es handelt sich um eine WiBond Anzeige mit 6 Stellen (Datenblatt angehängt).
Den Code hab ich mal angehängt, auch wenn er einige versuche noch enthält. Simuliere ich dann wird alles richtig erkannt.
Verwendet wird eine B&R X20CP1584 mit einem reAction Eingangsmodul (aufgrund der möglichen kurzen Zeiten).
Die Anzeige hat einen Ausgangsstecker auf dem ich mit dem SPS-Modul daraufhänge. Auch ein Direkter Anschluss an die SPS der Maschine hilft nicht weiter.
Wie würdet ihr daran gehen?
	
	
	
		
Vielen Dank schonmal!
grüße
Micha
	
		
			
		
		
	
				
			Ich versuche seit einiger Zeit mehr oder Weniger erfolgreich eine gemultiplexte 7-Segment-Anzeige einer Maschine mit BCD-CODE einzulesen, um Fehler zu Visualisieren. Bis jetzt wird den Bedienern nur ein Fehlercode angezeigt, was neuen bzw. unerfahrenen Bedienern zum Verhängnis wird. Die Neue Anzeige soll dann auf einem Signage-Display erfolgen in Klartext.
Leider bekomme ich einige Ziffern nicht mit bzw. es werden Ziffern erkannt, die nicht angezeigt werden.
Es handelt sich um eine WiBond Anzeige mit 6 Stellen (Datenblatt angehängt).
Den Code hab ich mal angehängt, auch wenn er einige versuche noch enthält. Simuliere ich dann wird alles richtig erkannt.
Verwendet wird eine B&R X20CP1584 mit einem reAction Eingangsmodul (aufgrund der möglichen kurzen Zeiten).
Die Anzeige hat einen Ausgangsstecker auf dem ich mit dem SPS-Modul daraufhänge. Auch ein Direkter Anschluss an die SPS der Maschine hilft nicht weiter.
Wie würdet ihr daran gehen?
		Code:
	
	PROGRAM _CYCLIC
	RTEnable := TRUE;
	
	f_trig_0(CLK := CS);
	r_trig_0(CLK := CS);
	
	IF CS AND Strobe THEN
			
//Adresse zusammen setzen		
		Bit2Byte_01.bitadr := ADR(adressarray[0]); (* get adress of bit array *)
		Bit2Byte_01.length := 8;
		Bit2Byte_01(bitadr := ADR(adressarray), length := 8); (* convert bit array into byte array *)
		adress1 := Bit2Byte_01.byteadr; (* get adress of byte array *)
		memcpy(ADR(adress), adress1, 2);
			
		IF adress <> adressold THEN
			arraycounter := arraycounter + 1;
			adressdatabase[arraycounter] := adress;
			IF arraycounter = 512 THEN
				arraycounter := 0;
			END_IF
			adressold := adress;
		END_IF
		
		
// Zeichen-Bits erstellen
		IF D1 THEN 
			z0 := 1 ;
		ELSE z0 := 0;	
		END_IF
		
		IF D2 THEN 
			z1 := 2 ;
		ELSE z1 := 0;
		END_IF
		
		IF D3 THEN 
			z2 := 4 ;
		ELSE z2 := 0;
		END_IF
		
		IF D4 THEN 
			z3 := 8 ;
		ELSE z3 := 0;
		END_IF
			
// Zeichen Bilden
		Zeichen := z0 + z1 + z2 + z3;		
			
		Zifferarray[adress] := Zeichen;
		
//Zeichen umwandeln & String bilden
		sZiffer0 := INT_TO_STRING(Zifferarray[0]);
		sZiffer1 := INT_TO_STRING(Zifferarray[1]);
		sZiffer2 := INT_TO_STRING(Zifferarray[2]);
		sZiffer3 := INT_TO_STRING(Zifferarray[3]);
		sZiffer4 := INT_TO_STRING(Zifferarray[4]);
		sZiffer5 := INT_TO_STRING(Zifferarray[5]);
		sZiffer6 := INT_TO_STRING(Zifferarray[6]);
		sZiffer7 := INT_TO_STRING(Zifferarray[7]);
//FehlerString Leeren	
	        FehlerstringZiffer := leerstring;
		
		strcat(ADR(FehlerstringZiffer), ADR(sZiffer7));
		strcat(ADR(FehlerstringZiffer), ADR(sZiffer6));
		strcat(ADR(FehlerstringZiffer), ADR(sZiffer5));
		strcat(ADR(FehlerstringZiffer), ADR(sZiffer4));
		strcat(ADR(FehlerstringZiffer), ADR(sZiffer3));
		strcat(ADR(FehlerstringZiffer), ADR(sZiffer2));
		strcat(ADR(FehlerstringZiffer), ADR(sZiffer1));
		strcat(ADR(FehlerstringZiffer), ADR(sZiffer0));
		
//Fehlernummern Abspeichern
		IF FehlerstringZiffer <> FehlerstringZifferOld THEN
			//MpAlarmXSet(gAlarmXCore,FehlerstringZiffer);//
			arraycounter1 := arraycounter1 + 1;
			Fehlerstringdatabase[arraycounter1] := FehlerstringZiffer;
			IF arraycounter1 = 512 THEN
				arraycounter1 := 0;
			END_IF
		
		
			FehlerstringZifferOld := FehlerstringZiffer;
	
		END_IF
		
				
	END_IF
			
END_PROGRAM
	Vielen Dank schonmal!
grüße
Micha
	
 
 
 

