We are facing an issue mapping multi-element ADIs to PDOs on our CANopen CompactCom B40 module. Specifically, in our ADI entry list, we have an ADI with data type ABP_UINT32 and length 2. This represents a 64-bit status register for our product. This ADI (#13) is mapped to a PDO write map as shown in the screenshot below, with two other ADIs (UINT32 length 1) in the next PDO write map. Our issue is that when we run our application, the second writemap’s contents is constantly being transmitted over the CANopen network as expected, but the first writemap’s contents are only transmitted when the value stored in the ADI changes. Since this first PDO/writemap corresponds to a status register, it only ends up being transmitted over CANopen when a user action or fault causes the status register to change on the host application. Shortening this ADI to be a single UINT32 type, we find that the PDO is constantly being transmitted without issue (but the data is truncated since we shortened the ADI to perform this test).
We have confirmed that our callback function is being regularly called and is updating the ADI’s stored value continuously, just as it is doing with our other two ADIs in the second writemap. The only difference as far as we can tell is that the ADIs that are working correctly have constantly changing values since they correspond to ADC measurements that have noise. The ADI that is not being transmitted still has its value updated by the callback function, it just does not change very often. It is also worth noting that the exact same code works with the EtherNet/IP CompactCom module without issue, and we see all 3 ADIs being transmitted as PDOs continuously. Any help in finding the source of this issue would be appreciated.