用户登陆 用户注册
您的位置:首页>
技术文章>内容正文
用VC++开发微机与OMRON PLC间的一种通讯程序
[正文]:摘 要] 本文介绍了一个使用visual c++编写的通信程序,主要实现微机与omron plc间的通信,并对它们间的通信协议作了阐述。
[关键词] plc 链接通信 通讯控制 1、前言可编程控制器是一种数字运算操作的电子系统,专为在工业环境下应用而设计。
它采用了可编程序的存储器,用于其内部存储程序,执行逻辑运算、顺序控制、定时、计数和算术操作等面向用户的指令,并通过数字式或模拟式输入输出控制各种类型的机械的生产过程。
可编程控制器及其有关外部设备,都按易于与工业控制系统联成一个整体、易于扩充其功能的原则设计。
早期的plc以数字量的顺序控制为主,提供了简单的慢速的通信功能(只支持rs232、rs485、多采用modbus协议),现在的plc不仅具有逻辑运算、顺序控制、定时、计数和算术操作,而且还具有a / d、d / a转换,数值计算和数据处理等功能。
它既可以对开关量进行控制,也可以对模拟量进行控制,随着plc功能不断扩充,它还有通讯联网功能,举例c200hx / hg / he的omron plc的cpu内的rs - 232c端口和外设端口支持通信功能就有与编程设备(如编程器,lss,或sss (中文版))进行通信、与个人计算机和其它外设进行上位机链接通信、与个人计算机和其它外设进行rs - 232c、与其它pc进行1:1、再有是与装有nt链接接口的可编程终端(pt)进行nt链接通信(1:1、1:n),本课题就是基于omron plc的链接通信(有通信协议),用vc++开发的上位机与plc间的通信。
2、omron plc的通信协议目前,随着plc的快速发展,越来越多的plc生产厂商开发了它与计算机的通信功能(主要是利用计算机串口进行通信),本文是以c200he plc为例,作详细阐述,本文的通信协议采用的是上位机链接通信。
上位机链接通信通过在上位机与plc之间交换命令和应答实现的。
在一次交换中传输的命令和应答数据称为一帧,一个帧最多可包含131个数据字符。
命令帧格式 从上位机发送一个命令时,按下示的格式排列命令数据 @符号必须置于每个命令的开头,节点号是用来辨识每一台plc的节点,在本文中,它设置plc的dm6558单元中,识别码设置两字符的命令代码,设置通信是读写plc的哪个寄存器单元,例读写ir / sr区时它的识别码设置分别为rr和wr,读写dm区分别为rd和wd。
正文设置命令参数,包括所要读写plc寄存器单元的起始地址和字数。
fcs是设置两字符的帧检查顺序码,是一个转换成2个ascii字符的8位数据,这8位数据为从帧开始到正文结束(即fcs之前)所有数据执行“异或”操作的结果。
终止符设置“*”和回车(chr 36;(13))两字符,表示命令结束。
命令帧可以有最多131个字符长。
一个等于或大于132字符的命令必须分成若干帧。
命令分段,使用回车定界符(chr 36;(13))。
应答帧格式 识别码和正文取决于接收到的上位机联结命令,结束码表示命令完成的状态(即是否有错误发生),当应答超过132字符,它必须分成若干帧。
结束码是应答帧中表示plc应答的信息。
例结束代码为00表示正常结束,13表示fcs错误,14表示格式错误,15表示入口码数据错误,18表示帧长度错误,a3表示传输数据时因fcs错误引起终止,a8表示传输数据时因帧长度错误引起终止。
本文的上位机命令帧包括读写plc单元中的数据的命令。
读命令帧为:@01rr0100000141* + chr 36;(13),意思是上位机读取节点为1的plc中的ir0100单元中的内容。
写命令帧为:@01wr0100000171* + chr 36;(13),意思是写一个数到节点为1的plc的ir0100单元中。
3、系统结构图下图是计算机与plc通信的组成系统图 上位计算机与多个plc进行通信,必须连接一个rs232 / 422电平转换器,rs422采用平衡发送接收方式,它具有传输距离长、抗干扰能力强和多点通信能力,最多可以接32台plc,如图1所示,每一台plc都必须挂一个com06单元进行rs422方式连接,所有的plc与计算机间的通讯采用的是plc上位机链接通信协议。
3.1 硬件设置 rs232 / 422转换器的设置开关拨到422方式,omron plc上的com06通信板单元同样设置为422方式和四线制。
3.2 参数设置 上下位机的通信波特率设置为9600,数据格式设置为e,7,2。
3.3 节点设置 在plc的dc6558单元中设置节点号00(初始值)~ 31(号机)。
4、用visual c++6.0编写串行通信程序本文的上位机链接通信程序是用visual c++6.0编写的,主要是利用vc++中的一个通信控件来实现的。
首先利用mfc appwizard ( exe ) 建立一个基于对话框,支持activex控件,命名为transcomn的应用程序。
然后在对话框中加入一些控件,其中那个电话形状的控件必须是在系统中注册过的microsoft communications control,由它进行通讯时首先得设置它的一些属性如表1。
属 性 设 定 值 说 明----------------------------------------------commport 1 通讯协议为 plc 上位机链接通信,利用微机的串口1inputmode 0 接收数据类型为文本形式rthreshold 1 每接收一个字符就产生一个事件settings 9600, e, 7, 2 参数依次为波特率、奇偶检验数据位数、停止位数5、程序编写在程序中需添加的代码如下: // transcommdlg.cpp:implementation file bool ctranscommdlg::oninitdialog () 123; 最后要在classwizard中添加变量和响应函数如表2。
控制名称 控制 id 对应变量或函数通讯地址文本框 id - address m_addressdm 区文本框 id - dm m_dmboxlr 区文本框 id - lr m_lrboxhr 区文本框 id - hr m_hrboxir 区文本框 id - ir m_irbox应答帧文本框 id - response m_response通讯控件 id - mscomm m - comm.发送命令按钮 id - send onsend ( )// todadd extra initialization here // 打开通信端口1 m_comm..setcommport (1); if_(m_comm..getportoper ()) m_comm..setportoper (false); m_comm.setportopen (true); // 初始状态为选中地址为1的plc,并对它的dm0100单元实行操作 m_address= “1” m_dmbox=“0100” return true;125; // 发送事件 void ctranscommdlg::onsend () 123; // todadd your control notification handler code here // 按本文第二部分介绍的,写出需要传出的命令码字符串cstring m_send // 将这个字符串发送到串行口 cstring m_send; m_comm.setoutput (colevariant (m_send)); 125; // 接收事件 void ctranscommdlg::oncomm () 123; // todadd your control notification handler code here if (m_comm..getcommevent () = 2) 123; cole variant m_input = m_comm.getinput (); m_input.changetype (vt_bstr); m_response = m_input.bstrval; // 把接收到的变量赋给应答帧文本框变量 updatedata (false); 125; 125; 6、结论按照类似的方法,选择不同的地址和单元区,可以编写出其它命令的控制指令,以上的程序已在我所在的武汉大学plc控制网络实验室作过实验,得到验证。
网站首页
培训课程
维修指南
技术文章
家电专栏
供应信息
求购信息
培训资讯
展会信息
电脑专栏
教程下载
资料下载
常用软件
PLC教程
PLC资料
变频伺服
低压电器
维修资料
人机界面
自控仪表
工控机类
文章标题:
中国工控资源网手机版 2012
电话:010-67577139 13811659603
培训咨询QQ:657167934 471895637 销售咨询QQ:623769457
联系邮箱:zggkzyw@163.com
京ICP备11002135号
报时(2026-04-04 02:20:42)