Curves are stored in the Curve Store. The Curve Store can hold a maximum of 128 curves. The non-volatile storage capacity for curves is less. The curve storage capacity varies by controller, as shown below. When a curve is added, the Event Log will display the size of the curve in bytes.
Controller |
Curve Store Capacity |
RMC200 Lite |
16 MB |
RMC200 Standard |
64 MB |
RMC150E |
8 MB |
RMC75E |
8 MB |
RMC75S |
256 KB |
RMC75P |
256 KB |
Non-Volatile Memory
The curves in the Curve Store will be lost when power is removed from the RMC. However, curves can be saved to non-volatile Flash memory if they were downloaded from the Curve Tool or added using the Curve Add command with the Permanent life cycle option.
The size consumed by curves in Flash is as follows, where N is the number of points in the curve:
Curve Type |
Size |
Constant, Linear |
8xN + name length + description length + 40 bytes |
Cubic |
16xN + name length + description length + 40 bytes |
The curves share the same Flash storage as the entire RMC project, including axis parameters, plot templates, variable table defaults, user programs, and curves. The total Flash size is as follows:
Controller |
Flash Size |
RMC200 |
6016 KB |
RMC150E |
1024 KB |
RMC75E (1.1G and newer) |
1024 KB |
RMC75E (1.1F and older) |
256 KB |
RMC75P |
96 KB |
RMC75S |
96 KB |
Curve Store Capacity Quick Charts
The following charts show the maximum allowable sizes for equal-length simple cubic curves in the various RMC controllers with various numbers of curves. This assumes curves are added via the Curve Add command with the Partial Curve - Equally Spaced format. This will fill the curve store, but the curves will not fit in non-volatile memory.
Simple Cubic Curves, Max Length for: |
RMC200 Standard |
RMC200 Lite |
RMC75E RMC150E |
RMC75P RMC75S |
Single Curve |
1,677,715 points |
419,424 points |
209,708 points |
8,186 points |
8 Equal-length Curves |
372,819 points |
93,199 points |
46,596 points |
1,518 points |
16 Equal-length Curves |
197,370 points |
49,336 points |
24,665 points |
783 points |
50 Equal-length Curves |
65,784 points |
16,440 points |
8,216 points |
253 points |
80 Equal-length Curves |
41,416 points |
10,348 points |
5,170 points |
156 points |
128 Equal-length Curves |
26,002 points |
6,494 points |
3,244 points |
95 points |
Curve Store Memory Uses
The Curve Store contains a pool of memory as described above. There are four operations that will consume Curve Store memory:
Download Buffer
This buffer is allocated for each curve downloaded from the Curve Tool only for the duration of that curve download. Therefore no more than one download buffer is allocated at a time.
Re-assembly Buffer
This buffer is allocated when a partial curve download is started. This buffer is used to re-assemble the parts submitted individually into a single curve data structure. This buffer is freed up after the final part is added and the curve is ready, or when a new partial curve download is started—cancelling the existing download—or when the Curve Delete All (85) command is issued. Notice that no more than one re-assembly buffer is allocated at a time.
Computation Buffer
This buffer is allocated when a curve is being added if the interpolation method requires extra memory to prepare the curve for interpolation. This currently only applies to curves using the cubic interpolation method. This buffer is freed up when the curve adding is completed. Like the re-assembly buffer, no more than one computation buffer is allocated at a time.
Curve Object
Each curve that has been successfully added to the Curve Store will occupy a block of memory in the Curve Store until that curve is deleted. See the Curves Overview topic for details on deleting curves. There can be up to 128 curve objects in the curve store at once, each potentially a different size.
Download Buffer Size
This buffer is allocated for each curve downloaded from the Curve Tool only for the duration of that curve download. No more than one download buffer is allocated at a time. The download buffer size depends on the interpolation type as shown below, where N is the number of points in the curve:
Curve Type |
Size |
Constant, Linear |
8xN + name length + description length + 40 bytes |
Cubic |
16xN + name length + description length + 40 bytes |
Re-assembly Buffer Size
As described in the Creating Large Curves using the Curve Add Command topic, the partial curve data format has a field called Total Curve Data Length (TCDL). This field indicates the number of registers in the re-assembled curve data. Using the TCDL value, the size of the re-assembly buffer size can be found using the following formulas:
|
RMC200 |
RMC75E RMC150E |
RMC75P RMC75S |
Re-assembly Buffer Size |
TCDL x 4 + 16 bytes |
TCDL x 4 + 32 bytes |
TCDL x 4 + 8 bytes |
Computation Buffer and Curve Object Sizes
The amount of space required for the computation buffer and curve object depends on several factors. The most important factor is the interpolation method to be used. Formulas for calculating the memory requirements are given below.
Constant and Linear Interpolated Curves
These two types of curves do not require a computation buffer. The curve object sizes are given in the chart below:
|
RMC200 |
RMC75E RMC150E |
RMC75P RMC75S |
Curve Size |
8xN + 112 bytes |
8xN + 112 bytes |
8xN + 88 bytes |
Cubic Interpolation Curves
The memory requirements for cubic curves depend on the options and characteristics of the curve. The term "simple curve" below means that the curve has no fixed-velocity points or constant-velocity segments, which can be added by the Advanced curve data format or the Overshoot Protection and Auto-Constant Velocity interpolation options. The term "advanced curve" below describes a curve that does have at least one fixed-velocity point or constant-velocity segment.
The following charts show the memory requirements for simple curves:
Simple Curves with Zero- or Natural-Velocity Endpoints
|
RMC200 |
RMC75E RMC150E |
RMC75P RMC75S |
Curve Size |
20xN + 160 bytes |
20xN + 144 bytes |
20xN + 120 bytes |
Computation Buffer Size |
16xN + 48 bytes |
16xN + 64 bytes |
8xN + 24 bytes |
Simple Cyclic Curves
|
RMC200 |
RMC75E RMC150E |
RMC75P RMC75S |
Curve Size |
20xN + 120 bytes |
20xN + 120 bytes |
20xN + 96 bytes |
Computation Buffer Size |
48xN - 32 bytes |
48xN + 32 bytes |
24xN + 8 bytes |
The sizes for advanced curves are difficult to compute, but will generally be at least as large as the values shown in the Simple Curves with Zero- or Natural-Velocity Endpoints chart above. The best way to determine the size required by an advanced curve is to add the curve and look at the size reported in the Event Log.
Memory Requirement Examples
Example 1
How much Curve Store memory is used to add a 10,000-point Simple Cubic Curve with Zero-Velocity Endpoints to the RMC75E using the Curve Add command?
Downloading this curve using the Curve Add command will require the Partial Curve Data Format, and therefore require a re-assembly buffer. If we use the Partial Curve – Evenly-Spaced format (see Curve Data Formats), then the Total Curve Data Length will be 10,004 registers. Therefore, our re-assembly buffer will require 4xTCDL + 32 or 40,048 bytes.
Next, because this curve uses the cubic interpolation method, the curve will require a Computation Buffer. Using the charts above, we find that the Computation Buffer for a Simple Cubic Curve with Zero-Velocity Endpoints will require 16xN+64 bytes or 160,064 bytes.
Finally, the curve object itself will require 20xN+144 bytes or 200,144 bytes. Therefore, the Curve Store must have 40,048 + 160,064 + 200,144 or 400,256 bytes available to successfully download this curve. Notice however, that after the curve has been added, the re-assembly and computation buffers will be freed up, leaving only 200,144 bytes used for this curve from the Curve Store.
Example 2
How much Curve Store memory is used to add fifty (50) Cubic Curves with Zero-Velocity Endpoints—each with 10,000 points—to the RMC75E using the Curve Tool?
When downloading a curve using the Curve Tool, each download will require a Download Buffer of 16 bytes per point plus curve name and description length plus 40 bytes. If we assume that each curve’s name and description use 20 characters total, then each 10,000-point Cubic curve will require a download 160,060 bytes. The Computation Buffer and Curve Object will have the same sizes as calculated in Example 1, 160,064 bytes and 200,144 bytes respectively.
When each curve is downloaded, the Download Buffer will be allocated, then the Curve Object, and finally the Computation Buffer. Once the curve is successfully added, the Download and Computation Buffers will be freed up, leaving only the Curve Object in the Curve Store. Each of the 50 curves is downloaded in this manner. Therefore, the approximate total Curve Store memory requirement for 50 of these curves is 50 Curve Objects, 1 Download Buffer, and 1 Computation Buffer, which is ( 200,144 x 50 ) + 160,060 + 160,064 = 10,327,324 bytes or 9.8 MB. Notice that this exceeds the 8MB Curve Store capacity available on the RMC75E. Therefore, these curves cannot be downloaded to this controller.
Fragmentation of the Curve Store Memory
After adding and deleting curves, the Curve Store memory may become fragmented, limiting the memory available for adding curves. To clear the memory completely, use the Curve Delete All (85) command.
See Also
Curves Overview | Curve Data Formats
Copyright © 2025 Delta Computer Systems, Inc. dba Delta Motion