大家刚开始接触M218PLC可能知道怎么编程序,但可能不知道怎么与HMI通讯,这里讲一下:
在PLC编程中可能都用这种声变量的方式来编程,比如:
声明:
start:
bool;
stop:
bool;
pump:
bool;
程序部分:
pump:=start or pump and not stop;
说明:这就是一个简单的起保停电路。
当给start信号pump(泵)就运行,按下stop按扭pump就停止;
1)怎样将start(起动)、stop(停止)、pump(运行)与PLC的输入输出相连起来?
PLC如M218的输入端子标识I0、I1、I2……等,在内部PLC的输入地址映像寄存器是以8进制编址的,即%IX0.0是输入端子I1的输入映像,%IX0.0~%IX0.7==I0~I7,%IX1.0~1.7==I8~I15就这样对应的。输出映像寄存器是%QX0.0~%QX0.7==Q0~Q7。我们要想将start与I0,stop与I1,pump与Q0建立连接就可以这样声明:
start at %ix0.0: bool;
stop at %ix0.1: bool;
pump at %qx0.0: bool;
这样就将这三个变量与输入输出建立了连接。PLC的地址除了输入输出以外其余的都是中间地址区用%M表示,%MW0,代表的是字,%MW1,也是一个字的内存区。%MX0.0,是%MW0的第0位,是一个bit,与西门子的内存表示有区别,西门子第0个字是MW0,第一个字是MW2中间隔了一个编号,而schneider的这个编号是连续的,这个一定要注意。
下面讲一下,Schneider中间内存不同大小区域的表示:
%M0.0~%MX0.7构成%MB0
%M1.0~%MX1.7构成%MB1
那么%MB100表示的位是%MB200、%MB201,字节起始地址区编号是字地址编号的两倍。(注意)
%MB0、%MB1构成%MW0
%MB2、%MB3构成%MW1
那么%MW100表示的字节是%MB200、%MB201
%MW0、%MW1构成%MD0
%MW2、%MW3构成%MD1
那么%MD100表示的字节是%MW200、%MW201
知道了这些,我们与HMI通讯,PLC与HMI通讯采用modbus rtu协议
如果声明了以下变量:
start at %mx0.0: bool;
stop at %mx0.1: bool;
time at %mw100: word;
num at %md50: word;
start与stop是位所以如位地址连接%mx0.0、%mx0.1。time是字类型所以与字地址连接%mw100,这里的%mw100是我自己分配的,你也可他配其它字地址,如%mw20、%mw21等。
在触摸屏上我们添加一个modbus
设备驱动,添加地址是字的位,HMImodbus的起始地址是40001,所以40001与PLC中的%MW0对应依次类推,40002<=>%mw1,这里是相差1个编号。那么%mx0.0对应hmi的位地址就是40001,00,就是%MW0的第0位,%mx0.1就是40001,01。%mw100对应字40101,%md50对应触摸屏是40101~40102这里我们就发现了,这个%MD50的地址包括了%mw100,这里就产生地址重叠,是绝对不允许的,一定要注意,刚开始经常犯这个错误,一定要想清楚,再规划地址。%MD在HMI中建变量时类型要选DINT,选地址40101就可自动取这两个字的内容40101到40102,如果选的是INT就错了。