Citect Scada 2018 - IOServer stops when transferring data between Array's

Hi,

When I try to move data from one array defined in Cicode to an array defined in Variable Table, the IOServer "halts" and sometimes stops and then restarts.

My Simple test code in Cicode Editor is as follow:
REAL HPCData[8760];
FUNCTION Transfer()
INT i;
FOR i = 0 TO 8760 DO
  HPCPerfDatahttps://softwareforums.aveva.com/cfs-file/__key/system/emoji/1f4a1.svg = HPCDatahttps://softwareforums.aveva.com/cfs-file/__key/system/emoji/1f4a1.svg;
END
The Variable Array HPCPerDatahttps://softwareforums.aveva.com/cfs-file/__key/system/emoji/1f4a1.svg is defined as follow:
TagName: HPCPerDatahttps://softwareforums.aveva.com/cfs-file/__key/system/emoji/1f4a1.svg
I/O Device: GENERIC
Data Type: REAL
Address: R1[8760]
If I reduce the array size, the IOServer is not halted/stopped that frequently. As an array may have 32767 elements according to help files, this number should not be an issue.
Appreciate any input that can help enlighten what's going on and perhaps there are some good best practices in Citect on how to work efficient with Arrays. 
Thanks,
Rune
Parents
  • Hi Rune,

    Glad you found a solution.

    By using SleepMS(1) you are delaying your loop at least by 8759 milliseconds, which explains most of the extra delay.
    SleepMS(0) is usually enough for Citect to allow other threads and processes to run without problems.

    Splitting up I/O servers can be a valid option if a single I/O server is running out of resources (CPU, memory, disk), and if your budget allows for the extra costs of hardware, software and licenses. Normally you would do that for applications with really large amounts of I/O points (like 10,000+ points or so).

    I don't know if it is possible to avoid the copy loop altogether by using the Variable Tags directly in your application?
Reply
  • Hi Rune,

    Glad you found a solution.

    By using SleepMS(1) you are delaying your loop at least by 8759 milliseconds, which explains most of the extra delay.
    SleepMS(0) is usually enough for Citect to allow other threads and processes to run without problems.

    Splitting up I/O servers can be a valid option if a single I/O server is running out of resources (CPU, memory, disk), and if your budget allows for the extra costs of hardware, software and licenses. Normally you would do that for applications with really large amounts of I/O points (like 10,000+ points or so).

    I don't know if it is possible to avoid the copy loop altogether by using the Variable Tags directly in your application?
Children
No Data