你用控件写的串口程序,就得注册,否则在别人机子上程序虽然能打开,但是跑不起来; 另外对于你的发送数据的部分,我感觉有点费解了哦,呵呵先上段代码给你参考下吧:void CXXXDlg::OnComm() { // TODO: Add your control notification handler code here VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata[1000]; //设置BYTE数组 An 8-bit integerthat is not signed. CString strtemp;
把多个8位的合成一个 WORD 或者 DWROD 类型之后再传输,在接收端再分解。
协议一般包括:头、命令、长度、数据、校验、尾 等内容
void CFirstDlg::OnButton1()
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
int count1; //此处的count,temp与下面的不同
CString temp1;
UpdateData(TRUE); //获取用户输入数据
count1=m_send.GetLength( ); //获取编辑框内字符数
temp1=m_send.GetAt(count1-1); //取最新输入字符
if(!m_comm.GetPortOpen( ))
m_comm.SetPortOpen(TRUE);
m_comm.SetOutput(COleVariant(temp1)); //发送数据
if(count1==40) //如输入字符超过40,清空发送编辑框
{ m_send.Empty( );
UpdateData(FALSE); //更新编辑框
}}temp1=m_send.GetAt(count1-1); //取最新输入字符。这句就意味着只能发送最新输入的一个字符,但我想发送2个字符
fatal error C1853: 'Debug/first.pch' is not a precompiled header file created with this compiler
Error executing cl.exe.
这又是怎么回事
另外对于你的发送数据的部分,我感觉有点费解了哦,呵呵先上段代码给你参考下吧:void CXXXDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[1000]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_strmscomm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
variant_inp=m_strmscomm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
DataAnalysis_object.Pushback(bt);//这是我另外一个类,用于对接收数据进行解析的。
}
}
}void CXXXDlg::CommDataSend(BYTE data)
{
CByteArray hexdata;
hexdata.Add(data);
m_strmscomm.SetOutput(COleVariant(hexdata));
}void CSendOrder::SendInstructionSet()
{
//发送前清空缓冲区
m_strmscomm.SetRTSEnable(0);
m_strmscomm.SetInBufferCount(0);
for(int i=0; i<length; i++)
{
CommDataSend(receive_array[i]);//
Sleep(10);
}
}void CXXXDlg::CommPortInit()
{
if(m_strmscomm.GetPortOpen())
m_strmscomm.SetPortOpen(FALSE);
m_strmscomm.SetCommPort(m_Port_CommSet); //选择端口
m_strmscomm.SetInBufferSize(1024);
m_strmscomm.SetOutBufferSize(512);
if( !m_strmscomm.GetPortOpen())
m_strmscomm.SetPortOpen(TRUE);//打开串口
m_strmscomm.SetSettings("2400,e,8,1"); //设置波特率等参数
m_strmscomm.SetRThreshold(1); //表示有一个字符就引发一个事件
m_strmscomm.SetInputLen(0);//设置当前接收区数据长度为0
m_strmscomm.SetInputMode(1);//text,binary
m_strmscomm.GetInput();//先预读缓冲区以清除残留数据
}