Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.
Showing results for
Show only
|
Search instead for
Did you mean:
Invite a Co-worker
Send a co-worker an invite to the portal.Just enter their email address and we'll connect them to register. After joining, they will belong to the same company.
You have entered an invalid email address. Please re-enter the email address.
This co-worker has already been invited to the Exchange portal. Please invite another co-worker.
Please enter email address
Send InviteCancel
Invitation Sent
Your invitation was sent.Thanks for sharing Exchange with your co-worker.
📖HomeBack Internal points provide a mechanism that can be used to add historic data into the system. These methods can be called using the automation interface or by writing some Structured Text Logic.
The basis of the code outlined below used two internal point properties named PresetTimestamp and PresetQuality. PresetTimestamp stores the timestamp (in UTC format) where the new data record will be added. PresetQuality stores the quality flag that will be associated with the new data record.
To add the historic record, set the PresetTimestamp and PresetQuality as required and set the new value for this record into the field CurrentValue for analog points or CurrentState for digital points. This will then add the record into the historic database with the correct timestamp and quality flag.
The structured text program below shows an example of this mechanism by writing a historic record into the database 14 days before the current time.
PROGRAM HistoricDemoVAR (* The order of these variables is important, ensure that the time and qualities variables are defined BEFORE the actual value as when the program exits, they are written to in the order they are defined here. They can be used in any order in the code however. *) (* These two have to be %Q / write-only variables *) AnalogTime AT %Q(.Analog.PresetTimestamp) : DATE_AND_TIME; AnalogQuality AT %Q(.Analog.PresetQuality) : INT; (* This can be of any declaration type *) Analog AT %M(.Analog.CurrentValue) : INT;END_VAR(* Use RETAIN keyword so different value written each execution *)VAR RETAIN Count : INT;END_VAR (* Calculate a new time (e.g. 14 days prior to current) *) AnalogTime := SUB_DT_TIME(NOW(),MAKE_TIME(14,0,0,0,0)); (* Set quality: 0 is Bad, 192 is Good *) AnalogQuality := 192; (* Change Count's value for the next time this program is run *) Count := Count + 1; IF (Count > 100) THEN Count := 0; END_IF; (* Set value to a changing integer *) Analog := Count;END_PROGRAM
Ensure your historic lifetime is long enough to allow storage of the data, and also that the date/time isn't inside the archive period as the data from that time is read only and you will not get an error.
If you are having problems with it correctly showing the quality, set the Update Outputs properties on the structured text to be Always.