MFC使用mscomm控件实现plc通信

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012839256/article/details/82779123

废话不多说,直入主题!

我们的mscomm控件实现plc通信,主要分三步走:

(一)mscomm控件下载,注册

(1)可以百度搜索下载mscomm控件

(2)如果觉得麻烦可以在我上传的资源处下载,地址:https://download.csdn.net/download/u012839256/10677537

注册方法可参照https://blog.csdn.net/u013457167/article/details/45488661的第二种方法,亲测可用。

(3)注册完成之后,可以通过在MFC界面,右击,选择【插入ActiveX控件】,从中选择【Microsoft Communication Control,version 6.0】,点击确定,会看到界面上出现一个【电话图标】,那么我们的控件就成功插入了。

(4)(可选)如果插入的控件出现白边的话,我们可以通过点击选择控件,然后右击【编辑控件】,再点击控件的空白处,然后白边就消失了,是不是很神奇!

(二)MFC界面绘制,参数定义

例如这个窗口,左上角是【输入框】,输入信息后点击【发送】按钮,【接收框】显示接收到的指令。

(1)分别给【输入框】和【接收框】添加一个变量,变量名分别为 m_strTXData 和 m_strRXData 。

添加过程(输入框):点击选中【输入框】,右击【添加变量】,在变量名出添加 m_strTXData ,【类别】选择【Value】,确定。

(三)具体代码实现

我们这里用的是欧姆龙PLC,通过MFC的mscomm控件实现通讯,指令采用FCS校验,发送指令为@00RR0100000140*,然后通过代码给加一个结束符\CR,组成@00RR0100000140*\CR,接受到的有电位变化的指令为@00RR00000141*\CR,无电位变化的指令为@00RR00000040*\CR

(1)获取编辑框数据并加上相应的结束符

CString mstr = m_strTXData;
BYTE commstr[17];
memcpy(commstr,mstr.GetBuffer(mstr.GetLength()),mstr.GetLength());
commstr[17] = 13;

13 为 \CR 的ASCII码。

(2)转化成相应的格式后,通过以下语句进行通讯(发送数据和读取数据)

CByteArray cbaArrayInsA;                    //进行格式转换
cbaArrayInsA.RemoveAll();
for(int nIndex = 0;nIndex<17;++nIndex)
{
	cbaArrayInsA.Add(commstr[nIndex]);
}
m_ctrlComm.put_Output(COleVariant(cbaArrayInsA));//将数据发送到缓冲区
inputdata1 = m_ctrlComm.get_Input();//读取缓冲区数据

(3)接收框显示

inputdata2 = inputdata1;
for(long j = 0;j<15;++j)
{
	inputdata2.GetElement(&j,inputdata+j);
}
CString *cstrTemp =new CString((char*)inputdata, 15);
m_strRXData = *cstrTemp;

由于接收框的内容为CString类型,因此需要类型转换,然后再输出显示。

(4)如果需要多次发送和接收指令,则可以通过:while 和 ontimer 来实现

注:如果出现dll方面错误,请将TIS_UDSHL11d.dll复制到相应项目的Debug下。TIS_UDSHL11d.dll的获取依然可以通过我的共享资源和百度两种方式获取。

终于,我们实现了欧姆龙plc,基于FCS校验的MFC上位机通信。

猜你喜欢

转载自blog.csdn.net/u012839256/article/details/82779123