Specifically:
[C] -> [Broadcast] ARP packet
[H] -> [C] ARP packet
[C] -> [H] ping
[H] -> [C] ping
[C] -> [H] ping
[H] -> [C] ping
[H] -> [C] ARP packet
[C] -> [H] ARP packet
[C] -> [H] SYN packet
[H] -> [C] SYN, ACK packet
.
.
.
Where [C]: client/PC, and [H]: host/device
Just as a quick explaination. ARP is the protocol thats used to figure out which machine has which local IP address. Basically whenever you try to connect to some device with a certain IP address your computer starts with broadcasting onto the network "Hey who'se got the IP for XXX", and the device with that IP then answers. Basically screaming into the void and hoping someone responds. This is exactly what you see before the first ping. Then before setting up the TCP connection, the same happens again, just instead of a broadcast, because the PC already knows the target, they just ask directly: "Hey do you still have that IP" and get a response.
So just consider these as noise.
... and this generates more traffic than just establishing the connection on the original software.
Perhaps the device is expecting those pings? I dunno...
I mean it wouldn't be something I would generally call a good practice (ICMP packets are often by many routers, active switches and so on, depriorized or completely dropped) so relying on ICMP communication is really wonky, that said, you are talking about specialized embedded hardware, and I have seen all kinds of stuff where the engineers have tried to "be smart".
Maybe look into the Ping packages, maybe they do some special stuff in there. ICMP messages can have additional data, which is not part of the protocol itself, but maybe the device does some special stuff there.
Doing ICMP is not that trivial, as it requires to work with IP_RAW sockets, and I don't think the fcl has a native implementation. I think indy supports ICMP sockets, so you may look into that direction.