Categoria: Comunicazione seriale

  • Free Protocol su Weintek HMI

    Ecco un esempio di come è possibile leggere dei dati dalla porta seriale di un HMI Weintek utilizzando il Free Protocol.

    Materiale software/hardware occorrente:

    • un modulo Arduino;
    • Arduino IDE;
    • Weintek Easybuilder Pro;
    • un cavo USB.

    Questo codice Arduino scrive dei dati sulla porta seriale, in questo caso un’onda sinusoidale.

    const unsigned long BAUD = 9600;
    const float PERIOD_MS = 20000.0f; 
    const float AMP = 100.0f; 			
    
    void setup() {
    
        Serial.begin(BAUD);
    
    }
    
    void loop() {
    	
        unsigned long t = millis();
        float n = (2.0f * PI) * ( (float)t / PERIOD_MS );
        float val = AMP * sin(n);
        Serial.println(val, 2);
        delay(100);
    
    }

    A scopo di diagnostica si può controllare l’output generato tramite il monitor seriale di Arduino IDE o anche tramite il programma HTERM.

    Attenzione a impostare correttamente il Baudrate, il numero di bit di dati, di stop e il controllo parità.

    Le impostazioni predefinite della comunicazione seriale di Arduino prevedono 8 bit per i dati, nessuna parità e un bit di stop.1

    In Easy Builder Pro creiamo un nuovo progetto, va bene il modello MT8050ie.

    Aggiungiamo un dispositivo di tipo Free Protocol e impostiamo anche qui i parametri di comunicazione.

    Come porta di comunicazione utilizziamo la COM 1 (RS-232).

    Impostiamo una macro che legga i dati dalla porta seriale, copiandoli poi su una variabile float dello HMI.

    Ci sono due passaggi:

    • lettura dei dati grezzi in ASCII dalla porta seriale (funzione INPORT);
    • conversione in formato float (funzione ASCII2FLOAT).
    macro_command main()
        
        //read ASCII from serial and save in LW-0
        char wResponse[6], receive_len
        INPORT(wResponse[0], "Free Protocol", 6, receive_len)
        if receive_len >= 6 then
            SetData(wResponse[0], "Local HMI", LW, 0, 6)
        end if
        
        //convert read to float and save in LW-10
        float output
        ASCII2FLOAT(wResponse[0], output, 6)
        SetData(output, "Local HMI", LW, 10, 1)
    
    end macro_command

    I dati della variabile float possono essere storicizzati (Data Storico > campionamento Dati > Nuovo … e specifichiamo l’indirizzo di memoria della variabile).

    Il file di progetto Easy Builder Pro è scaricabile da questo link.

    1. Il manuale di Arduino di Paolo Aliverti ed. LSWR 2^ Ed. pag. 377 ↩︎