Hello,
I have a .net application that connects to a 570 via RS-232 using System.IO.Ports.SerialPort. Normally, it will connect. However, when playing with different baud rates, it sometimes does not connect until I connect the same PC with any Unitronics software (Visilogic or Remote Operator). My question is this:
With VIsilogic, it appears that you can define the baud rate to anything in the connection properties and it always connects. How does the controller adapt accordingly? I think "out of the box", the rate is set to 115200.
If I change my application to 57600, it failes to connect. But, if I connect using Visilogic @ 57600 it works. I go back to my application and then it works. I am trying to determine what Visilogic is doing that I am not. My connection looks like this:
// Connect to the PLC
try
{
string comPort = Properties.Settings.Default.CommPort;
int comBdRate = Properties.Settings.Default.CommBdRate;
int comTimeOut = Properties.Settings.Default.CommTimeOut;
_serialPort.PortName = comPort;
_serialPort.BaudRate = comBdRate;
_serialPort.DataBits = 8;
_serialPort.Parity = Parity.None;
_serialPort.Handshake = Handshake.None;
_serialPort.ReadTimeout = comTimeOut;
_serialPort.NewLine = "\r";
_serialPort.Open();
}
catch (Exception)
{
// Disconnect from the PLC
_serialPort.Close();
}
Once this executes, I begin sending PCOM commands:
try
{
// Send the message out the serial port.
_serialPort.DiscardInBuffer();
_serialPort.WriteLine(message);
// Verify the message was received, catch the timeout
string response = _serialPort.ReadTo("/A00SBF5");
if (response == "/A00SBF5")
{
//do nothing, success!!
}
}
catch (Exception)
{
_connectionLost = true;
_serialPort.Close();
return -1;
}
The _serialPort.ReadTo() catches the timeout (default 1 sec). When that occurs, we assume we lost the connection. Is there something I should be doing to prime the port first?
Thanks!