I use Midi messages all the time.
Here is the skinny..
First Midi Messages are composed using the Hexidecimal number system.
It starts at 00h decimal starts at 1.
For the desired preset number to be transmitted it becomes.
(Decimal Preset number-1)
So if you want Preset 1 you program 0
For preset 64 you program 63 and so on.
What really gets sent is
00 for preset 1
3F for preset 64
Also make sure your message is constructed correctly.
A Byte is an 8 bit value containing two 4bit nibbles.
A Midi Program Change message contains three Bytes.
Header Byte , Value Byte and End of Exclusive Byte
Header Byte = Cx where C is the upper nibble command for Program Change and x is the lower nibble desired midi channel.
Value Byte = Desired preset number
End of Exclusive (EOX) = F7 notates end of a particular message string.
Quick Midi Channel Decimal to hex table.
Here is Decimal 1 to 17.
Note for Midi Channel selection keep them between 1-16 Dec as 17 Dec notates Omni which means any channel. You don't want that.
17=10 (Omni mode) responds to any and all channel commands. You don't want this.
Back to the program change for example say you set the Kemper on Midi Channel 4 and you want recall Preset 8
The program change message
Preset command header Byte Cx where C is the program change command and x= Dec Midi Channel number-1 becomes C3
Preset change Value Byte = Desired Dec preset number-1 which becomes in this case
Last the EOX Byte F7
The complete message to send would be. C3 07 F7 .
Any Midi Program Change needs to be constructed like the one above.
Even MCC messages should be created in a 3 Byte format. Though MCC messages in theory can omit the EOX I would strongly suggest to included it.
MPC messages must include an EOX Byte.
The Kemper Midi Channel in this case would be set to 4.
Search for a Dec to Hex conversion table on the web as it will come in handy for you in your programming endevours.
Hope this helps.