1 引言
PLC因为体积小、功耗低、、抗干扰能力强、编程使用方便等优点被广泛地应用于工业控制领域。但在实际应用过程中,往往是被控对象的输出点少于输入点,实现控制任务需要检测的点较多,或者操作按钮比较多,这样在选型时PLC的输出点数目可以很容易的满足要求,而对于输入点来说有可能不易满足,针对这样情况通常可以采取如下措施:(1)选取输入点数目比较多的PLC,这样在满足了控制系统对输入点数目的要求同时,增加了输出点数目,使输出点产生冗余而闲置,造成了资源浪费。(2)选择输出点数目满足要求的PLC,通过配置专用的输入模块来增加输入点数目,使输入点数目满足控制系统的要求,这种方法增加了控制系统的成本,降低了系统的性价比。(3)仍然是选择输出点数目满足要求的PLC,但在扩展时增加部分外围电路,这部分电路主要由译码器构成,这样可以大大降低系统的初期投资。(4)采用PLC的软件编程实现,其优点是在PLC输出点数目满足系统要求的前提下,选择输入点数目较少的PLC,不增加额外的硬件,利用这PLC自身固有的资源,通过编码方法实现输入点数目的扩展。本文通过对PLC输入、输出点的组合,介绍了两种基于软件编程方法的输入点扩充方法。
2 基于软件编程方法的输入点扩充方法
PLC的一个重要的特点就是各组输入、输出点的独立性较强,这一点主要表现在输入、输出点的公共端上。一方面,单独的输入、输出点可以有自己的公共端另一方面,多个输入、输出点可以共用一个公共端,这样输入、输出点相互间的组合就比较容易。通过这些组合,我们可以借用矩阵键盘扫描原理和输入节点组合矩阵的原理来增加输入点数目。
2.1 利用矩阵键盘扫描原理扩展PLC输入点数目
取PLC的m个输入点作为输入节点矩阵的行回扫线输入端,取PLC的n个输出点作为输入节点矩阵的列选择线输出端,同时将所用输入端的公共端COM和输出端的公共端COM相连,通过内部程序控制n条列选择线的状态,从而实现输入节点矩阵列扫描;通过检测m个输入点的状态,完成输入节点矩阵的行扫描;这样就可以唯一确定输入节点矩阵中某一接点的闭合状态。利用节点矩阵,可以很方便地由m个输入点和n个输出点扩展成m×n个输入点。

图1为采用矩阵键盘扫描原理扩展4×2个输入点的原理图。当PLC的输入、输出动作时必须构成一个闭合回路。下面以输入节点S0和S1说明系统的工作过程:
(1) 当PLC输出点Y0、Y1断开时,输入点I0的回路不通,此时即使输入节点S1、S2闭合,PLC也无法检测到节点的闭合。
(2) 当PLC输出点Y0闭合,Y1断开时,若输入节点S0闭合,可使PLC输入点I0有效;同时,因为Y1断开,S1闭合无效。
(3) 当PLC的输出点Y1闭合,Y0断开时,若输入节点S1闭合,可使PLC输入点I0有效;同时,因为Y0断开,S2闭合无效。
通过上述分析,可以知道分时控制输出点Y0、Y1的状态,就可以唯一确定输入节点S1、S2的闭合状态,同理也可以将推广到输入节点S2、S3、S4、S5、S6、S7。在使用这种方法时必须确定键盘的扫描时间,而扫描时间的长短取决于PLC的输出点形式。对于晶体管、晶闸管以及固态继电器输出的PLC,在满足控制要求的前提下,可将扫描时间取的短一些;对于继电器输出的PLC,考虑到触点的寿命,扫描时间应适当延长。

2.2 利用输入点组合矩阵方法扩展PLC输入点数目
利用矩阵键盘扫描原理扩展PLC输入点数目的前提是PLC必须有剩余的输出点。如果没有,这种方案必然不可行,这时必须借助于输入点,下面介绍一种基于输入点组合矩阵的输入点扩展方法。
取PLC的m个输入点构成m个输入节点组,取PLC的n个输入点构成n个输入节点状态检测端,即每个输入节点组包含有n个节点,这样就可以实现m×n个输入点的扩展。当某一接点闭合时,对应的输入节点组和输入节点检测端都有信号送入PLC,通过输入节点的判断就可以唯一确定输入节点状态。
图2是利用输入节点组合矩阵扩展3×4个输入点的原理图。图2中包含有3个输入节点组,4个输入状态检测端,即每组包含4个输入节点。图2中二极管的作用是防止节点闭合时相互间的干扰。下面以输入节点S0说明系统的工作过程。
(1) 当输入节点S0断开时,对应的输入节点组输入端X0和输入状态检测端X6均无输入,表明S0断开。
(2) 当输入节点S0闭合时,对应的输入节点组输入端X0和输入状态检测端X6均有信号进入PLC,表明S0闭合。
通过上述分析,可以得到如下结论:由输入点X0和输入点X6组合的唯一性就可以唯一确定输入节点S0的状态,从而达到扩展输入点数的目的,这一结论可以从附表的真值表得出。附表1中,“1”表示PLC输入点内部触点闭合,“0”表示断开。
这种方法可方便的扩展PLC输入点数目,与前一种方法相比,对PLC的适用性较强,扫描时间的选择取决于应用程序的扫描时间。
笔者利用VC++5.0开发的DLL的完整的程序清单如下:
∥DLL源文件I0.CPP
#include <bbbbbbs.h>
#include<conio.h>
int FAR PASCAL outport(unsigned)
short sport);
int FAR PASCAL outport(unsigned short port,int databyte);
∥D11EntryPoint函数
BOOL WINAPI D11EntryPoint
(HINSTANCE hD11,
DWORDdwReason,
LPVOID Reserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
{
break;
}
case DLL_PROCESS_DETACH:
{
break;
}
}
return TRUE;
}
∥两个功能函数
int FAR PASCAL inport(unsigned short port)
{
reture(_inp(prot);
)
int FAR PASCAL outport(unsigned short port,int databyte)
{
int a;
a=_outp(port,databyte);
return a;
}
∥模块定义文件I0.DEF
CODE PRELOAD MOVEABLE DISCARDABLE
DATA PRELOAD SINGLE
EXPORTS
inport
outport
动态链接库只有在别的模块中调用了它的某个函数以后,该动态链接库才发生作用。DLL函数或过程必须在全局模块(*.BAS)中正确说明才有效。VB是用Declare语句把一个DLL函数引入VB中的,它告诉VB在哪里找到DLL函数,并且让VB知道DLL需要哪种类型的参数,同时返回哪种类型的值。当某个DLL函数用Declare语句正确声明以后,就可以像使用其它函数一样使用这个DLL函数。
在VB应用程序的全局模块中声明I0.DLL并将其放入bbbbbbs\system目录下,这样就可以向使用bbbbbbs API一样使用I0中的inport(输入)和outport(输出)函数了。
Declare Function inport Lib"io.d11"
(ByVal prot As Integer)As Long
Declare Function outport Lib"io.d11"
(ByVal port As Integer,ByVal
databyte As Long)As Long
下面的程序对图1和图2的例子进行设计。(只列出输入输出的读写操作程序)
Private Sub 输入_Click
X=inport(&H379)
Print x
End Sub
Private Sub输出_Click
y=outport(&H378,1)
End Sub
4 结束语
并口25管脚中,作输出用的是2~9共8个管脚,作输入用的10、12、13、15共4个管脚,25脚地,利用并口可方便的实现了4入8出的开关量控制。
在上位机中采用VB等语言编程,利用计算机的并口,巧妙地实现PLC的开关量功能,而且可利用VB等语言的界面设计的功能,使系统做到监控一体。且系统不需额外的投资,使用灵活简单,可靠性高。
西门子代理商,西门子模块代理商,西门子一级代理商,西门子PLC代理,西门子中国代理商