CHECKSUM should work on the existing D memory buffer. Based on your description, it looks like the checksum is in Byte #18, not byte #17, which is data? I have written the logic below assuming byte #17 is data and byte #18 is the checksum byte.
Note that Do-more uses 0-based offsets, not 1-based offsets. Hence Byte #2 is Offset 1, Byte #18 is Offset 17 (this is probably the source of
17 vs. 18, since you stated that you had extracted checksum at the 18th byte, at offset 17

).
CHECKSUM
On Buffer: D0
Function: CheckSum:8
Initial Value: 0
Starting Offset: 1 // 0-based offset
Ending Offset 17 // 0-based offset, INCLUDES the Checksum byte; make it 16 to NOT include the checksum byte
Destination V0
V0 should equal 0 when you include the checksum byte