Consensus values for pieces in Xiangqi are R=10, C=6-4 (opening-endgame), H=4-6, A=E=2, P=1-3 (unpassed/passed). So C and H only approximately half a Rook, and it depends on the game phase which of the two is somewhat stronger. And one should realize here that the Horse (Mao) is only worth half an orthodox Knight on a board as crowded as orthodox chess. (Which is quite a bit more crowded than Xiangqi, so that extrapolating the Xiangqi values to that higher density might give H=3 and C=7. That would then imply N=6, which indeed gives the correct relative value of R and N. So this suggests C could be worth slightly more than a Knight in a FIDE context.)
In games without drops the opening value of pieces is dominated by what they will be worth in the end-game. E.g. it is still much better to have a Rook in the opening than a Bishop or Knight, even though a Rook on a crowded board trapped behind his own Pawns is hardly of any use at all. But it is almost unavoidable that it will get to express its true power later in the game, so that hanging on to it is a good strategy. But for Cannons the end-game value is low, and rather than waiting for their potential to develop with time, one should try to trade them in the most-favorable way before that time.
To do a meaningful empirical test of the Cannon value you would need to do it with an engine that handles it well. Otherwise the value will be underestimated. ("A piece is as strong as the hand that wields it.") And handling hoppers well means you have to be very much aware when it becomes time to exchange them for other minors. If you do that too early you would not have exploited any superiority while it still existed; if you do it too late you will be stuck with them when they get nearly useless. To make the program seek trading at the right moment it is essential that it makes the hopper value dependent on the piece density, in the correct way. Which would have too be determined empirically too.
Consensus values for pieces in Xiangqi are R=10, C=6-4 (opening-endgame), H=4-6, A=E=2, P=1-3 (unpassed/passed). So C and H only approximately half a Rook, and it depends on the game phase which of the two is somewhat stronger. And one should realize here that the Horse (Mao) is only worth half an orthodox Knight on a board as crowded as orthodox chess. (Which is quite a bit more crowded than Xiangqi, so that extrapolating the Xiangqi values to that higher density might give H=3 and C=7. That would then imply N=6, which indeed gives the correct relative value of R and N. So this suggests C could be worth slightly more than a Knight in a FIDE context.)
In games without drops the opening value of pieces is dominated by what they will be worth in the end-game. E.g. it is still much better to have a Rook in the opening than a Bishop or Knight, even though a Rook on a crowded board trapped behind his own Pawns is hardly of any use at all. But it is almost unavoidable that it will get to express its true power later in the game, so that hanging on to it is a good strategy. But for Cannons the end-game value is low, and rather than waiting for their potential to develop with time, one should try to trade them in the most-favorable way before that time.
To do a meaningful empirical test of the Cannon value you would need to do it with an engine that handles it well. Otherwise the value will be underestimated. ("A piece is as strong as the hand that wields it.") And handling hoppers well means you have to be very much aware when it becomes time to exchange them for other minors. If you do that too early you would not have exploited any superiority while it still existed; if you do it too late you will be stuck with them when they get nearly useless. To make the program seek trading at the right moment it is essential that it makes the hopper value dependent on the piece density, in the correct way. Which would have too be determined empirically too.