- 关键词: wince 工控主板 ppi 西门子plc
- 摘要:英创嵌入式工控主板提供了基于串口和tcp的modbus软件包,可以使用modbus与西门子plc相连。本文以英创esm6802工控主板和西门子s7-200系列plc为例,介绍连接和使用方法。
西门子s7-200系列plc是工业场合应用最广的现场控制设备之一,s7-200系列plc支持自由端口、mpi、ppi和moddus等通讯方式。自由端口方式需要用户自己制定通讯协议,plc与上位机两端都需要编写相应的协议程序,实现复杂、难度较高。西门子的step7 microwin编程软件使用ppi(point to point)协议连接plc,利用ppi协议可以调试\下载plc程序、传输数据,但西门子并未公开ppi协议内容。modbus是工业控制现场广泛应用的通讯协议,在嵌入式领域,嵌入式主板通常采用modbus与plc相连,英创嵌入式工控主板就提供了基于串口和tcp的modbus软件包,但plc要支持modbus协议同样需要相应的程序编写,同时modbus协议会占用一定的plc中断和代码资源。
s7-200系列plc的编程通讯接口内部固化了ppi通讯协议,如果上位机软件能利用ppi协议读写plc,就可以省去plc的通讯程序编写。为了方便嵌入式工控主板与plc连接,我们分析了ppi通讯协议格式,把操作plc的常用指令封装成了简单的api接口函数,利用这些函数可以实现设置plc工作模式、读取plc型号信息、读写plc存储器等功能。
esm6802是预装wec7.0(或linux)的i.mx6 双核嵌入式工控主板,板载了双网口,双can,7串口,4-usb pcie x1、精简isa等多种通讯接口,同时esm6802提供了rgb、lvds和hdmi三种显示接口,可以支持从320×240分辨率的低成本lcd到1920×1080的全高清显示屏。下面将以运行wec7.0操作系统的esm6802作为上位机,介绍wce工控主板如何使用ppi协议连接s7-200 plc。
1、硬件连接
s7-200系列plc的编程通讯接口为rs485电平,安装step7 microwin的pc机通过pc/ppi通讯线缆连接plc。pc/ppi通讯线缆完成了rs232电平到rs485电平的转换,其rs232端与计算机串口相连,rs485端与plc的编程通讯口相连。esm6802同样使用pc/ppi线缆连接plc,esm6802的com3口为rs232电平,pc/ppi线可直接插到esm6802的com3口上使用,esm6802与plc的硬件连接方法如下所示:
图1 esm6802与s7-200 plc的硬件连接
2、软件实现
ppi是点到点的主从协议, plc的通讯接口缺省情况下工作在ppi从(slave)模式,以便接收来自step7 microwin编程软件的数据,step7 microwin自然工作在ppi主(master)模式。esm6802在与plc相连时,esm6802作为上位机工作在主模式,plc通讯接口为缺省的从模式。
下面是我们基于ppi协议封装的操作plc的api函数,详细的函数说明可参考ppi.h头文件。
// 功能描述: 设置相应串口的通讯参数,
handle ppi_openport(lpctstr lpportname);
// 功能描述: 关闭ppi使用的串口设备
bool ppi_closeport(handle hport);
// 功能描述: 设置ppi通讯的超时时间,单位为毫秒。默认超时时间为ms
int ppi_settimeout(handle hport, int nmilliseconds);
// 功能描述: 设置两次ppi通讯之间的间隔时间,单位为毫秒。默认时间间隔为ms
int ppi_setpolldelay(handle hport, int nmilliseconds);
// 功能描述: 设置设置本机的ppi地址,默认本机地址为x00
bool ppi_setlocaladdress(handle hport, uint8 blocaladdr);
// 功能描述: 与指定的plc握手
int ppi_findplc(handle hport, uint8 bslaveaddr);
// 功能描述: 读取指定plc的型号和保护等级
int ppi_getplcid(handle hport, uint8 bslaveaddr, uint8 cpuid[], uint8 *pprotectionlevel);
// 功能描述: 设置plc工作在run模式或stop模式
int ppi_setplcmode(handle hport, uint8 bslaveaddr, int nmode);
// 功能描述: 读plc指定存储器数据
int ppi_read(handle hport, uint8 bslaveaddr, lpcstr lpstorageaddress, uint8 *pnumofread, uint8 readdata[]);
// 功能描述: 写plc指定存储器数据
int ppi_write(handle hport, uint8 bslaveaddr, lpcstr lpstorageaddress, uint8 *pnumofwrite, uint8 writedata[]);
下图是在wec7工控主板esm6802上运行的利用ppi api操作plc的demo程序,程序实现了搜索plc、设置plc工作模式、获取plc型号信息以及读写plc存储器等功能。
图2 在wce上运行的操作plc的例子程序
esm6802具有相当丰富的通讯接口,与突出控制功能的plc可以形成良好的功能互补,同时esm6802对大屏显示器的支持也适合用做plc控制系统的状态监控人机交互终端。
ppi api以lib库的形式提供,可以在英创所有wce工控主板上运行,图2所示的demo程序提供源代码参考,感兴趣的用户可与英创联系索要。