Vai al contenuto
PLC Forum


snap7 DTL


Messaggi consigliati

buonasera

dopo due giorni di prove sono riuscito a leggere il formato DTL da una cpu s71200, utilizzando l'esempio vb , ora vorrei leggere 53 DTL, esiste un modo per non dover scrivere 53 volte

 

Public data1 As DateTime

Public data2 As DateTime

Public data3 As DateTime

Public data4 As DateTime

Public data5 As DateTime

Public data6 As DateTime

e poi 53 volte

 

Result.data1 = S7.GetS1200_DTLAt(Buffer, 0)

Result.data2 = S7.GetS1200_DTLAt(Buffer, 12)

Result.data3 = S7.GetS1200_DTLAt(Buffer, 24)

Result.data4 = S7.GetS1200_DTLAt(Buffer, 36)

Result.data5 = S7.GetS1200_DTLAt(Buffer, 48)

Result.data6 = S7.GetS1200_DTLAt(Buffer, 60)

e poi 53 volte

 

Label14.Text = CR.data1

Label12.Text = CR.data2

Label13.Text = CR.data3

Label15.Text = CR.data4

Label16.Text = CR.data5

Label17.Text = CR.data6

End Sub

 

e il tutto per 3 volte :wallbash:

 

grazie a tutti Gravino

 

 

 

 

 

Link al commento
Condividi su altri siti


Fai un loop di 53 ricorsi incrmentando n di 12.

esempio

Result.data(0) = S7.GetS1200_DTLAt(Buffer, 0)

Label(14).Text = CR.data(0)

For n=1 to, n<53, n++

 {

    Result.data(n) = S7.GetS1200_DTLAt(Buffer, n*12);

    Label(n+14).Text = CR.data(n) ;

}

 

Ovviamente dovrai prevedere segli array per label e data

Link al commento
Condividi su altri siti

buongiorno Livio

grazie per il consiglio, usare un ciclo for ci er arrivato , ma come implementarlo ero ancora ingarbugliato nei manuali , faccio subito qualche prova, secondo te potrei usare anche un do .. while visto che dovro leggere delle date dal DB e più o meno ne viene registrata una a settimana, visto che per scrivere nel DB uso una struttura con indice se passassi al while questo indice eviterei di leggerre le caselle vuote?

comunque testo prima la tua funzione, un passo alla volta

 

grazie di nuovo

 

Gravino

Link al commento
Condividi su altri siti

2 ore fa, gravino scrisse:

secondo te potrei usare anche un do .. while

 

Qualsiasi formula che ti permette di fare un algoritmo ricorsivo va bene.

Tra l'altro, essendo che non uso VB da ciurca un decennio, ho scritto l'esempio in pseudo "C", quindi probabilmente non è usabille così come è.

 

3 ore fa, gravino scrisse:

uso una struttura con indice se passassi al while questo indice eviterei di leggerre le caselle vuote?

 

Questo è fattibile anche con il for, basta mettere il test di "n" non con una costante ma con una variabile,

In pratica scriveresti "For n=1 to n<x, n++ ; dove "x" è il tuo indice.

Link al commento
Condividi su altri siti

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Dim data(10) As DateTime

Dim Label(10) As String

Dim Buffer(132) As Byte

Dim n As Integer

Client.DBRead(5, 0, 132, Buffer)

data(0) = S7.GetS1200_DTLAt(Buffer, 0)

Label(14) = System.Convert.ToString(data(0))

For n = 0 To n < 11

data(n) = S7.GetS1200_DTLAt(Buffer, n * 12)

Label(n + 14) = System.Convert.ToString(data(n))

Next

 

End Sub

End Class

 

ho provato a scrivere , ma non funziona non riesco a leggere nulla :wallbash:

 

Link al commento
Condividi su altri siti

finalmente ho ottenuto quello che volevo

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Dim datum(52) As DateTime

Dim Buffer(638) As Byte

Dim index As Integer

Dim leest As Integer

Client.DBRead(5, 0, 638, Buffer)

leest = S7.GetIntAt(Buffer, 636)

datum(0) = S7.GetS1200_DTLAt(Buffer, 0)

TextBox1.Text = datum(0).ToString

For indice = 0 To leest - 2

datum(indice) = S7.GetS1200_DTLAt(Buffer, index * 12)

TextBox1.Text &= vbNewLine & datum(indice).ToString

Next

TextBox2.Text = leest.ToString

 

sicuramente non é scritto in maniera accademica, purtroppo era la mia esperienza con VB.net e Snap7, quindi consigli per il miglioramento son ben accetti, ringrazio ancora Livio per i consigli e Davide per lo splendido lavoro:worthy::worthy::worthy:

Link al commento
Condividi su altri siti

Funziona? Questo è la prima condizione necessaria ed anche sufficiente.

Poi se si vuole migliiorare la forma lo si potrà fare.

Anche così mi sembra abbastanza ben ottimizzato.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...