Afficher un graphique sur un formulaire
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 diagramme, qui contient ce signal sous forme de courbe, est mis à jour et également mis à jour dans le formulaire. Tant que l'ensemble de 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 de l'exemple et les objets FlexPro correspondants sont stockés dans la base de données Visualize.fpd. Le chemin vers la Base de données du projet est généralement C:\Utilisateurs\Public\Documents\Weisang\FlexPro\2021\Examples\VBA\Visualize\Visualize.fpd or C:>Users>Public>Public Documents>Weisang>FlexPro>2021>Examples>VBA>Visualize>Visualize.fpd.
Création d'un formulaire pour l'affichage des diagrammes
Le formulaire requis ne contient qu'un contrôle d'image qui gère l'affichage du diagramme ainsi qu'un bouton pour fermer le formulaire.
Pendant l'initialisation du formulaire, la fonction SetTimer de l'API est utilisée pour initialiser un minuteur à intervalle, qui appelle la procédure UpdateProc une fois par seconde. Pendant la phase de terminaison du formulaire, le timer créé est arrêté à l'aide de la fonction KillTimer de l'API.
Private Sub UserForm_Initialize()
' init générateur de nombres aléatoires (nécessaire pour l'échantillon de données)
Randomiser
nTimerID = SetTimer(0, 0, 1000, AddressOf UpdateProc)
End Sub
Private Sub UserForm_Terminate()
KillTimer 0, nTimerID
End Sub
Insertion et mise à jour du diagramme
Dans la procédure UpdateProc,
En cas d'erreur, reprendre la suite
est utilisé pour éviter que la procédure ne soit interrompue en cas d'erreur. L'utilisation de l'API SetTimer l'exige pour s'assurer que l'appel de procédure renvoie toujours à Windows. Ensuite, la procédure vérifie si le signal cible des données est déjà disponible 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.
Si oSignal n'est rien alors
Set oSignal = ActiveDatabase.RootFolder.Add("Signal", fpObjectTypeDataSet)
oSignal.DataStructure = fpDataStructureSignal
oSignal.DataType(fpDataComponentX)= fpDataTypeCalendarTime
oSignal.DataType(fpDataComponentY) = fpDataTypeFloat64
' nous avons maintenant un signal avec une valeur
Else ' augmenter les rangs du 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 aussi Working with Data Sets).
Vous pouvez obtenir les données ici, dans cet échantillon nous calculons
' la nouvelle paire de valeurs
oSignal.Value(fpDataComponentX, , oSignal.NumberOfRows) = Now
oSignal.Value(fpDataComponentY, , oSignal.NumberOfRows) = (fMax - fMin + 1)_
* Rnd + fMin
À la fin de la fonction, le diagramme à afficher dans le formulaire est mis à jour et la propriété Image du diagramme est affectée à la propriété Image du champ de contrôle de visualisation dans le formulaire.
Set oDiag = ActiveDatabase.RootFolder.Object("2D-Diagram.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 diagramme et un objet formule ont été créés dans le dossier racine de la base de données. Le diagramme sert de base à la présentation visuelle dans le formulaire. Il contient exactement une courbe constituée d'un signal qui fournit la formule LastValuesOfSignal. La formule vérifie si le nombre de valeurs dans le signal est supérieur au maximum personnalisable (100 dans l'exemple). 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)
si nCount < nMax alors
retourner le signal
sinon
retourner Signal[-nMax, -1]
fin