Every unit has a message parameters cache, for new unit its empty. When Wialon receive new messages - it updates messages params and triggers events, for example
Message 1
Suppose wialon get message from new unit with two new parameters {time:0, params:{a:0, b:1}}
It trigger event for this message {a:{ct:0, at:0, v:0}, b:{ct:0, at:0, v:1}}
When you get event, you update messages parameters cache of unit {a:{ct:0, at:0, v:0}, b:{ct:0, at:0, v:1}}
Message 2
When Wialon receive next message {time:10, params:{a:0,c:1}} it analyze units message params
and trigger event about parameters changes {a:10, c:{ct:10, at:10, v:1}} - parameter 'a' not changed but it presented in this message (10 - is message time in this sample), 'b' wasn't in message - so its not in event
You handle this event and update messages params cache, it should look like
{a:{ct:0, at:10, v:0}, b:{ct:0, at:0, v:0}, c:{ct:10, at:10, v:1}}
Message 3
3rd message with all 3 parameters changed comparing with their previous values {time:100, params:{a:3, b:4, c:5}}
Event {a:{ct:100, at:100, v:3}, b:{ct:100, at:100, v:4}, c:{ct:100, at:100, v:5}}
Finally, message parameters cache {a:{ct:100, at:100, v:3}, b:{ct:100, at:100, v:4}, c:{ct:100, at:100, v:5}}