我使用VC mfc想做一个简单的温湿度读取小串口。温湿度仪是使用的modbus协议写的。
主要代码
void CTestmodDlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
VARIANT variant1;//定义VARIANT型变量,用于存放接收到的数据
COleSafeArray safearray;//定义safearray型变量
LONG len,k;//定义长整型变量len,k
BYTE rxdata[6];//定义BYTE型数组
CString stremp1,stremp2;//定义两个字符串
CString strRXDdata1,trRXDdata2;
if(m_comm1.GetCommEvent()==2) //判断引起OnComm时间的原因
{
//如果是接收到特定个字节数,则读取接收到的数据
variant1 = m_comm1.GetInput();//把接收到的数据存放到VARIANT型变量里
safearray = variant1;//VARIANT型变量转换为ColeSafeArray型变量
len = safearray.GetOneDimSize();
for(k=0;k<len;k++)
{
safearray.GetElement(&k,rxdata+k); //得到接接收到的数据放到BYTE型数组rxdata里
}
BYTE bt = (*(unsigned char*)(rxdata+3)); //读取AD1转换的高字节
BYTE bt1 = (*(unsigned char*)(rxdata+4)); //读取AD1转换的低字节
BYTE bt2 = (*(unsigned char*)(rxdata+5)); //读取AD2转换的高字节
BYTE bt3 = (*(unsigned char*)(rxdata+6)); //读取AD2转换的低字节
stremp1.Format("%d",(bt*256+bt1)/10);//温度读数
stremp2.Format("%d",(bt2*256+bt3)/10);//湿度读数
strRXDdata1 +=stremp1;
strRXDdata2 +=stremp2;
}
}
void CTestmodDlg::OnButton4()
{
// TODO: Add your control notification handler code here
BYTE bytSend[6];//发送字符串
int i;
CByteArray arraySend;
USHORT num;
num=GetDlgItemInt(1000);
bytSend[0]=11;
bytSend[1]=4;//使用modbus 04功能
bytSend[2]=0;//起始高位地址
bytSend[3]=0;//起始低位地址
bytSend[4]=0;//寄存器个数高位
bytSend[5]=2;//寄存器个数低位
USHORT CRC=CRC16((UCHAR *)bytSend,6);//CRC校验
// arraySend.RemoveAll();
arraySend.SetSize(6);
for(i=0;i<6;i++)
{
arraySend.SetAt(i,bytSend[i]); //数据存在arraySend里面了
}
m_comm1.SetOutput(COleVariant(arraySend));
OnOnCommMscomm1() ;
}
请问在此发送和应答该怎么写? |