Set User Buffer

Overview of User Buffer

For G-series

In the G-series, the conversion data is transferred to the user buffer in the following format.

The figure above shows the transfer method to the user buffer when Ch0, Ch1, (2 channels in total) are used.
For data transfer, a transfer packet with the size of 4 bytes is performed in the minimum unit.
Two AD conversion data are stored as a binary value in one packet.
In the example shown above, 0 channel data is stored in the lower 2 bytes of one packet and 1 channel data is stored in the upper 2 bytes.
When using 2 channels, 1 packet (1 transfer times) = 1 sampling.

The figure above shows the transfer method to the user buffer when Ch0, Ch1, Ch2 (3 channels in total) are used.
Basically, one packet is used for two conversion data, as shown above, when odd channels are used, the upper 2 bytes of the packet are unused.
When using 3 channels, 2 packets (2 transfer times) = 1 sampling.

Set User Buffer

When using the user buffer, it is necessary to register the application memory to which the conversion data is transferred in advance in the driver.
Use function AioSetAiTransferData to set user buffer.

Ret = AioSetAiTransferData ( Id , DataNumber , Buffer )

In DataNumber, specify the capacity of application memory in units of transfer packets.
A transfer packet represents the data size of the smallest unit at the time of data transfer, and its size is 4 bytes.

In Buffer, specify the address of the allocated array in the application.
The number of arrays must be at least as many as the DataNumber.

Example) When 1000 sampling is performed using 2 channels

Since one packet is used for one sampling, 1000 numbers of arrays are reserved and DataNumber = 1000.

Example) When 1000 sampling is performed using 3 channels

Since two packets are used for one sampling, 2000 numbers are allocated and DataNumber = 2000.

 


 

For Z-series

For Z-series devices such as AI-1204Z-PE, the data storage method is different from the G-series.

For data transfer, a transfer packet with the size of 4 bytes is performed in the minimum unit.
In one packet, two A/D conversion data are stored as binary values in the same way as G-series devices.
One piece of data is stored as follows.

One data (half data of one packet) is 16 bit data.
Among them, the lower 12 bits are the actual data.

Among the upper 4 bit data, the data of the lower 3 bits, which is the hatched portion in the above figure, is the data used for calculation in the device, and is unnecessary data for the user.
Therefore, we need to create an application to ignore this data.

The top 1 bit is a bit for judging whether 12 bit data is valid or invalid.
When this bit is 1, the data is invalid data. When this bit is 0, the data is valid data.

Therefore, when using the user buffer, It is necessary to judge whether the top 1 bit is 0 or 1 to judge whether it is valid data or invalid data.

The data transfer method is performed in packet units, which is same as the G-series.
For details, please refer to AioSetAiTransferData and AioSetAiStopTimes.
Please notice that the way of storing data in packet units is different from G-series when the number of used channels and the number of transfer times are even number or odd number.

As follows, one packet is expressed as .

 

When the number of used channels is 1 (example: only Ch0 is used)



If the used channel is 1 channel and the number of transfer times is set to even number, the data is stored without any gap every packet, so there is no problem.




When the number of transfer times is set to odd number, invalid data is stored in the upper 2 bytes of the last packet.
1 is set to the top 1 bit of the lower packet.
If this bit is set, we need to make programming to ignore this data in application.

 

When the number of used channels is 2 (example: Ch0, Ch1)

 

When the used channel is 2 channels

The data is stored with no gap every packet, so there is no attention point in setting the number of transfer times.

 

When the number of used channels is 3 (example: Ch0, Ch1, Ch2)

When the used channel is 3 channels, invalid data is stored in the upper 2 bytes of the even data packet regardless of the number of transfer times.
1 is set to the top 1 bit of the upper packet.
we need to make programming to ignore this data in application.

 

When the number of used channels is 4 (example: Ch0, Ch1, Ch2, Ch3)


When the used channel is 4 channels, the data is stored with no gap every 2 packets, so there is no attention point in setting the number of transfer times.