首页 > 范文大全 > 正文

西门子S7―200PLC自由口通讯的两种Delphi实现方法

开篇:润墨网以专业的文秘视角,为您筛选了一篇西门子S7―200PLC自由口通讯的两种Delphi实现方法范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

【摘要】本文介绍了PC机与PLC实现自由口通信的两种方法。上位机采用的是PC机,利用Delphi6.0编写应用程序,详细对其中的两种方式做了详细说明。下位机采用西门子公司的s7-200plc,文中列出了相应的程序说明。

【关键词】计算机通信;PLC;Delphi;自由口通信

1.引言

随着大规模和超大规模集成电路等微电子技术的迅猛发展,PLC作为一种新型高能的控制器已经越来越广泛地用于工业现场控制的各个领域,它有着高可靠性、低能耗、易操作、易安装等优点。但是,由于PLC的人机交互能力差,独立的PLC不能完成工业控制流程的实时和动态监控,PC机与PLC的通讯就愈加显得重要。通过PLC与PC机的通讯,使得个人计算机和其他智能控制设备交换数字信息,使系统形成一个统一的整体,方便实现分散控制和集中管理。

2.S7-200的通信与PC机的通信机理

S7-200 PLC的CPU支持多种通信协议,包括:点到点接口协议(PPI)、多点接口协议(MPI)、Profibus协议、自由通信接口协议和USS协议。自由通讯口模式是S7-200PLC一个很有特色的功能,用户可以通过用户程序对通信口进行操作并且自己定义通信协议。应用该通信方式,S7-200可以方便地和任何通信协议已知、具有串口的智能设备和控制器进行通信。

通过设定特殊存储字节SMB30(端口0)或SMB130(端口1)允许自由口模式,设置它的波特率、奇偶校验和数据位数。用发送指令(XMT)和接收指令(RCV)对数据进行通信操作。值得注意的一点是:只有在CPU处于RUN模式时才允许自由口模式,当CPU处于STOP模式时自由口模式将自动转换为PPI协议模式。用反应CPU模块上的工作方式的特殊存储器位SM0.7来控制自由口通讯方式的进入,当SM0.7为1时CPU处于RUN模式,可将通信口置为自由口模式。

在PC机与PLC的通讯过程中,主要是由PC机发送信息来强制控制PLC的状态,接收PLC发送过来的信息来显示控制状态。PLC发送信息通过检测SM4.5来每半分钟发送有关PLC状态的信息,以使PC机信息更新。

3.下位机(PLC)实现

对PLC的通信编程就是对串口进行设置。当CPU处于RUN模式时,进行自由口通信。

3.1 端口的初始化

4.上位机的Delphi实现

Delphi是Borland公司推出的一种功能强大的高级编程语言,具有可视化面向对象的特性。将Windows编程的复杂性封装,实现可视化设计和Object Pascal语言的有机结合,特别适于在Windows环境下图形界面和用户程度的编制。Delphi的伸缩性很强,控件功能强大,往往只需编写较少的代码就可以实现较复杂的应用。并且相对于WINCC、IFIX组态软件,使用Delphi会降低很多成本。

4.1 用第三方提供的控件MSComm实现

首先要将Activex控件导入Delphi中:打开主菜单[Component]选择[Import ActiveX Control],选择列表中的[Microsoft Comm Control 6.0]选项(安装VB6.0后就可以看到这个选项),单击Install按钮,编译后完成安装,这时,可以在Activex控件页上看到一个电话图标,这就是MSComm控件。

新建一个Application项目,在主窗体Form1中添加一个MSComm控件后可进行串行口的初始化。如设置COM口,设置发送、接收对列长度、比特率、数据帧长度、每次接受到字符即产生OnComm事件等[2]。

4.2 用API函数实现串口通信

在Windows系统下,由于应用程序不能直接访问硬件,因此只能通过调用API(Application Programming Interface)函数来完成与下层设备的数据交换。操作系统为每个通信设备开辟了用户可定义大小的读/写缓冲区,数据进出通信端口均由操作系统后成,用户只需调用API函数编写串行通信程序对读/写缓冲区进行操作而已。在Delphi中对串口编程的基本步骤是:

首先,采用CreateFile函数打开串行口,以确定本应用程序对此串口的占有权,并封锁其它应用程序对此串口的操作。

其次,DCB中记录有可定义的串行口参数,设置串行口参数时必须先用GetCommState函数将系统默认值填入DCB控制块,然后再通过调用SetCommState函数配置串行口的波特率、数据位、校验位和停止位。

然后通过ReadFile和WriteFile进行串行口的读写操作。

最后用CloseHandle函数关闭串行口。

4.3 多线程技术

为了有效克服串口通信中的停滞和反应不及时的情况,采用Delphi的多线程模式加以克服。

在PC机中,同一时间只有一个线程在运行。由于系统为每个线程划分的时间片很小(20毫秒左右),所以看上去是多个线程在同时运行。进程中的所有线程共享进程的虚拟地址空间,这意味着所有线程都可以访问进程的全局变量和资源。一方面为编程带来了方便,但另一方面也容易造成冲突。所以,如果进程既要进行长期的工作,又要响应用户的输入,那么可以启动一个线程来专门负责费时的工作,而主线程仍然可以与用户进行交互。对于通信程序这样既要进行耗时的工作,又要保持对用户输入响应的应用来说,使用多线程是最佳选择。主要的处理逻辑如下:进程一开始先由主线程做一些必要的初始化工作,然后主线程根据需要在适当时候建立通信监视线程监视通信口,当指定的串行口事件发生时,向主线程发送WM_COMMNOTIFY消息,主线程对其进行处理。若不需要WM_COMMNOTIFY消息,则主线程终止通信监视线程。

多线程同时执行,将会引起对共享资源的冲突。为避免冲突,就要用同步多线程对共享资源进行访问。通过CraeteEvent()创建事件对象,使用SetEvent()或PulseEvent()函数将事件对象设置成信号同步。在应用程序中,利用WaitforSingleObject()函数等待同步的触发,等到指定的事件被其它线程设置为有信号时,才继续向下执行程序[3]。本系统采用上位机主动的方式,将上位机与下位机的编程融为一体,不需要PLC内部的梯形图作为下位机程序,具有很好的通用性。

5.结束语

本文根据PLC和PC机的特点,介绍了两种PC机与PLC的基于delphi通讯方法,用MScomm方法实现有封装性、继承性、多态性等特性,且编程简单;用API函数实现则有运行效率高的特点。

两者各有其优点,无论是在系统的实时性、可靠性,还是在灵活性上均获得了令人满意的效果。

参考文献

[1]李如甲.基于RS_485的智能仪表与PLC串行通讯[J].仪表技术与传感器,2011,8:34-36.

[2]王正强.VC中应用MSComm控件实现串口通信[J].电子测试,2010,5:73-76.

[3]吕实诚.多线程技术在串口通信中的应用[J].数字技术与应用,2010,2:74.

[4]林盛.基于VC的PC与PLC自由口通讯[J].当代化工, 2013,7:1015-1016.

[5]吴帆.VB6.0与S7_200的自由口通讯研究[J].现代科学仪器,2011,1:48-51.