The issue with the Carnosaur is not unique to it, it's a game-wide problem facing almost any monster, in that blocks of infantry are popular and common, and cannons are not uncommon and very easily used to take monsters out.
The problem is, you can't just slap a 4+ ward save on a monster to give it protection from cannons, or make it T7 to make it more durable against hordes of troops, because suddenly the balance tips the other way. It also means when 9th edition comes around and they change the rules again, possibly to the detriment of cannons and hordes alike, the monsters become overpowered.
There are 2 things I would do to make monsters "viable" again (that's in quotes because I can and do use monsters all the time, to great success, but mine is not a cannon-heavy meta)
1. Increase the cost of cannons/any long-range highly accurate high-strength weapon and/or make them use the BS of the crew firing them.
2. Have some kind of mechanic in place enabling the monster to deny ranks to an enemy it fights, when fighting to the flank or rear. I don't understand why 10 skeleton horsemen charging into the flank of swordsmen makes their rank bonus disappear, but a stegadon's charge does not. I'd say use the combat resolution, eg. A stegadon charges into the flank of a unit of 30 swordsmen, 5 wide, 6 deep, the stegadon inflicts 9 wounds in total on the swordsmen, taking none in return.
The swordsmen have a banner, however since the number of casualties inflicted exceeds their number of ranks (9>6), they do not receive their rank bonus to combat resolution.
The swordsmen lose the battle by 8, and since this also exceeds their number of ranks (8>6), they do not count as being steadfast, and therefore need snake eyes to stay put.
This might sound like a whitewash, making monsters far too strong, but the stegadon needed to:
A. Get into position for a flank charge
B. Successfully complete that charge
C. Cause 7 or more casualties in the combat
D. Have the enemy inflict none back
Any of which it could fail to achieve and therefore receive no benefit. This represents the monster crashing into the enemy lines and dealing so much carnage that the enemy line falters.
My gaming group and I have trialled this extra rule and so far it's been great, it requires skill on your part to line up the monster properly, so it hasn't dominated the game, but it makes monsters that much more likely to run units down.
Thoughts?