Progetto demo per WinCC 7.0 SP1

Rilasciato il nuovo progetto demo per WinCC 7.0 SP1.

Il progetto è scaricabile al seguente indirizzo (FAQ. 38612895):

http://support.automation.siemens.com/WW/view/en/38612895

Il progetto demo è molto utile per vedere e studiare le funzionalità del prodotto.

</p> " />
Invia l'articolo in formato PDF a Word PDF

Toolbarbuttons dello UserArchive all’esterno dello OCX

Si può progettare la Toolbarbuttons dello UserArchive (da 4.02) anche in una pagina esterna allo OCX.

Di seguito il link alla FAQ Siemens (FAQ. 729703):

http://support.automation.siemens.com/WW/view/en/729703

Maggiori informazioni sul sito Siemens.

</p> " />
Invia l'articolo in formato PDF a PDF Free

Ricerca sostituisci in una stringa

Di seguito un esempio sull’uso delle regular expression in VBS di WinCC mirato alla ricerca sostituzione all’interno di una stringa.

Function ReplaceString(str1, patrn, replStr)
Dim regEx ‘ Crea variabili
Set regEx = New RegExp  ‘ crea regular expression.
regEx.Pattern = patrn  ‘ Set pattern.
regEx.IgnoreCase = True  ‘ non case sensitive
regEx.Global = True  ‘ setta ricerca a tutta la stringa.
ReplaceString = regEx.Replace(str1, replStr) ‘ esegui sostituzione
End Function

Qui una semplice idea che puo’ essere personalizzata in vari modi per la manipolazione di stringhe.

(GG)

Invia l'articolo in formato PDF a PDF Creator

Informazioni su Datamonitor

Siemens ha rilasciato un video che descrive le funzionalità di Datamonitor per WinCC:

http://support.automation.siemens.com/WW/view/it/33272025

Il video è in inglese e il download e’ di circa 230 Mb.

Invia l'articolo in formato PDF a PDF Creator

Esportare dati dagli archivi tramite WinCC OLE DB Provider

Interessante FAQ siemens sull’uso di WinCC OLE DB Provider reperibile al seguente indirizzo:

http://support.automation.siemens.com/WW/view/it/35840700

Un altro esempio è reperibile al seguente indirizzo

http://support.automation.siemens.com/WW/view/it/38132261

La documentazione si riferisce a WinCC 6.2 e 7.0 e comprende esempi e descrizioni dettagliate.

Invia l'articolo in formato PDF a Word PDF

Chiudere una Picture Window

Per chiudere (nascondere) una Picture Window tramite un pulsante presente al suo interno esistono vari modi.

Il piu semplice e veloce e’ usare una direct connection che imposta (source) come costante 0 la proprietà (targhet) display della Current Window.

Tramite VBS

Item.Parent.Parent.Visible = False

Tramite cScript

SetVisible(”nomePWContenitore”,”nomePW”,FALSE);

Invia l'articolo in formato PDF a Word PDF

Creare un’area “calda” cliccabile

Spesso e’ necessario creare una area cliccabile in una pagina.

Non esiste un ogetto “area calda” in wincc che in modo trasparente permetta di essere cliccata.

Un modo per ottenere il seguente risultato e’ disegnare un oggetto Graphic Object e associare un bitmap preventivamente creato che contenga un unico colore base (uno dei 16 colori base della tavolozza di Paint per capirci)

Il bitmap puo’ essere anche di una dimensione minima di 10 per 10 pixel.

All’oggetto Graphic Object cosi’ disegnato a video impostare le seguenti proprietà:

L’oggetto diventa completamente trasparente e risponde ai suoi eventi (per esempio il click)

Naturamente conviene inserire questi oggetti in un piano separato in modo da poterli visualizzare con un “seleziona tutto” in caso di modifiche o per nasconderli durante le operazioni di disegno.

Invia l'articolo in formato PDF a PDF Creator

Manuale WinCC/Connectivity Pack

E’ disponibile in inglese il manuale di istruzioni del connectivity pack al seguente indirizzo:

http://support.automation.siemens.com/WW/view/en/37436159

Invia l'articolo in formato PDF a PDF Download

Testi su piu righe visualizzati nell’Alarm Control

Per visualizzare testo su piu righe nell’Alarm Control seguire le indicazioni della seguente FAQ:

http://support.automation.siemens.com/WW/view/it/15274175

 La procedura e’ un po diversa per le versioni 6.0 e 6.2, per la versione 7.0 la gestione e’ automatica.

Invia l'articolo in formato PDF a PDF Free

Rilevare la posizione del mouse

Puo’ essere utile avere la posizione del mouse da script.

Seguire la seguente procedura come esempio.

  1. Inserire dalla libreria HMI Symbol Library l’oggetto Basic Shapes \ Banner
  2. Impostare la proprietà Stile su Trasparente
  3. Usare l’evento MouseOver per avere le coordinate del mouse

L’evento MouseOver dell’oggetto viene chiamato passando tra i parametri anche le coordinate del mouse.

In questo semplice modo sono possibili iterfacce di selezione degli oggetti a video come liste o altro.

Invia l'articolo in formato PDF a PDF

Campo I/O personalizzato

Potrebbe essere necessario utilizzare un campo I/O in modo personalizzato.

Per esempio controllare il valore di input dell’operatore e modificarlo prima di trasmetterlo alla Tag collegata al campo di I/O

Oppure ancora fare in modo che il campo di I/O visualizzi un valore letto da una prima Tag ma che un eventuale valore introdotto venga scritto in una Tag diversa dalla prima.

Per implementare questa e altre casistiche personalizzate occorre usare la funzione GetInputValueDouble() disponibile in cScript.

Per verificare e testarne la funzionalità seguire l’esempio di seguito descritto.

Disegnato un campo di I/O a video nella proprietà “valore in uscita” inserire questo codice CScript

return(GetTagWord(”NomeTagLettura”)/10);

con esecuzione del codice su trigger della stessa Tag “NomeTagLettura” con il tempo di scansione desiderato.

Nell’evento “Valore di Ingresso” (del gruppo Uscita/Ingresso) inserire questo codice CScript

double lValore;

lValore=GetInputValueDouble(lpszPictureName,lpszObjectName);
SetTagWord(”NomeTagScrittura”,lValore*10);

Con queste poche righe di codice si avrà il seguente funzionamento:

Altre personalizzazioni e controlli possono in questo modo essere implementati per modificare o controllare l’input dell’operatore.

Invia l'articolo in formato PDF a Word PDF

Refresh dati UserArchive Control

Inserendo in una pagina UserArchiveControl collegato ad una tabella dello User Archive, tutto funziona bene utilizzando i comandi di WinCC e del controllo.

Ma se i dati nella tabella vengono inseriti utilizzando funzioni ADO con vbScript  il controllo non mostra immediatamente i nuovi record inseriti ma occorre effettuare un cambio pagina per forzare il refresh.

Sembra che non esista un metodo refresh dell’oggetto.

Un modo per far rileggere i dati al controllo è utilizzare la proprietà di query del controllo stesso che si chiama “FilterSQL” (nel controllo UserArchive classic la proprietà si chiama “Filter”)

Impostando la proprietà da codice prima con il valore “ID=0″ e immediatamente dopo al valore “ID>0″ si eseguono due query sul controllo che di fatto aggiornano la visualizzazione senza dover ricaricare la pagina.

(SR)

Invia l'articolo in formato PDF a PDF Creator

Disattivare WinCC da WSH

Puo’ essere necessario dover disattivare il runtime di WinCC da uno script Windows (WSH) per effettuare uno spegnimento ordinato per esempio in caso di mancanza di alimentazione.

Alcuni software di gestione UPS permettono l’esecuzione di Windows Script (.vbs) per effettuare alcune operazioni in modo ordinato e temporizzato prima di comandare la chiusura del SO.

In file .vbs inseriamo le seguenti istruzioni

dim mcp
set mcp = CreateObject(”WinCCRuntime-Project”)
mcp SetValue “Spegni”,1
set mcp = nothing

Questo codice non fa altro che settare il valore 1 nella tag “Spegni” di WinCC

Basterà triggherare dall’interno di WinCC tramite una action cScript la Tag “Spegni” e sul cambio di valore eseguire il seguente codice di chiurura runtime

DMExitWinCCEx(DM_SDMODE_POWEROFF)

Questa istruzione chiude WinCC e spegne il PC

Invia l'articolo in formato PDF a PDF

Usare la tastiera a video

Per attivare la tastiera a video nei sistemi con touchscreen esiste un utility richiamabile con la funzione ProgramExecute()

TouchInputPC.EXE

L’utility prevede alcuni parametri all’avvio

-NoInfo (non viene visualizzato il fastidioso copyright)
-NumPadOff (default visualizzazione normale)
-NumPadOn (visualizzazione solo del pad numerico)

Per chiudere l’utility un sistema può essere terminare la’pplicazione con il taskkill di windows

taskkill /F /IM TouchInputPC.EXE

da esegure sempre con il ProgramExecute da cScript

Invia l'articolo in formato PDF a PDF

Inviare email da WinCC

Di seguito un frammento di esempio per inviare email da WinCC

Dim strFrom
Dim strTo
Dim strSub
Dim strBody
Dim strSMTP
Dim objEmail
strFrom = “mittente@dominio1.it”
strTo = “destinatario@dominio2.it”
strSub = “Oggetto del messaggio”
strBody = “Testo del messaggio”

‘Inserisci l’indirizzo IP o il nome del server SMTP
strSMTP = “192.192.192.192″

Set objEmail = CreateObject(”CDO.Message”)
objEmail.From = strFrom
objEmail.To = strTo
objEmail.Subject = strSub
objEmail.Textbody = strBody
objEmail.Configuration.Fields.Item(”http://schemas.microsoft.com/cdo/configuration/sendusing”) = 2
objEmail.Configuration.Fields.Item(”http://schemas.microsoft.com/cdo/configuration/smtpserver”) = strSMTP

‘Per modificare la porta usare la riga seguente, normalmente non necessaria con valori default
‘objEmail.Configuration.Fields.Item(”http://schemas.microsoft.com/cdo/configuration/smtpserverport”) = 25
objEmail.Configuration.Fields.Update

Le applicazioni sono molteplici sia per l’assistenza (per esempio inviare una email in caso di riavvio del sistema) sia per l’operatore.

Invia l'articolo in formato PDF a PDF

SetTagByteBit e GetTagByteBit in cScript

Spesso è utile estrarre un bit da un byte per diminuire il numero di tag in scambio con il PLC

Di seguito il codice necessario per settare un bit all’interno di un byte

BOOL SetTagByteBit(char* pszTagDest, int iNumBit, short int iValue)
{
int iRit=TRUE;
char szTagDest[NC]; //contiene nome tag
int iAgg;

iAgg=iNumBit;

//Crea nome destinazione
sprintf(szTagDest,”%s”,pszTagDest);

if(iValue)
{
//Setta il bit
SetTagByteWait(szTagDest,GetTagByte(szTagDest) | (1<<iAgg));
}
else
{
//Resetta il bit
SetTagByteWait(szTagDest,GetTagByte(szTagDest) &~ (1<<iAgg));
}
return(iRit);

}

Di seguito il codice necessario per ottenere lo stato di un bit all’interno di un byte.

BOOL GetTagByteBit(char* pszTagSource, int iNumBit)
{

int iRit;
int iAgg;
char szTagSource[NC]; //contiene nome tag

//Crea nome sorgente
sprintf(szTagSource,”%s”,pszTagSource);

iAgg=iNumBit;

//Leggi valore
if(GetTagByte(szTagSource) & (1<<iAgg))
{
iRit=TRUE;
}
else
{
iRit=FALSE;
}
return(iRit);

}

Le funzioni servono di esempio ma sono facilmente estendibili per la stessa operazione su una word o una doppiaword.

Invia l'articolo in formato PDF a PDF

Accedere alle Tag da VBScript oggetto COM WinCC

E’ possibile che ci sia l’esigenza di accedere alle tag di WinCC e/o impostare il valore di una tag dal linguaggio VBScript.

VBScript è usato nella programmazione di pagine HTML formattate secondo lo standard Microsoft ASP.

La tecnica descritta puo’ essere usata anche nel linguaggio di scripting di Windows denominato WSH e ovviamente in VisualBasic.

Più in generale in tutti i linguaggi che prevedono l’uso della funzione

createobject

Quello che in definitiva ci manca è il nome del riferimento WinCC all’oggetto COM

Di seguito un esempio di codice per leggere una Tag

set mcp = createobject(”Wincc-Runtime-Project”)

var1=mcp.getvalue(”NewTag”) 

Di seguito un esempio per scrivere una Tag di WinCC

set mcp = createobject(”Wincc-Runtime-Project”)

var1=mcp.setvalue(”NewTag_1″,123)

Questo da la possibilità di produrre in una pagina HTML i valori delle Tag ed eventualmente settarne il valore.

formattando opportunaente con il codice HTML la rappresentazione si possono creare dei rapporti di stato presentabili con un browser.

Invia l'articolo in formato PDF a PDF Download

WinCC & Data Mining: insieme per migliorare la produzione

WinCC & Data Mining: insieme per migliorare la produzione.

La domanda che ci si pone spesso è la seguente: “Ma da tutti quei dati che lo SCADA raccoglie, si può trarre qualche informazione?”. Beh, la risposta è sicuramente e senza ombra di dubbio, SI !

Ci sono delle tecniche statistiche studiatissime in molti ambiti e oramai ben sviluppate anche su computer, per estrarre informazioni su grandi moli di dati. Queste tecniche sono raggruppate sotto la disciplina del Data Mining.

Quindi quello che ora vi chiederete è: ma che informazioni posso trarre dai dati? Quello che si trova dall’uso di queste tecniche non sono spesso informazioni scontate, ma ben si, tempi, procedure e decisioni sul come comportarsi per migliorare il processo produttivo.

Qui non voglio dilungarmi troppo su queste temi che sono ampiamente usati in ambiti dirigenziali, ma vorrei solo proporre una integrazione tra il WinCC e il Data Miner per Server SQL di Microsoft.

Una volta letto questo articolo vorrei che fosse chiaro come possono interagire due prodotti che sembrerebbero non avere niente da dirsi, ma che in realtà possono coesistere ed essere molto utili in ambito decisionale. Si pensi, ad esempio, alla direzione di una azienda che vuole monitorare la produzione di una propria linea produttiva, o più semplicemente controllare i fermi macchina, i tempi di lavorazione, le cause di guasto e monitorare i tempi di ciclo di un certo prodotto di una certa filiera di produzione.   

Avendo a disposizione uno SCADA professionale, configurato e pienamente funzionale si avrà a disposizione un DATABASE fornitissimo di dati. Ricordiamo che WinCC viene venduto con la licenza di SQL Server: uno dei migliori DBMS di casa Microsoft.
Ovviamente le variabili di interesse devono essere memorizzate in modo tale da poter essere reperibili: ricordiamo che la Siemens non lascia libero accesso a tutte le variabili. Questo discorso viene rimandato in altra sede, oppure leggetevi l’articolo WinCC & ADO reperibile in questo sito.

Una volta che sia hanno a disposizione i dati, possiamo cominciare la fase di DATA MINING sui dati, ovvero “scavare” nei dati per cercare di capire quali informazioni possono venire utili. Useremo per questa fase il Data Mining Engine di casa Microsoft.

Procediamo con il connettersi al sistema di servizio dei Servizi di Analisi che usa la metodologia  ADO standard. La macchina client deve avere i Servizi di Analisi OLE per il provider di DB (MSOLAP90.DLL) installato come viene spiegato nelle guide. Questo sistema di servizio deve essere configurato ad accettare sessioni per l’utilizzo di modelli per il data mining, e l’utente deve avere almeno dei permessi su un database sul sistema di servizio.

Il nostro esempio sarà incentrato sulla costruzione di un modello per prevedere l’andamento di una serie temporale: ad esempio la produzione tra 2 mesi piuttosto che il numero di fermi macchina previsti tra 6 mesi.

Con VBA programmiamo ADO per connetterci al servizio di sistema:

Dim conn As New ADODB.Connection
Conn.Open “Provider=MSOLAP90;Location=MyServer;” & _“Initial Catalog=MyDatabase”

A questo punto bisognerà creare una classe di TimeSeriesMining che serve per la creazione del modello. Il modello creato in questo esempio ha una colonna per ogni colonna (o fila) nella selezione di dati. Per questo modello ovviamente la Chiave sarà il Tempo ed ogni altra colonna avranno il tipo contenuto “Continuo” e uso “Predice”.

CREATE MINING MODEL TimeSeriesModel
(
[Date] DATETIME KEY TIME,
[Retail Food Total] DOUBLE CONTINUOUS PREDICT,
[Retail Food] DOUBLE CONTINUOUS PREDICT
) USING Microsoft_Time_Series

Qui di seguito propongo uno script da utilizzare sotto MS Excel oppure da utilizzare sotto WinCC se pur con qualche accorgimento.
 

‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
Public Sub CreateModel(ModelName As String, Key As String, _
DataRange As Range, RowsAsRows As Boolean)

‘ Creazione di un modello per la time series mining da Excel
‘’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
‘ inizializza variabili
On Error GoTo onerror
Dim strCreate As String
Dim strInsert As String
Dim cmd As New ADODB.Command
Dim param As ADODB.Parameter
Dim i As Integer
Dim xmla As New XMLARowsetGen
m_strModelName = ModelName

‘ Creo XMLA rowset a partire da un specifico range
xmla.FillRowset DataRange, RowsAsRows

‘ inizializzo, creo e inseriscoi comandi
strCreate = “CREATE SESSION MINING MODEL “ & ModelName & “( “
strInsert = “INSERT INTO “ & ModelName & “ ( “

‘ Add columns.
For i = 0 To xmla.ColumnCount – 1
If i > 0 Then
strCreate = strCreate & “ ,”
strInsert = strInsert & “ ,”
End If
strCreate = strCreate & _
“[“ & NormalizeName(xmla.ColumnName(i)) & “]”
strInsert = strInsert & “[“ & NormalizeName(xmla.ColumnName(i)) & “]”
strCreate = strCreate & “ “ & BuildOLEDBDMType(xmla.ColumnType(i))

If Key = xmla.ColumnName(i) Then
strCreate = strCreate & “ KEY TIME”
Else
strCreate = strCreate & “ CONTINUOUS PREDICT”
End If
Next
‘ Completo la creazione del modello
strCreate = strCreate & “) USING Microsoft_Time_Series”
‘ Completo il commando di inserzione.
strInsert = strInsert & “) @InputRowset”
‘ Eseguo il comando
cmd.ActiveConnection = m_cnAS
cmd.CommandText = strCreate
cmd.Execute
‘ Eseguo la interrogazione.
cmd.CommandText = strInsert
cmd.NamedParameters = True
cmd.Execute
End If
End Sub

Questo script darà in output una serie di valori che potranno essere visualizzati  in qualche grafico anche sotto WinCC.

(MB)

Invia l'articolo in formato PDF a PDF

Usare Microsoft Forms 2.0 ComboBox Control

Microsoft Forms 2.0 ComboBox Control è presente se è installato Microsoft Office.

Può essere utile perche’ WinCC non dispone dell’oggetto ComboBox

Per popolare l’oggetto serve usare il metodo .AddItem

Dim combo1
Set combo1 = ScreenItems(“combo1”)
combo1.AddItem “Red”

Inoltre il ComboBox puo’ essere configurato per usare colonne multiple. Per popolare le colonne aggiuntive serve usare la proprietà .List (laproprietà ha due parametri colonne e righe)

Dim combo1
Set combo1 = ScreenItems(“combo1”)
combo1.AddItem “Red”
combo1.List(0,1) = “Blue”

Infine ricordate che la proprietà .List è allineata a zero. Significa che il primo elemento ha come indice dell’array 0

Un esempio tratto dal sito WinCC.net è disponibile qui

Invia l'articolo in formato PDF a PDF Download

Manipolare database da WinCC

Dal sito WinCC.net un prezioso esempio su come effettuare query su database dall’interno di WinCC utilizzando BasicScript.

(SG)

Invia l'articolo in formato PDF a PDF Creator