PLC与PC通信
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4、以太网编程
采用以太网编程访问plc,其实又可以分为两种:
一种是socket接口,需要在plc里面编程进行收/发,大概是fc5/fc6吧,印象不深了,当然plc里面要定义一个connection,填好地址、端口号之类的信息,这个对于熟悉西门子工业通讯的人是很easy的事情。
Pc侧采用socket接口编程,最简单的就是vb里面的wisock控件,当然这掩盖了很多细节。
Socket 编程本来就是一门艺术。
这个方法的优点应该是pc侧编程稍微简单点(相对于后一种),而且可以不局限于windows平台,因为socket接口被诸如unix支持的更好。
第二种是采用西门子的sapi接口函数,这样plc里面不需要过多的编程了,当然pc侧的编程难度就比较高了,ms只能用c来写。
为了允许PC机和工作站上的应用程序与西门子S7系列产品进行S7通讯西门子公司提供了一个SAPI-S7应用程序接口通过它可以灵活而方便地跟西门子S7系列产品进行通信。
安装SIMATIC Net软件后会在系统system32目录下生成一个s732.dll文件该动态链接库提供了大量基于WindowsNT、Window95/98、Windows3.11和MS-DOS的函数这样就使得用户解决PLC和PC机的数据交换和数据处理问题变为可能。
通信编程包括两个部分:
(1)CP连接组态
(2)PLC与上位机通信编程。
4.1 CP连接组态
可采用step7软件或step7软件中用于工业以太网的NCMS7软件对CP进行网络组态。
通讯处理器CP可连接PCPC/PG上一般装网卡CP1613。
在Windows控制面板下的“set PC/PG”下安装所用网卡驱动程序并设协议、站号、波特率、是否为主站完成对VFDs(Virtual Field Device)和S7 connections的配置。
页脚内容1
4.2 PLC和上位机的通讯编程
S7-300/400PLC有以下各类资源:
(1)输入点I:接收外部开关量信号
(2)输出点Q:输出给外部的开关量信号
(3)内部辅助点M:存放所需中间结果
(4)时间继电器T
(5)计数器
(6)数据块DB:存放程序数据的存储区域
(7)外设输入DI:主要接收模拟量输入信号经A/D转换
(8)外设输出DQ:给出模拟两输出值。
要读/写这些资源首先要建立PLC和PC机的连接。
4.2.1 初始化与PLC的连接
SAPI-S7应用程序接口提供的管理服务模块(Administrative Services)提供了一些可供读出配置信息和登录/退出通讯系统的函数,下面作一些简要介绍:
s7_get_device() :通过此函数用户程序可以查询所有已安装的CP的CP名。
s7_get_vfd():通过此函数用户程序可以查询任一指定CP的所有已配置的VFD。
s7_init():通过此函数用户程序可登录通讯系统。
页脚内容2
s7_get_cref() :此函数提供了一个指向所选S7 connection名的指针。
s7_get_conn():此函数返回已登录VFD的所有S7 connection名和指向他们的指针。
s7_shut():通过此函数用户程序可退出通讯系统。
一个应用程序可以登录一个或多个CP的若干个VFD只有当应用程序登录CP及其所选的VFD在配置期间指定给该VFD的所有连接才是有效的。
4.2.2读/写PLC内部资源
初始化与PLC的连接成功后就可以对PLC进行读写操作。
对PLC存储区即数据块DB的读写是实现监控的最基本操作。
SAPI-S7应用程序接口提供的变量服务模块(Variable Services)提供了一些读写函数由于篇幅有限现选一些经常用到的函数作一些简单介绍。
s7_cycl_read():此函数通知服务方准备对单存储单元循环读一个变量。
s7_get_cycl_read_ind():此函数接收来自服务方发送的数据。
s7_multiple_read_req():此函数通知服务方准备对多存储单元读一个或多个变量。
s7_get_multiple_read_cnf():此函数接收来自服务方的一个或多个变量的值。
s7_multiple_write_req():此函数通知服务方准备对多存储单元写一个或多个变量。
s7_get_multiple_write_cnf():此函数接收来来自服务方的执行上述写请求的结果。
需要特别注意的是:S7 300/400PLC遵循“高地址、低字节”的规律这与某些习惯用法不同。
例如在C++Builder6中变量类型为word的变量它的数据存放顺序是“低地址低字节”的规律。
因此在对所读取的数据进行操作或给PLC数据块中写数据字时要进行相应的处理。
为解决上位机不能因前台的信息处理而中断后台的监听等问题可采用多线程编程技术将对PLC内部资源的读/写功能模块交给一个后台线程来完成。
多线程编程技术能提高CPU利用率加快信息处理提高系统的实时性在由多台计算机组成的分布式实时控制系统中应用多线程技术是完全必要的。
4.2.3后台读/写线程模块部分代码
页脚内容3
····· do {
ret = s7_receive(cp_descr&cref&orderid);
switch(ret)
{ case S7_NO_MSG: break;
case S7_INITIATE_CNF: Synchronize(my_get_initiate_cnf);
Synchronize(my_multiple_read_req); break;
case S7_MULTIPLE_READ_CNF:
Synchronize(my_get_multiple_read_cnf); Synchronize(my_multiple_read_req); break;
··
case S7_ABORT_IND: Synchronize(my_get_abort_ind); break; case S7_VFD_STATE_CNF: Synchronize(my_get_vfd_state_cnf);
Synchronize(my_abort); break;
case S7_VFD_USTATE_IND: Synchronize(my_get_vfd_ustate_ind);
break;
default : ····· }
}while(ret != last_event_expected)
5 总结
页脚内容4
运用C++Builder6.0编写的PLC控制调试程序具有用户界面友好人机交互方便数据库功能强大灵活的特点具有较强的通用性和实用性。
通过调用S7通讯提供的SAPI-S7应用程序接口实现PC机与S7300/400PLC 基于工业以太网的数据通讯不仅数据传输率快而且数据传输正确率高。
在对PLC控制系统的调试过程中大大缩短了调试周期提高了工作效率。
此通讯技术的实现对西门子工控产品的应用以及工业以太网的推广应用有着广泛普遍的重要意义。
页脚内容5。