Telnet with 3 W5500 Servers and 1 W5500 Client - Failure to Connect to Switch

Hi Everybody,
This is my first post here. I spent some hours looking for a solution to this and was unable to find a configuration where there were 3 (more than one) listening servers and 1 client.
The client sends out information to one of the 3 servers depending on where in a machine it is. The client gets its information over I2C and then converts it to a LAN and then after it is received, it converts back to I2C. I was really struggling with long I2C lines and all that is bad about that.
This solution works but in the morning when the machine is started, one of the servers fails to connect to the switch. If I open the cover and hit the reset button, it will connect and work. I tried to add in a watchdog to reboot if there is a disconnected cable but after a failed boot, a hard reset is the only thing that works. I have thought about moving to a more robust watchdog but I really want to understand the root cause.
I have tried assigning a different port to each server but that was no better.

Here is a giff of the connection led (on the right sheild):
20191112_121043

And my Server Code:

/*
 DHCP Chat  Server WILL RECEIVE INFO FROM CLIENT

 A simple server that distributes any incoming messages to all
 connected clients.  To use, telnet to your device's IP address and type.
 You can see the client's input in the serial monitor as well.
 Using an Arduino Wiznet Ethernet shield.

 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13

 created 21 May 2011
 modified 9 Apr 2012
 by Tom Igoe
 modified 02 Sept 2015
 by Arturo Guadalupi
 Based on ChatServer example by David A. Mellis

 */
#include <avr/wdt.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network.
// gateway and subnet are optional:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 187);
//IPAddress myDns(192, 168, 1, 1);
//IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 0, 0);

// telnet defaults to port 23
EthernetServer server(23); //port 23 is default for telnet services
boolean gotAMessage = false; // whether or not you got a message from the client yet

int StationNumber = 0;
int UOSgoSteps = 0;
int UGSgoSteps = 0;
int LOSgoSteps = 0;
int LGSgoSteps = 0;
byte byteRcvd0 = 0;
byte byteRcvd1 = 0;
byte byteRcvd2 = 0;
byte byteRcvd3 = 0;
byte byteRcvd4 = 0;

void reboot() {
  wdt_disable();
  wdt_enable(WDTO_15MS);
  while (1) {}
}

void setup() {
   Serial.begin(9600);
  Wire.begin();
    pinMode(4, OUTPUT);
  digitalWrite(4,HIGH); //Turn off SD Card
  // You can use Ethernet.init(pin) to configure the CS pin
  Ethernet.init(10);  // Most Arduino shields
  //Ethernet.init(5);   // MKR ETH shield
  //Ethernet.init(0);   // Teensy 2.0
  //Ethernet.init(20);  // Teensy++ 2.0
  //Ethernet.init(15);  // ESP8266 with Adafruit Featherwing Ethernet
  //Ethernet.init(33);  // ESP32 with Adafruit Featherwing Ethernet
  
    // start the Ethernet connection:   
  Ethernet.begin(mac, ip);



    if (Ethernet.hardwareStatus() == EthernetNoHardware) {
      Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
      while (true) {
        delay(1); // do nothing, no point running without Ethernet hardware
      }


  }
  // print your local IP address:
  Serial.print("My IP address: ");
  
  Serial.println(Ethernet.localIP());
  Serial.println("Waiting for Print Cylinder information...");

  // start listening for clients
  server.begin();
}

void loop() {
  // wait for a new client:
  EthernetClient client = server.available();
  
      if (Ethernet.linkStatus() == LinkOFF) {
        Serial.println("Ethernet cable is not connected.");
        Serial.println("Before Reboot");// reset the Arduino
        reboot();
        Serial.println("After Reboot");
    }
   
  // read the incoming from the client:
  if (client) {

       byteRcvd0 = client.read();

       Serial.print("byteRcvd0 : ");Serial.println(byteRcvd0);

       byteRcvd1 = client.read();

       Serial.print("byteRcvd1 : ");Serial.println(byteRcvd1);//UOSgoSteps

       byteRcvd2 = client.read();

       Serial.print("byteRcvd2 : ");Serial.println(byteRcvd2);

       byteRcvd3 = client.read();

       Serial.print("byteRcvd3 : ");Serial.println(byteRcvd3);//UOSgoSteps

       byteRcvd4 = client.read();

       Serial.print("byteRcvd4 : ");Serial.println(byteRcvd4);//UOSgoSteps


      StationNumber = byteRcvd4;
      UOSgoSteps = ((unsigned char)byteRcvd1 << 8 | (unsigned char)byteRcvd0); // Combine the two 8 bit numbers to make a 16 bit one.
      UGSgoSteps = ((unsigned char)byteRcvd1 << 8 | (unsigned char)byteRcvd0); // Combine the two 8 bit numbers to make a 16 bit one.
      LGSgoSteps = ((unsigned char)byteRcvd3 << 8 | (unsigned char)byteRcvd2); // Combine the two 8 bit numbers to make a 16 bit one.
      LOSgoSteps = ((unsigned char)byteRcvd3 << 8 | (unsigned char)byteRcvd2); // Combine the two 8 bit numbers to make a 16 bit one.
     // UOSgoSteps = 7500;  //debug
     // UGSgoSteps = 7500; //debug
      //LGSgoSteps = 1300;  //debug - Need to make a formula to calculate this
      //LOSgoSteps = 1300;  //debug - Need to make a formula to calculate this
      Serial.print("Station Number : ");Serial.println(StationNumber);
      Serial.print("Upper Steps : ");Serial.println(UOSgoSteps);
      Serial.print("Lower Steps : ");Serial.println(LOSgoSteps);
      Serial.println("=====================================");

      Wire.beginTransmission(StationNumber);
      
      const unsigned char Stepval1 = UOSgoSteps & 0xFF;
      const unsigned char Stepval2 = (UOSgoSteps >> 8) & 0xFF;
      const unsigned char Stepval3 = LOSgoSteps & 0xFF;
      const unsigned char Stepval4 = (LOSgoSteps >> 8) & 0xFF;
      Wire.write(Stepval1);
      Wire.write(Stepval2);
      Wire.write(Stepval3);
      Wire.write(Stepval4);
      Wire.endTransmission();
      
      int StationNumber = 0;
      int UOSgoSteps = 0;
      int UGSgoSteps = 0;
      int LOSgoSteps = 0;
      int LGSgoSteps = 0;
      byte byteRcvd0 = 0;
      byte byteRcvd1 = 0;
      byte byteRcvd2 = 0;
      byte byteRcvd3 = 0;
      byte byteRcvd4 = 0;
    }
  }

Thanks for any help you may have.
Gary

HI, G_Johanson.

In the code, Subnet mask is 255.255.0.0. This is Class B network.
If you want to use (192.168.X.X) IP address, Subnet mask must be set 255.255.255.0

And Did you set different IP address each W5500?
The IP address and MAC address must be different for each W5500 chip.

If the problem is not resolved, please contact us again.
Thank you.

Hi dkay!
Thanks for the reply.
I will change the subnet and report back. I do have a different IP and MAC address for each.
This morning I had 2/3 of the ones on my desk not work so this is a duplicatable issue. :slightly_smiling_face:

Thanks!
Gary

Hi dkay,
I did a test with the 255.255.255.0 subnet and one of them did not start up (same issue).
Is there anything else I should look out for?

Thanks,
Gary

Just connect one chip which did not work.
If this work, your network information is wrong.

Did you check IP range?
You must fix first, second and third IP address value.
For example, communication is available in 192.168.1.1 ~ 192.168.1.255

If you know this thing, change the 4th IP value.
There may be equipment with the same IP.

Thank you.

The IP is ok. All 3 are different and within spec.
I have had one or two fail upon startup and not always the same one. This morning all started ok. The next time, perhaps not. Can you let me know what the state of leds means? Where they both flash in sequence (as in the giff)?

Here is the client code:

/*
  Telnet client

 This sketch connects to a a telnet server (http://www.google.com)
 using an Arduino Wiznet Ethernet shield.  You'll need a telnet server
 to test this with.
 Processing's ChatServer example (part of the network library) works well,
 running on port 10002. It can be found as part of the examples
 in the Processing application, available at
 http://processing.org/

 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13

 created 14 Sep 2010
 modified 9 Apr 2012
 by Tom Igoe
 */

#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x05
};
IPAddress ip(192, 168, 1, 178);
IPAddress subnet(255, 255, 255, 0);

// Enter the IP address of the server you're connecting to:
IPAddress server123(192, 168, 1, 177);
IPAddress server456(192, 168, 1, 187);
IPAddress server789(192, 168, 1, 197);

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 23 is default for telnet;
// if you're using Processing's ChatServer, use port 10002):
EthernetClient client;

int StationNumber = 0;
int UOSgoSteps = 0;
int UGSgoSteps = 0;
int LOSgoSteps = 0;
int LGSgoSteps = 0;
byte byteRcvd0 = 0;
byte byteRcvd1 = 0;
byte byteRcvd2 = 0;
byte byteRcvd3 = 0;
byte byteRcvd4 = 0;
char c;
void setup() {

  delay(10000);

  Wire.begin(40);             
  Wire.onReceive(StartMoving);
  // You can use Ethernet.init(pin) to configure the CS pin
  Ethernet.init(10);  // Most Arduino shields
  //Ethernet.init(5);   // MKR ETH shield
  //Ethernet.init(0);   // Teensy 2.0
  //Ethernet.init(20);  // Teensy++ 2.0
  //Ethernet.init(15);  // ESP8266 with Adafruit Featherwing Ethernet
  //Ethernet.init(33);  // ESP32 with Adafruit Featherwing Ethernet

  // start the Ethernet connection:
  Ethernet.begin(mac, ip, subnet);

  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // Check for Ethernet hardware present
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
    while (true) {
      delay(1); // do nothing, no point running without Ethernet hardware
    }
  }
  while (Ethernet.linkStatus() == LinkOFF) {
    Serial.println("Ethernet cable is not connected.");
    delay(500);
  }

  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("Waiting for Input...");


}

void loop() {}

//=============================================================================================================================================
void StartMoving() { 


      Serial.println("=====================================1");
      Serial.println("Start Moving");
      
      byteRcvd0 = Wire.read();
      byteRcvd1 = Wire.read();
      byteRcvd2 = Wire.read();
      byteRcvd3 = Wire.read();
      byteRcvd4 = Wire.read(); //Station number 

      StationNumber = byteRcvd4;
      UOSgoSteps = ((unsigned char)byteRcvd1 << 8 | (unsigned char)byteRcvd0); // Combine the two 8 bit numbers to make a 16 bit one.
      UGSgoSteps = ((unsigned char)byteRcvd1 << 8 | (unsigned char)byteRcvd0); // Combine the two 8 bit numbers to make a 16 bit one.
      LGSgoSteps = ((unsigned char)byteRcvd3 << 8 | (unsigned char)byteRcvd2); // Combine the two 8 bit numbers to make a 16 bit one.
      LOSgoSteps = ((unsigned char)byteRcvd3 << 8 | (unsigned char)byteRcvd2); // Combine the two 8 bit numbers to make a 16 bit one.

      Serial.print("Station Number : ");Serial.println(StationNumber);
      Serial.print("Upper Steps : ");Serial.println(UOSgoSteps);
      Serial.print("Lower Steps : ");Serial.println(LOSgoSteps);
      Serial.println("=====================================2");
      

  if ((StationNumber >= 1) && (StationNumber <= 3)) //Print Stations 1, 2 and 3
    {
    // give the Ethernet shield a second to initialize:
    delay(1000);
    Serial.println("Connecting to Print Stations 1, 2 and 3");
    
    // if you get a connection, report back via serial:
    if (client.connect(server123, 23)) {
    Serial.println("connected");
    } 
    else 
    {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
    }
    Serial.println("=====================================3");
    client.write(byteRcvd0);
    client.write(byteRcvd1);
    client.write(byteRcvd2);
    client.write(byteRcvd3);
    client.write(byteRcvd4);
    Serial.println("Sending info");
    client.stop();
    Serial.println("Disonnecting from Print Stations 1, 2 and 3");   
    Serial.println("=====================================4");
    }

      if ((StationNumber >= 4) && (StationNumber <= 6)) //Print Stations 4, 5 and 6
    {
    // give the Ethernet shield a second to initialize:
    delay(1000);
    Serial.println("Connecting to Print Stations 4, 5 and 6");
    
    // if you get a connection, report back via serial:
    if (client.connect(server456, 23)) {
    Serial.println("connected");
    } 
    else 
    {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
    }
    Serial.println("=====================================3");
    client.write(byteRcvd0);
    client.write(byteRcvd1);
    client.write(byteRcvd2);
    client.write(byteRcvd3);
    client.write(byteRcvd4);
    Serial.println("Sending info");
    client.stop();
    Serial.println("Disonnecting from Stations 4, 5 and 6");   
    Serial.println("=====================================4");
    }

      if ((StationNumber >= 7) && (StationNumber <= 9)) //Print Stations 7, 8 and 9
    {
    // give the Ethernet shield a second to initialize:
    delay(1000);
    Serial.println("Connecting to Stations 7, 8 and 9");
    
    // if you get a connection, report back via serial:
    if (client.connect(server789, 23)) {
    Serial.println("connected");
    } 
    else 
    {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
    }
    Serial.println("=====================================3");
    client.write(byteRcvd0);
    client.write(byteRcvd1);
    client.write(byteRcvd2);
    client.write(byteRcvd3);
    client.write(byteRcvd4);
    Serial.println("Sending info");
    client.stop();
    Serial.println("Disonnecting from Stations 7, 8 and 9");   
    Serial.println("=====================================4");
    }

}

Thanks, Gary

Loop means while in C.
In the Client code, the loop function is empty.
Function “StartMoving” is used once in setup function.
Is it right operation you intended?
If you want to use your operation repeatably, you must design loop function correctly.

Also, I think “StartMoving” function is worked before “Ethernet.begin”.
And after “Ethernet.begin”, there is no operation about network communication.
After setting the network information, try to connect to the TCP server

Here is a reference code for Telnet client,

Thank you.

I see what you mean. The code works though. I believe the wire library manages “Wire.onReceive(StartMoving);”.
It does work when I send a i2c command to the client (every time). The main function of this client is translating i2c to lan. I did move the “Wire.onReceive(StartMoving);” to the “void loop()” as you have suggested.
I also moved some of the code from “StartMoving()” to the loop.

It seems to be running better. I will give it a bit and report back.

Thanks for you input! :slight_smile:
Here is the code again:

/*
  Telnet client

 This sketch connects to a a telnet server (http://www.google.com)
 using an Arduino Wiznet Ethernet shield.  You'll need a telnet server
 to test this with.
 Processing's ChatServer example (part of the network library) works well,
 running on port 10002. It can be found as part of the examples
 in the Processing application, available at
 http://processing.org/

 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13

 created 14 Sep 2010
 modified 9 Apr 2012
 by Tom Igoe
 */

#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x05
};
IPAddress ip(192, 168, 1, 178);
IPAddress subnet(255, 255, 255, 0);

// Enter the IP address of the server you're connecting to:
IPAddress server123(192, 168, 1, 177);
IPAddress server456(192, 168, 1, 187);
IPAddress server789(192, 168, 1, 197);

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 23 is default for telnet;
// if you're using Processing's ChatServer, use port 10002):
EthernetClient client;

int StationNumber = 0;
int UOSgoSteps = 0;
int UGSgoSteps = 0;
int LOSgoSteps = 0;
int LGSgoSteps = 0;
byte byteRcvd0 = 0;
byte byteRcvd1 = 0;
byte byteRcvd2 = 0;
byte byteRcvd3 = 0;
byte byteRcvd4 = 0;
char c;
void setup() {

  delay(10000);

  Wire.begin(40);             
  
  // You can use Ethernet.init(pin) to configure the CS pin
  Ethernet.init(10);  // Most Arduino shields
  //Ethernet.init(5);   // MKR ETH shield
  //Ethernet.init(0);   // Teensy 2.0
  //Ethernet.init(20);  // Teensy++ 2.0
  //Ethernet.init(15);  // ESP8266 with Adafruit Featherwing Ethernet
  //Ethernet.init(33);  // ESP32 with Adafruit Featherwing Ethernet

  // start the Ethernet connection:
  Ethernet.begin(mac, ip, subnet);

  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // Check for Ethernet hardware present
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
    while (true) {
      delay(1); // do nothing, no point running without Ethernet hardware
    }
  }
  while (Ethernet.linkStatus() == LinkOFF) {
    Serial.println("Ethernet cable is not connected.");
    delay(500);
  }

  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("Waiting for Input...");


}

void loop() {
  
  Wire.onReceive(StartMoving);

    if ((StationNumber >= 1) && (StationNumber <= 3)) //Print Stations 1, 2 and 3
    {
    // give the Ethernet shield a second to initialize:
    delay(1000);
    Serial.println("Connecting to Print Stations 1, 2 and 3");
    
    // if you get a connection, report back via serial:
    if (client.connect(server123, 23)) {
    Serial.println("connected");
    } 
    else 
    {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
    }
    Serial.println("=====================================3");
    client.write(byteRcvd0);
    client.write(byteRcvd1);
    client.write(byteRcvd2);
    client.write(byteRcvd3);
    client.write(byteRcvd4);
    Serial.println("Sending info");
    client.stop();
    Serial.println("Disonnecting from Print Stations 1, 2 and 3");   
    Serial.println("=====================================4");
    StationNumber = 0; //Clear the information and wait for a new request to arrive
    }

      if ((StationNumber >= 4) && (StationNumber <= 6)) //Print Stations 4, 5 and 6
    {
    // give the Ethernet shield a second to initialize:
    delay(1000);
    Serial.println("Connecting to Print Stations 4, 5 and 6");
    
    // if you get a connection, report back via serial:
    if (client.connect(server456, 23)) {
    Serial.println("connected");
    } 
    else 
    {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
    }
    Serial.println("=====================================3");
    client.write(byteRcvd0);
    client.write(byteRcvd1);
    client.write(byteRcvd2);
    client.write(byteRcvd3);
    client.write(byteRcvd4);
    Serial.println("Sending info");
    client.stop();
    Serial.println("Disonnecting from Stations 4, 5 and 6");   
    Serial.println("=====================================4");
    StationNumber = 0; //Clear the information and wait for a new request to arrive
    }

      if ((StationNumber >= 7) && (StationNumber <= 9)) //Print Stations 7, 8 and 9
    {
    // give the Ethernet shield a second to initialize:
    delay(1000);
    Serial.println("Connecting to Stations 7, 8 and 9");
    
    // if you get a connection, report back via serial:
    if (client.connect(server789, 23)) {
    Serial.println("connected");
    } 
    else 
    {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
    }
    Serial.println("=====================================3");
    client.write(byteRcvd0);
    client.write(byteRcvd1);
    client.write(byteRcvd2);
    client.write(byteRcvd3);
    client.write(byteRcvd4);
    Serial.println("Sending info");
    client.stop();
    Serial.println("Disonnecting from Stations 7, 8 and 9");   
    Serial.println("=====================================4");
    StationNumber = 0; //Clear the information and wait for a new request to arrive
    }
   }

//=============================================================================================================================================
void StartMoving() { 


      Serial.println("=====================================1");
      Serial.println("Start Moving");
      
      byteRcvd0 = Wire.read();
      byteRcvd1 = Wire.read();
      byteRcvd2 = Wire.read();
      byteRcvd3 = Wire.read();
      byteRcvd4 = Wire.read(); //Station number 

      StationNumber = byteRcvd4;
      UOSgoSteps = ((unsigned char)byteRcvd1 << 8 | (unsigned char)byteRcvd0); // Combine the two 8 bit numbers to make a 16 bit one.
      UGSgoSteps = ((unsigned char)byteRcvd1 << 8 | (unsigned char)byteRcvd0); // Combine the two 8 bit numbers to make a 16 bit one.
      LGSgoSteps = ((unsigned char)byteRcvd3 << 8 | (unsigned char)byteRcvd2); // Combine the two 8 bit numbers to make a 16 bit one.
      LOSgoSteps = ((unsigned char)byteRcvd3 << 8 | (unsigned char)byteRcvd2); // Combine the two 8 bit numbers to make a 16 bit one.

      Serial.print("Station Number : ");Serial.println(StationNumber);
      Serial.print("Upper Steps : ");Serial.println(UOSgoSteps);
      Serial.print("Lower Steps : ");Serial.println(LOSgoSteps);
      Serial.println("=====================================2");

      }

No success. Upon booting (turning on the power supply) I have the same issue.
The client does seem more prone to fail on boot.
If I press the reset on the shield, nothing changes but after resetting the UNO it will do a steady green.
Thanks, Gary

20191115_113231

First, test your board with using other person’s successful project in arduino web.
Do not change anything and just download the code to board.
After reset, see the LED status.
If green LED is steady and orange LED is blinking, hardware is fine.

I think you should understand about TCP coummunication and W5500 work flow.
TCP connection is needed just once.

Ok. I have done as you suggested and have had a fail. In this case, I loaded the same sketch onto all 3 on my desk, careful to change the mac and IP addresses. I removed the network wires from 2 of them and turned on the power. The leds blinked in sequence as before (giff below). I disconnected the network wire and moved it to the other ones, one at a time and one of the others had the same fail. So I believe this issue has more to do with a failed Adruino boot up. Once I press reset, all is ok.
Do you think the shield is holding a pin low (or high) during boot up and making the issue more likely?
:confused:
I just don’t know…
Thanks!
Gary
20191118_100435

Hello again!
Further to the above, I have added a full watchdog and monitored a pin on the Arduino and it seems it is running and did boot ok. (giff attached)
This only further confuses me. :confused:
Thanks, Gary
48

Hi, Gary.

There’s no holding situation from Ethernet shield.

It’s not general situation. I doubt your network environment.
I am testing the W5500 ethernet shield, I can’t make situation like you.
Please change your LAN cable or check the hub or router works well.
W5500 supports 10/100 Mbps ethernet.

Separately, you wrote code “Ethernet.begin(mac, ip, subnet);”.
But your “subnet” value sets DNS server IP.
check syntax.

Thanks,
DKay

Hi Dkay,

I have tried it with the example code and a simple crossover cable from one to another. The same issue persists. I have come to the realization that the power-up cycle on this shield is really the issue. I had provisions in my main Arduino project to send a hard reset to other Arduinos so that is what I have done. I have added a wire that just after power up, it is dragged low for some milliseconds and then disconnected. This resolves the issue. I felt this was avoidable earlier on but it proves to be the fastest solution. I really appreciate your help along the way and I hope that any others that experience this issue can read and perhaps add to this if it is solved another way.

Thanks again!
Gary