Afficher un graphique sur un formulaire

23.04.2021

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

Partager l’article ou envoyer par mail :

Vous serez probablement intéressé par les articles suivants :