Cet exemple illustre une visualisation de données basse fréquence mesurées ou calculées.
Chaque seconde, une nouvelle paire de valeurs (temps plus valeur mesurée) est ajoutée à un signal. Après cela, un graphique, qui contient ce signal sous forme de courbe, est mis à jour et également mis à jour dans la feuille. Tant que les données contenant les valeurs acquises contient moins de 100 valeurs, le signal complet est affiché. Sinon, seules les 100 dernières valeurs sont affichées.
Le code exemple et les objets FlexPro associés sont enregistrés dans la base de données Visualize.fpd. Le nom du chemin de la base de données projet est généralement C:\Users\Public\Documents\Weisang\FlexPro\2023\Examples\VBA\Visualize\Visualize.fpd ou C:>Utilisateurs>Public>Documents Publics>Weisang>FlexPro>2023>Examples>VBA>Visualize>Visualize.fpd.
Création d’une feuille pour l'affichage du graphique
La feuille requis contient uniquement un contrôle d'image qui gère l'affichage du graphique ainsi qu'un bouton pour fermer le formulaire.
Lors de l'initialisation de la feuille, le générateur de nombres aléatoires est initialisé.
Private Sub UserForm_Initialize()
' init random number generator (needed for the sample data)
Randomize
nTimerID = SetTimer(0, 0, 1000, AddressOf UpdateProc)
End Sub
Private Sub UserForm_Terminate()
KillTimer 0, nTimerID
End Sub
Insertion et mise à jour du graphique
Dans la procédure UpdateProc,
On Error Resume Next
empêche tout d'abord l'interruption de la procédure en cas d'erreur. Cela est nécessaire en raison de l'utilisation de l'API SetTimer afin de garantir que l'appel de procédure revienne toujours à Windows. Le système vérifie ensuite si le signal de destination existe déjà pour les données dans le dossier racine de la base de données. Si ce n'est pas le cas, il est créé et initialisé ; sinon, une nouvelle ligne est ajoutée au signal.
If oSignal Is Nothing Then
Set oSignal = ActiveDatabase.RootFolder.Add("Signal", fpObjectTypeDataSet)
oSignal.DataStructure = fpDataStructureSignal
oSignal.DataType(fpDataComponentX)= fpDataTypeCalendarTime
oSignal.DataType(fpDataComponentY) = fpDataTypeFloat64
' we now have a signal with one value
Else ' increase the rows of the signal
oSignal.NumberOfRows = oSignal.NumberOfRows + 1
End If
La nouvelle valeur est ensuite calculée et ajoutée au signal existant à l'aide de l'objet Range (voir également Travailler avec des ensembles de données).
' you could acquire the data here, in this sample we calculate
' the new value pair
oSignal.Value(fpDataComponentX, , oSignal.NumberOfRows) = Now
oSignal.Value(fpDataComponentY, , oSignal.NumberOfRows) = (fMax - fMin + 1)_
* Rnd + fMin
À la fin de la fonction, le graphique à afficher dans la feuille est actualisé et la propriété Image du graphique est affectée à la propriété Image du contrôle de visualisation dans la feuille.
Set oDiag = ActiveDatabase.RootFolder.Object("2D-Diagramm.2D")
oDiag.Update
Display.DiagramImage.Picture = oDiag.Picture
Objets FlexPro requis pour la visualisation
Pour pouvoir visualiser les données comme décrit ci-dessus, un graphique et un objet formule ont été créés dans le dossier racine de la base de données. Le graphique sert de base à la présentation visuelle dans la feuille. Il contient exactement une courbe constituée du signal renvoyé par la formule LastValuesOfSignal. La formule vérifie si le nombre de valeurs dans le signal est supérieur à un maximum librement sélectionnable (dans l'exemple : 100). Si c'est le cas, la formule renvoie les 100 valeurs les plus récentes du signal ; sinon, elle renvoie le signal complet.
nMax = 100
nCount = NumberOfRows(Signal)
if nCount < nMax then
return Signal
else
return Signal[-nMax, -1]
end