华中数控世纪星PLC编程说明书 下载本文

华中数控PLC编程说明书

注:实际上,本节提供的函数都非常简单,用户也可以根据前面几节的介绍自己编写,如本函数就可以用C语言表达如下:

void set_axis_home( int axis, //轴号 int start_stop) //起动或结束回零 {

asm cli

if(start_stop) //起动轴回零 {

*axis_ctrl(axis) |= AX_HMODE_SW; }

else //停止轴回零 {

*axis_ctrl(axis) &= ~AX_HMODE_SW; }

asm sti }

3.6.2 设置轴点动速度

void set_axis_jog( int axis,

//所指定的轴号:0-15

int speed); //点动速度,单位:内部脉冲/插补周期 本函数可以用C语言表达如下: void set_axis_jog(int axis,int speed) {

*axis_pvcmd(axis)=speed; }

3.6.3 设置轴步进指定距离

void set_axis_step( int axis, //所指定的轴号:0-15 long displacement); //步进增量,单位:内部脉冲当量 本函数可以用C语言表达如下:

void set_axis_step(int axis,long displacement) {

long l,l1,v,v1;

if(displacement==0)

return;

asm cli

l=*axis_pic_a(axis)+displacement; l1=abs(l);

v=l1/200*(*sys_iip_time()); //速度计算。单位:内部脉冲当量/插补周期 v1=*axis_vmax(axis);

if(v>v1) // 速度限制控制

v=v1;

25

华中数控PLC编程说明书

if(v<2)

v=2;

*axis_pic_a(axis)=l; *axis_pic_v(axis)=v; asm sti }

3.6.4 设置轴移动距离及速率

void set_axis_move( int axis,

//所指定的轴号:0-15

long displacement, //移动距离增量

int speed); //移动速率,单位:内部脉冲/插补周期

本函数可以用C语言表达如下:

void set_axis_move(int axis,long displacement,int speed) {

long l1,l2; int v1,v2;

if(displacement==0)

return;

asm cli

l1=abs(*axis_pic_a(axis)); v1=abs(*axis_pic_v(axis)); l2=abs(displacement); v2=abs(speed);

*axis_pic_v(axis)=(long) (l1*v1+l2*v2)/(l1+l2); *axis_pic_a(axis)+=displacement; asm sti }

3.6.5 设置轴移动的目的地及速率

void set_axis_moveto(int axis, long position,

//所指定的轴号:0-15

//移动的目的地

int speed); //移动速率,单位:内部脉冲/插补周期 本函数可以用C语言表达如下:

void set_axis_moveto(int axis,long position,int speed) {

set_axis_move(axis,position-get_axis_pos(axis),speed); }

3.6.6 设置指定轴停止运动

void set_axis_stop(int axis); //所指定的轴号:0-15 本函数可以用C语言表达如下:

void set_axis_stop(int axis) {

long l,l1,v; asm cli

l=*axis_pic_a(axis);

26

华中数控PLC编程说明书

v=*axis_pic_v(axis);

l1=v*(*sys_iip_time())/200; if(l>0) {

if(l>l1) l=l1; } else

if(-l>l1) l=-l; *axis_pic_a(axis)=l; asm sti

set_axis_jog(axis,0); set_axis_home(axis,0); }

3.6.7 取指定轴当前位置

long get_axis_pos(int axis); //所指定的轴号:0-15 本函数可以用C语言表达如下:

long get_axis_pos(int axis) {

long l;

asm cli

l=*axis_pout(axis)+(*axis_pic_a(axis)); asm sti return l; }

3.6.8 指定轴当是否停止

int get_axis_den(int axis); //所指定的轴号:0-15。 返回1:已停,0:没有停

本函数可以用C语言表达如下:

int get_axis_den(int axis) {

return (*axis_pic_a(axis)!=0||*axis_pvcmd(axis)!=0)? 0:1; }

3.6.9 设置轴手摇移动

void handwheel( int h_no, //手摇号 int axis, //轴号 int step_mul); //步进倍率 3.6.10 取手摇状态对应的位移量

int get_handwheel(int handwheel);

//手摇号

27

华中数控PLC编程说明书

3.6.11 设置MST指令的响应函数

void set_mst_func( int ch, //通道 char name, //代码类型:M、S、T void (*mst_func)(int)); //响应函数入口地址

第四章 编写PLC程序的常用技巧与示例

本章将通过两个常用的PLC编程技巧与示例来加快您掌握如何用C语言编写华中数控PLC程序的进度与质量。首先,我们复习一下C语言中有关操作运算符的知识。

4.1 常用运算操作符

对于基本的&(与)、~(非)、|(或)、^(异或)、/ (求整除之商)、%(求整除之余)操作符,这里就不赘述。如果您学习过C语言,可以跳过本小节。 4.1.1 置1操作符 |= 和 置0操作符 &= ~

一般地,在PLC中,X0.1表示的是X寄存器第0组的第一位,Y2.7表示的是Y寄存器第二组的第七位。数字以0x开头的是十六进制表示法,在这里用十六进制是为了更清楚地判断位的序数。

低位: 0x01 表示第0位

0x02 0x04 0x08

高位: 0x10

0x20 0x40 0x80

表示第1位 表示第2位 表示第3位 表示第4位 表示第5位 表示第6位 表示第7位

由此可见:

Y[2] | = 0x80; 是将Y2寄存器第七位的值置1 Y[2] &= ~0x80; 是将Y2寄存器第七位的值置0

因此完全可以把“|=”当作置1操作符,而把“&= ~”当作置0操作符。

28