项目文件下打开PMAC Script Language文件夹,右击PLC Programs文件夹添加一个PLC文件。
基本结构:
IDE自动分配一个与这个命名程序对应的内部编号,从1开始。当启动(使用enable plc命令)或列出程序的内容(使用list plc命令)时,你可以在任何地方使用它。最多可以创建32个PLC程序,编号从0到31。
程序的逻辑编写很简单,类c语言,我贴一些官网的案例。
while:
while(Input1 == 0) {} // Pause here until Machine Input 1 goes high
while(Input2 == 1)
{
Counter++; // Increment Counter while Input2 is 1
}
if:
if(Input1 == 0) // If Machine Input 1 is low
{
Output1 = 0; // Set Output 1 low
}
else
{
Output1 = 1; // Set Output 1 high
}
switch:
switch(MachineState)
{
case 0:
// action1
break;
case 1:
// action2
break;
default:
// action3
break;
}
open plc MyPLC
// --------------------User Code Goes Here------------------------
cmd"要使用的终端命令"
cmd"#1j/" //1号电机上电
cmd“enable plc 1” //启用plc1
cmd"Motor[1].AmpEna" //查询1号电机上电状态
close
enable plc 1 //启用plc1
enable 3..5 //启用plc3到5
open plc MyPLC
// --------------------User Code Goes Here------------------------
if (Sys.ModbusServerEnable==0) //判断服务时候启用
{Sys.ModbusServerEnable=1;}
close
开启服务后,在HMI上配置好pmac的ip地址,以威纶通的触摸屏为例。
注意数据需要转换
在Libraries文件夹下新建一个名为ReadModbusBit的函数,代码如下:
///从HMI读数据//
open subprog ReadModbusBit(ModbusAddress, &Output)
local BufferNo,BitNo;
ModbusAddress=ModbusAddress-1;
BufferNo=int(ModbusAddress / 8);
BitNo=ModbusAddress % 8;
Output=(Sys.ModbusServerBuffer[BufferNo]>>BitNo) & 1;
close
再新建一个名为WriteModbusBit的函数,代码如下:
/往HMI写数据
open subprog WriteModbusBit(ModbusAddress,Input)
local BufferNo,BitNo;
ModbusAddress=ModbusAddress-1;
BufferNo=int(ModbusAddress / 8);
BitNo=ModbusAddress % 8;
if (Input==1)
{
Sys.ModbusServerBuffer[BufferNo]|=1<
在plc程序里使用
open plc MyPLC
// --------------------User Code Goes Here------------------------
if (Sys.ModbusServerEnable==0) //判断服务时候启用
{Sys.ModbusServerEnable=1;}
call ReadModbusBit(1,&TestReadModbus) //将HMI的按键读到TestReadModbus变量,PMAC中需要定义TestReadModbus变量
call WriteModbusBit(10,Motor[1].AmpEna) //将PMAC的Motor[1].AmpEna参数写到bit10,再在HMI显示出来
close
PMAC变量与ModbusTcp的转换
文档上分别说明了I、M、P、Q这四种变量的转换,我使用M变量来演示。
M n = n × 2 + 16384 + 2 Mn=n\times 2+16384+2 Mn=n×2+16384+2
plc程序:
//M130=2*130+16384+2
M130=Motor[1].JogSpeed*1000;
这样就能把ModbusTcp的地址和PMAC的地址对应上,读取和写入一样对的,只要在HMI上设置成可输入。
特别要注意设备之间大小端的问题。
在PMAC中用程序实现信号的上升沿和下降沿。
上升沿函数:
/****************************************/
//上升沿触发 FCInput1为输入,FCInput2及FCOutput1为同一个全局变量做中间变量,FCOutput2为输出脉冲
/****************************************/
open subprog UpTrigFC(FCInput1,FCInput2,&FCOutput1,&FCOutput2)
if (FCInput1==0 && FCInput2==0)
{FCOutput1=0;FCOutput2=0;}
if (FCInput1==1 && FCInput2==0)
{FCOutput1=1;FCOutput2=1;}
if (FCInput1==0 && FCInput2==1)
{FCOutput1=0;FCOutput2=0;}
if (FCInput1==1 && FCInput2==1)
{FCOutput1=1;FCOutput2=0;}
close
下降沿函数:
/****************************************/
//下降沿触发 FCInput1为输入,FCInput2及FCOutput1为同一个全局变量做中间变量,FCOutput2为输出脉冲
/****************************************/
open subprog DownTrigFC(FCInput1,FCInput2,&FCOutput1,&FCOutput2)
if (FCInput1==0 && FCInput2==0)
{FCOutput1=0;FCOutput2=0;}
if (FCInput1==1 && FCInput2==0)
{FCOutput1=1;FCOutput2=0;}
if (FCInput1==0 && FCInput2==1)
{FCOutput1=0;FCOutput2=1;}
if (FCInput1==1 && FCInput2==1)
{FCOutput1=1;FCOutput2=0;}
close
使用方法:首先定义一组变量
global plus,plus0,plus1;
在plc中使用
call ReadModbusBit(1,&plus)
call UpTrigFC(plus,plus0,&plus0,&plus1)
call DownTrigFC(plus,plus0,&plus0,&plus1)
if(ManualPower1==1)
{
m1=m1+1; //按钮按下m1加1
}
if(plus1==1)
{
m2=m2+1; //松开按钮m1减1
}
open plc 1
// --------------------User Code Goes Here------------------------
call Timer(1)
if (ECAT[0].Enable==0)
{ECAT[0].Enable=1;}
else
{disable plc 2;}
close
使用时要在pp_startup启用该plc程序。
/**********************************************/
// 功 能: 延时函数,单位:秒
/**********************************************/
open subprog Timer(delay_times)
local EndTime;
EndTime = Sys.Time + delay_times;
while(EndTime>Sys.Time){};
return;
close
这一节中出现了很多子程序,子程序的具体介绍可以看培训文档,我这不做介绍,使用ModbusTcp一定要注意设备之间大小端的问题。下一节讲讲运动学。