I have some results if anyone is interested. I tested RS485, CANbus, and 2-wire DSL extender.
In all tests I used Arduino as a test platform, as Arduino is considered expendable. My test program was written in Python; It it generates a 20byte text string containing a number. The arduino on the other end receives the string, parses out the number, adds one, and retransmits the string back to Python on my PC. Python checks the number, adds one, and sends it back, and repeat.
The tradeoff for using Arduino is that the crude software protocols I wrote for testing purposes did not offer much in the way of error handling. With better protocols in place I could have gotten better results I'm sure.
I tested with one of our existing machines with a 100M umbilical. I looped through the umbilical twice to get 200M. The comms bus was shielded twisted pair 26ga. There were 3 power busses live in the cable:
- 990V, 2A clean sine AC
- 230V, 3A, clean sine AC
- Motor power: 0V-3000V, 0-60Hz, 0-3.7A from a VFD, PWM frequency ranged from 8kHz to 20kHz.
For RS485:
On the "surface" side I used a
CH341 USB dongle to my PC.
On the "subsea" side I used an arduino Uno with
RS485 shield
RS485 worked fine with live 990V and 230V until I started the motor, then my comms were obliterated. Bytes were corrupted beyond repair. A better protocol with auto correction and retransmission might have helped.
For CAN bus:
On the "surface" side I used a Arduino UNO with
CANBUS shield
On the "subsea" side I used an Arduino NANO connected to a
CAN module (just to translate CAN to serial)
CAN bus failed miserably once I started the motor. Not only were comms impossible, but it also caused a USB fault in the PC which was powering the "subsea" arduino. I think there is no isolation between the transciever and the USB port. I do not recommend anyone try this as I did, and I don't think any higher protocol would have helped.
For ethernet (DSL extender):
On the "surface" side and on the "subsea" side I used a pair of
Netsys DSL extenders.
On the "subsea" side I had an Arduino UNO connected to the extender via an
ethernet shield.
Once I turned on the motor, comms got spotty. There was some throughput, but occasional pauses of up to 5 seconds between transmissions.
Then I adjusted the DIP switches on the back, Set all ON (raises SNR and increases retry period to 8mS) and then things got better. The improvement was not immediate, but after 30S or so, it started to come through with no errors and minimal latency.
According to the Netsys manual, there is something of a "learning" period which may last up to 3min, wherein the devices characterize the noise environment and adapt to it.
I am very impressed with the Netsys modules. I did not think they would work. But I am still not 100% comfortable with the "learning" period at the beginning.
I am going to revisit RS485 with some more advanced equipment, maybe a devicenet enabled PLC, and see how much better an
INDUSTRIAL device can withstand the noise.