松下工控展销网
◎中国工控展销网    ◎站点地图1 2    ◎繁体版
松下工控展销网
首  页 代理简介 产品中心 资料软件 技术交流 新闻资讯 最新消息 面价查询  
   

用VC++开发微机与松下PLC间的通讯程序

用VC++开发微机与松下PLC间的通讯程序,编程控制器是一种数字运算操作的电子系统,专为在工业环境下应用而设计。它采用了可编程序的存储器,用于其内部存储程序,执行逻辑运算、顺序控制、定时、计数和算术操作等面向用户的指令,并通过数字式或模拟式输入输出控制各种类型的机械的生产过程。

商家信息

产品导航
  松下PLC  
松下变频器
松下电器变频器
松下触摸屏
松下伺服电机
松下小型马达
 
 
 您的位置:>>>技术交流 >>>正文

 
用VC++开发微机与松下PLC间的通讯程序
   相关品牌: 松下
   相关产品: PLC
   更新时间: 2007-6-4 19:13:17
   点击次数: 139
 
作 者 :蔡锦达 申屠理锋 王德福
关键词: PLC   MEWTOCOL-COM   通信协议   帧
 

1  引言
    可编程控制器是一种数字运算操作的电子系统,专为在工业环境下应用而设计。它采用了可编程序的存储器,用于其内部存储程序,执行逻辑运算、顺序控制、定时、计数和算术操作等面向用户的指令,并通过数字式或模拟式输入输出控制各种类型的机械的生产过程。可编程控制器及其有关外部设备,都按易于与工业控制系统联成一个整体、易于扩充其功能的原则设计。早期的PLC以数字量的顺序控制为主,提供了简单的慢速的通信功能(只支持RS232、RS485、多采用Modbus协议),现在的PLC不仅具有逻辑运算、顺序控制、定时、计数和算术操作,而且还具有A/D、D/A转换,数值计算和数据处理等功能。它既可以对开关量进行控制,也可以对模拟量进行控制,随着PLC功能不断扩充,它还有通讯联网功能。本文就是基于松下电工的专门通信协议(MEWTOCOL),用VC++开发的上位机与PLC间的通信。

2  松下电工的专用通信协议MEWTOCOL-COM
    目前,随着PLC的快速发展,越来越多的PLC生产厂商开发了它与计算机的通信功能(主要是利用计算机串口进行通信),本文是以松下FP系列PLC为例,作详细阐述。在一台计算机于PLC之间的通信中,通信由计算机发动,把命令帧发向PLC,PLC将以响应帧作应答,并执行相应的动作。
(1) 命令帧格式


其中: %:MEWTOCOL-COM的命令帧开始标志(ASCII码为25H)。
 H,L:站地址的高位和低位。
 #:站号特征码(ASCII码为23H)。
 发送文本:由命令码和数据组成,其主要命令码如表1所示。
 BCC:校验码,采用异或校验码,BCC为8位。
    (2) 响应帧格式
    当主站发来命令帧之后,从站将以响应帧作应答。响应帧分为2种,若主站命令帧正确无误,则用“正确响应帧”作应答;如果主站命令帧有错误则用“错误响应帧”作应答。这两种应帧格式下。
正确响应帧的格式


其中 %,H,L,BCC,CR含义与命令帧相同。
$:正确响应的标志(ACSII码为24H)。
响应文本:应当按照命令帧要求及协议规定组织。
错误响应帧的格式


其中%,H,L,BCC,CR含义与命令帧相同。
!:错误响应帧的标志(ACSII码为21H)。
错误代码:对于命令及数据传送中的各种错误均规定为代码以识别。
(3) 命令码: MEWTOCOL-COM协议的命令码汇总如表1所示


(4)常用的命令与格式
a)单接点的读


错误响应帧与单接点的相同。


3  用Visual C++6.0编写串行通信程序
    (1) MSComm控件
    串行通讯编程基本过程:设置初始化并打开串行口—配置串口—双向传输数据—校验—释放串口。本文的上位机通信程序是用Visual C++6.0编写的,主要是利用VC++中的一个通信控件MSComm来现的。 该控件屏蔽了通讯过程中的底层操作,程序员应用时只需设置,监控MSComm控件的属性和事件即可完成对串口的初始化和数据的输入输出工作。MSComm控件的主要属性如下:
    * CommPort :设置并返回通讯端口号,设计时端口号可设为1到16的任何数(默认值为1)。如:SetCommPort(1);即设置当前通讯端口为COM1。
    * Settings:设置并返回波特率,奇偶校验,数据位长度,停止位长度。
如:SetSettings(LPCTSTR String);String是一个包括四部分的字符串:第一部分:波特率;
    第二部分:奇偶校验,N表示不校验,E表示偶校验,O表示奇校验,S表示空格校验,M表示符号校验;  
    第三部分:数据为长度,其可选值为4,5,6,7,8;
   第四部分:停止位长度,其可选为1,1.5,2。 Settings属性的缺省值为"9600,N,8,1"。
    * PortOpen:用于打开和关闭端口。SetPortOpen(BOOL bNewValue); 当bNewValue为True时打开端口,当为FALSE时关闭端口。
    * Input:从接受缓冲区返回和删除字符,该属性在运行时为只读。GetInput();
    * Output:向缓冲区写数据,要传送的数据可以是文本数据或是二进制数据。
    * CommEvent:返回最近的通讯事件或错误。只要有通讯错误或事件发生时都会产生OnComm事件,CommEvent属性中存有错误或事件的数值代码。 GetCommEvent();

4  程序框架的生成及控件属性的配置
    首先利用MFC AppWizard(exe)建立一个基于对话框,支持Activex控件,命名为Transcomn的应用程序。然后在对话框中加入一些控件,其中那个MSComm控件(电话形状的控件)必须是在系统中注册过的Microsoft Communications Control,由它进行通讯时首先得设置它的一些属性,这些属性既可以在控件属性对话框中设置也可以在程序中设置,本文用后一种方法,在程序中对MSComm控件属性设置。最后用ClassWizard为控件添加变量和响应函数如表2


5  程序编写
// TranscommDlg.cpp : implementation file
BOOL CTranscommDlg::OnInitDialog()
{
 //初始化通讯端口,波特率为9600,奇校验,8位数据位,1位校验位,选择COM1口
 CDialog::OnInitDialog();
 m_Comm.SetCommPort(1);
 m_Comm.SetSettings("9600,O,8,1");
 m_Comm.SetInputMode(1);
 m_Comm.SetPortOpen(TRUE);
  return TRUE;  // return TRUE  unless you set the focus to a control
}
void CTranscommDlg::OnSend()
{
 UpdateData(TRUE);
 VARIANT vResponse;
 char *str;
 //把对话框中有用户输入的命令字符串Cstring
 //m_CommandString,由串口发出
 m_Comm.SetOutput(COleVariant(m_CommandString));
 Sleep(50);//延时50毫秒,一个保证有足够的时间  //让PLC响应命令
//读取串口输入缓冲区中的字符个数,如大于0表 //示串口接受到PLC的响应帧,然后//进行处理
 int k=m_Comm.GetInBufferCount();
 if(k>0)
  {
   //把PLC发送来的响应帧转换为字符 //串,并在对话框的响应文本框中显示
   vResponse=m_Comm.GetInput();
   str=(char *)(unsigned char*)vResponse.parray->pvData;
   str[k]='

 
本文摘自《PLC&FA》

中国工控展销网  E-mail:kefu@gkooo.com