Hi,
I am new to serial port programming. I have RFID reader & sensor transmitting data through serial port. When RFID reader reads RFID hanger & sensor reads an object simultaneously then sensor fails to transmit data. Below is the code:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
StationDATA szCANData;
//String szData ="";
int nBytesToRead = serialPort1.BytesToRead;
byte[] szBuff = new byte[nBytesToRead];
//string szCOM= serialPort1.ReadExisting();
//szData += serialPort1.ReadExisting();
//ProcessBuffer(szData);
serialPort1.Read(szBuff, 0, nBytesToRead);
szCANData.StationID = szBuff[0];
szCANData.StationCMD = szBuff[1];
szCANData.StationMSG0 = szBuff[2];
szCANData.StationMSG1 = szBuff[3];
szCANData.StationMSG2 = szBuff[4];
szCANData.StationMSG3 = szBuff[5];
szCANData.StationMSG4 = szBuff[6];
szCANData.StationMSG5 = szBuff[7];
szCANData.StationMSG6 = szBuff[8];
szCANData.StationMSG7 = szBuff[9];
szCANData.EOD = szBuff[10];
}
Please help. Many thanks
Loading
hal sPosted Aug 23, 2010, 10:24 PM
I have tried but still the same problem. Below i show you the whole code. The RFID reader & the sensor transmit data through the same single serial port.
When RFID reader reads RFID hanger & sensor detects an object(an L shape metal passing by) simultaneously then the serial port cannot received the data from the sensor.
below is the setting at my property:
BaudRate = 9600
Databits = 8
DiscardNull = false
DtrEnable = False
GenerateMember = True
Handshake = none
Modifiers = private
Parity = None
ParityReplace = 63
PortName = Com1
ReadBuffersize = 768
Readtimeout = -1
Receivedbytesthreshold = 11
RtsEnable = false
Stopbits = One
WriteBuffersize = 768
writetimeout = -1
serialPort1.Open();
-----------------------------------------------------------------------private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
StationDATA szCANData;
object objLock = new object();
lock (objLock)
{
//String szData ="";
int nBytesToRead = serialPort1.BytesToRead;
byte[] szBuff = new byte[nBytesToRead];
//string szCOM= serialPort1.ReadExisting();
//szData += serialPort1.ReadExisting();
//ProcessBuffer(szData);
serialPort1.Read(szBuff, 0, nBytesToRead);
szCANData.StationID = szBuff[0];
szCANData.StationCMD = szBuff[1];
szCANData.StationMSG0 = szBuff[2];
szCANData.StationMSG1 = szBuff[3];
szCANData.StationMSG2 = szBuff[4];
szCANData.StationMSG3 = szBuff[5];
szCANData.StationMSG4 = szBuff[6];
szCANData.StationMSG5 = szBuff[7];
szCANData.StationMSG6 = szBuff[8];
szCANData.StationMSG7 = szBuff[9];
szCANData.EOD = szBuff[10];
// Convert the RFID HANGER NO DEC to ASCII
string HangerID = "";
//if (szCANData.StationCMD.ToString().Equals("10") || szCANData.StationCMD.ToString().Equals("75") )
//{
int decValue1 = szCANData.StationMSG0;
int decValue2 = szCANData.StationMSG1;
int decValue3 = szCANData.StationMSG2;
int decValue4 = szCANData.StationMSG3;
int decValue5 = szCANData.StationMSG4;
int decValue6 = szCANData.StationMSG5;
int decValue7 = szCANData.StationMSG6;
int decValue8 = szCANData.StationMSG7;
string hexValue1 = decValue1.ToString("X");
string hexValue2 = decValue2.ToString("X");
string hexValue3 = decValue3.ToString("X");
string hexValue4 = decValue4.ToString("X");
string hexValue5 = decValue5.ToString("X");
string hexValue6 = decValue6.ToString("X");
string hexValue7 = decValue7.ToString("X");
string hexValue8 = decValue8.ToString("X");
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
StringBuilder sb3 = new StringBuilder();
StringBuilder sb4 = new StringBuilder();
StringBuilder sb5 = new StringBuilder();
StringBuilder sb6 = new StringBuilder();
StringBuilder sb7 = new StringBuilder();
StringBuilder sb8 = new StringBuilder();
for (int i = 0; i <= hexValue1.Length - 2; i += 2)
{
sb1.Append(Convert.ToString(Convert.ToChar(Int32.Parse(hexValue1.Substring(i, 2), System.Globalization.NumberStyles.HexNumber))));
}
for (int i = 0; i <= hexValue2.Length - 2; i += 2)
{
sb2.Append(Convert.ToString(Convert.ToChar(Int32.Parse(hexValue2.Substring(i, 2), System.Globalization.NumberStyles.HexNumber))));
}
for (int i = 0; i <= hexValue3.Length - 2; i += 2)
{
sb3.Append(Convert.ToString(Convert.ToChar(Int32.Parse(hexValue3.Substring(i, 2), System.Globalization.NumberStyles.HexNumber))));
}
for (int i = 0; i <= hexValue4.Length - 2; i += 2)
{
sb4.Append(Convert.ToString(Convert.ToChar(Int32.Parse(hexValue4.Substring(i, 2), System.Globalization.NumberStyles.HexNumber))));
}
for (int i = 0; i <= hexValue5.Length - 2; i += 2)
{
sb5.Append(Convert.ToString(Convert.ToChar(Int32.Parse(hexValue5.Substring(i, 2), System.Globalization.NumberStyles.HexNumber))));
}
for (int i = 0; i <= hexValue6.Length - 2; i += 2)
{
sb6.Append(Convert.ToString(Convert.ToChar(Int32.Parse(hexValue6.Substring(i, 2), System.Globalization.NumberStyles.HexNumber))));
}
for (int i = 0; i <= hexValue7.Length - 2; i += 2)
{
sb7.Append(Convert.ToString(Convert.ToChar(Int32.Parse(hexValue7.Substring(i, 2), System.Globalization.NumberStyles.HexNumber))));
}
for (int i = 0; i <= hexValue8.Length - 2; i += 2)
{
sb8.Append(Convert.ToString(Convert.ToChar(Int32.Parse(hexValue8.Substring(i, 2), System.Globalization.NumberStyles.HexNumber))));
}
HangerID = sb1.ToString() + sb2.ToString() + sb3.ToString() + sb4.ToString() + sb5.ToString() + sb6.ToString() + sb7.ToString() + sb8.ToString();
//}
SetTextBox(szCANData.StationCMD.ToString());
RecvCANData(szCANData.StationCMD, szCANData.StationID.ToString(), HangerID);
serialPort1.DiscardInBuffer();
//serialPort1.Write(StructureToByteArray(szLogon), 0, Marshal.SizeOf(szLogon));
}
}
Please advice. Thanks
sudipto chatterjeePosted Aug 23, 2010, 6:21 AM
I think this will solve your problem.......
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
StationDATA szCANData;
//String szData ="";
object objLock = new object();
lock (objLock)
{
int nBytesToRead = serialPort1.BytesToRead;
byte[] szBuff = new byte[nBytesToRead];
//string szCOM= serialPort1.ReadExisting();
//szData += serialPort1.ReadExisting();
//ProcessBuffer(szData);
serialPort1.Read(szBuff, 0, nBytesToRead);
szCANData.StationID = szBuff[0];
szCANData.StationCMD = szBuff[1];
szCANData.StationMSG0 = szBuff[2];
szCANData.StationMSG1 = szBuff[3];
szCANData.StationMSG2 = szBuff[4];
szCANData.StationMSG3 = szBuff[5];
szCANData.StationMSG4 = szBuff[6];
szCANData.StationMSG5 = szBuff[7];
szCANData.StationMSG6 = szBuff[8];
szCANData.StationMSG7 = szBuff[9];
szCANData.EOD = szBuff[10];
}
}