bool TCommThread::ReceiveChar(char Char)
{
// Modbus报文的第一个字符应当是':'
if(Char != 'p' && __RxBuffer.size() == 0)
return false;
// 将字符写入缓冲
__RxBuffer.push_back(Char);
// 如果收到的字符不是结束符,则退出
if(Char != '!')
{
if(__RxBuffer.size() > 10)
__RxBuffer.clear();
return false;
}
// 收到结束符,对报文加以解析处理
// 首先检查报文格式
if(__RxBuffer.size() != 10)
{
__RxBuffer.clear();
return false;
}
// 解析应答报文
if(__RxBuffer[1] == '1')
LPosition = CharToWord(RxBuffer, 3);
else if(__RxBuffer[1] == '2')
RPosition = CharToWord(RxBuffer, 3);
Synchronize(Form1->ShowStripPosition);
return true;
}
//------------------------------------------------------------------------------
// CharToHex()
//------------------------------------------------------------------------------
Byte TCommThread::CharToHex(char Char)
{
if(Char >= '0' && Char <= '9')
return Char - '0';
else if(Char >= 'A' && Char <= 'F')
return Char - 'A' + 10;
else if(Char >= 'a' && Char <= 'f')
return Char - 'a' + 10;
else
return 0;
}
//------------------------------------------------------------------------------
// CharToWord()
//------------------------------------------------------------------------------
Word TCommThread::CharToWord(vector &Buffer, unsigned int Begin)
{
return (CharToHex(Buffer[Begin]) << 12) |
(CharToHex(Buffer[Begin + 1]) << 8) |
(CharToHex(Buffer[Begin + 2]) << 4) |
CharToHex(Buffer[Begin + 3]);
}
//报文判断
//------------------------------------------------------------------------------
// ReceiveChar()
//------------------------------------------------------------------------------
private boolean ReceiveChar(char Char,int len)
{
__RxBuffer=new byte[len];
System.arraycopy(inBuf, 0, __RxBuffer, 0, len);
// Modbus报文的第一个字符应当是':'
if(Char != 'p' && __RxBuffer.length == 0)
return false;
// 将字符写入缓冲
//byte[] inbuf=new byte[256];
// __RxBuffer.writeToParcel(inBuf, Char);
// 如果收到的字符不是结束符,则退出
if(Char != '!')
{
if(__RxBuffer.length > 10)
// __RxBuffer.clear();
return false;
}
// 收到结束符,对报文加以解析处理
// 首先检查报文格式
if(__RxBuffer.length != 10)
{
// __RxBuffer.clear();
return false;
}
// 解析应答报文
Object __LPosition;
Object __RPosition;
if(__RxBuffer[1] == '1')
__LPosition = CharToWord(__RxBuffer, 3);
else if(__RxBuffer[1] == '2')
__RPosition = CharToWord(__RxBuffer, 3);
return true;
}
//------------------------------------------------------------------------------
// CharToHex()
//------------------------------------------------------------------------------
@SuppressLint("DefaultLocale")
private Byte CharToHex(byte buffer)
{
if(buffer >= '0' && buffer <= '9')
return (byte) (buffer - '0');
else if(buffer >= 'A' && buffer <= 'F')
return (byte) (buffer - 'A' + 10);
else if(buffer >= 'a' && buffer <= 'f')
return (byte) (buffer - 'a' + 10);
else
return 0;
}
//------------------------------------------------------------------------------
// CharToWord()
//------------------------------------------------------------------------------
private int CharToWord(byte[] Buffer, int Begin )
{
return (CharToHex(Buffer[Begin]) << 12) |
(CharToHex(Buffer[Begin + 1]) << 8) |
(CharToHex(Buffer[Begin + 2]) << 4) |
CharToHex(Buffer[Begin + 3]);
}
这个是我写的,但是调用显示的时候老是报错!
receiveInfo = CharToWord(inBuf,inPacket.getLength());
point2.setText(receiveInfo);
想请大神帮我改一下,万分感谢!
// 如果收到的字符不是结束符,则退出
if(Char != '!')
{
if(__RxBuffer.length > 10)
// __RxBuffer.clear();
return false;
}
// 收到结束符,对报文加以解析处理
// 首先检查报文格式
if(__RxBuffer.length != 10)
{
// __RxBuffer.clear();
return false;
}
// 解析应答报文
Object __LPosition;
Object __RPosition;
if(__RxBuffer[1] == '1')
__LPosition = CharToWord(__RxBuffer, 3);
else if(__RxBuffer[1] == '2')
__RPosition = CharToWord(__RxBuffer, 3);
return true;
}
//------------------------------------------------------------------------------
// CharToHex()
//------------------------------------------------------------------------------
@SuppressLint("DefaultLocale")
private Byte CharToHex(byte buffer)
{
if(buffer >= '0' && buffer <= '9')
return (byte) (buffer - '0');
else if(buffer >= 'A' && buffer <= 'F')
return (byte) (buffer - 'A' + 10);
else if(buffer >= 'a' && buffer <= 'f')
return (byte) (buffer - 'a' + 10);
else
return 0;
}
//------------------------------------------------------------------------------
// CharToWord()
//------------------------------------------------------------------------------
private int CharToWord(byte[] Buffer, int Begin )
{
return (CharToHex(Buffer[Begin]) << 12) |
(CharToHex(Buffer[Begin + 1]) << 8) |
(CharToHex(Buffer[Begin + 2]) << 4) |
CharToHex(Buffer[Begin + 3]);
}