之前发过一个PTP编程方法的系列帖。PTP就是指自由通讯。帖子连接如下:
https://www.ad.siemens.com.cn/club/bbs/PostStory_1963674_80.html#anch
这2天探索了PTP模块的2吃。所谓2吃,就是针对一个PTP模块实时地频繁地进行232模式和485模式的切换。今天这帖跟大伙说说这事。
先说工艺上。工艺上有2个分子泵(分子泵一种抽真空的高速泵)。这2个泵是一个厂家的,但是型号不同,一个是Mag型,这是一种大泵,工艺中也称为TB1。一种是Turbovac型,是一种小泵,工艺称为TB2。
工艺的要求是:PLC与2个泵进行通信,通过通讯对2个泵进行监控。大泵通讯口是232,小泵通讯口是485,他们均采用USS协议。这个USS协议是我用程序编写的,没有采用博途库里面的块。这个问题先不表。
根据工艺要求,我采用了ET200SP的PTP模块作为与泵通讯的模块。这个模块安装在2个泵旁边的子站中。
这个模块的样子如下

图1
图片看着大,实物不大。
由于一个泵是232,另一个泵是485,所以选用2个PTP模块,一个模块用作232通讯,另一个模块用作485通讯。图纸如下

图,2
我编写了程序,2个泵用了同一个FB块,不同的背景数据块实现2个泵的PTP通讯。这很常规。在我之前的系列帖子中也有讲到这个例子。
在回顾上面图2的PTP模块时,我发现这个模块有个特点。端子1-10用于RS232,端子11-16用于RS485。为此,我联想了一下,能不能充分利用1个模块的端子同时与232泵和485泵通讯呢?1个PTP模块进行2吃。下文称为 “2in1” 。尝试一把。
先改图

图,3
图3中把2个泵的通讯线接到了一个PTP模块中。
然后把之前的通讯程序稍作修改。了解我之前帖子的同行都知道,我编写程序习惯有层次。在这个案例中有层次的程序的优势显现了出来。我只需要将之前的程序中应用层改写一下,保证2个通讯不同时进行就可以了。
经过调试,发现我的2吃想法可以实现。到目前已经稳定运行了2天了。也测试了2种异常情况。第一种异常是将PTP模块在运行中拔出然后再带电插回;第二种异常是切断一个泵的电源,这2种异常情况下,程序可以很好的适应。
由于程序分层次,也比较大。无法在这里复制。如果有需要的同行,可以联系我。在这里我把程序的结构说一说。

,图 4
Leybold_PB这个文件夹,先不用理会,这个是之前用PROFIBUS通讯的程序。
Leybold_USS这个文件夹中的内容是一个PTP模块对应一个泵进行通讯的程序。这个文件夹是之前编写的。
Leybold_USS_2in1这个文件夹是这次编写的,用于一个PTP模块对应2个泵通讯的程序。其中的一个FB是主要FB,PTP2in1_Leybold。这个FB中程序相对简单。这个块中主要调用了 Leybold_USS这个文件夹中的内容。这也是我之前强调的编程要分层次。虽然有些繁琐,但是好处很多。在实现2in1的功能时,80%的程序是之前1to1模式时编写的。当需要2in1模式时,直接拿来用就可以了。
这里说说FB(PTP2in1_Leybold)的内容

,图5
NEWWORK 1 用于触发通讯。要完成,定时功能,完成2个泵通讯不打架的功能。
NEWWORK 4 用于配置PTP模块,收发,复位功能。每次触发本块,要对PTP模块进行配置,配置时,就包括了232/485的选择,波特率等的配置。这里强调,用软件进行配置可以与在硬件中配置相同的效果。但是软件中配置可以随时更改硬件配置。正是由于这一点,所以才可以对一个PTP模块实现频繁地实时地切换232/485工作模式。
NEWWORK 6 用于AA。AA的作用在我之前的系列帖中有描述,这里不多介绍。
NEWWORK 7 用于判定这次通讯结束,并为切换到另外一个泵通讯做准备工作。
下面2张截图就是在OB1中调用PTP2in1_Leybold的情况

图6,大泵的调用

图7,小泵的调用
这里面再介绍一个小技巧。要用一个泵通讯任务结束标志去开启另外一个泵的通讯任务。这种方式来对一个PTP模块进行时间2in1的工作分配。不要用定时器强行分配2个泵的通讯。
西门子的1500PTP模块也可以这么用。
这个帖也不短了,先说的到这里吧,以后有想到的,再跟帖。
谢谢.
4525

被折叠的 条评论
为什么被折叠?



