lj71c24通讯程序

圆弧插补是数控系统的重要功能之一,它可以实现平滑的曲线运动。在 PLC 编程中,可以通过使用圆弧插补指令来实现圆弧运动。本文将介绍 PLC 圆弧插补程序的编写方法,并提供一个 PLC 圆弧插补指令编程实例。

圆弧插补指令

圆弧插补指令通常采用以下格式:

ARC L A R D F
其中:ARC 为指令关键字,表示圆弧插补。L 为起点的标签。A 为圆心的标签。R 为圆弧半径。D 为圆弧方向,0/1 分别表示顺时针/逆时针。F 为进给速度。

圆弧插补程序编写方法

要编写 PLC 圆弧插补程序,需要按照以下步骤进行:

1. 确定圆弧的起点和终点。2. 确定圆心的坐标。3. 计算圆弧半径。4. 确定圆弧方向。5. 编写圆弧插补指令。6. 设定进给速度。

PLC 圆弧插补指令编程实例

下面是一个 PLC 圆弧插补指令编程实例:

L1: ARC L2 A3 R100 D0 F1000
L2: ...
L3: A10 X100 Y100
该程序将从标签 L1 开始,沿着半径为 100 的圆弧运动,顺时针方向,进给速度为 1000,移动到标签 L2。圆弧的圆心位于标签 L3,坐标为 X100、Y100。

总结

PLC 圆弧插补程序可以通过使用圆弧插补指令来实现圆弧运动。通过编写圆弧插补指令,PLC 可以控制运动轴沿着平滑的曲线轨迹运动,提高加工精度和效率。


#include <reg52.h>//调用单片机头文件#define uchar unsigned char//无符号字符型 宏定义变量范围0~255#define uintunsigned int//无符号整型 宏定义变量范围0~#include lcd1602.h#include value,i;//变量uchar flag_lj_en;//边加uchar flag_lj_en_value;sbit relay = P2^2;//继电器定义sbit beep= P3^3;//蜂鸣器定义sbit beiguan = P2^3;//背光uint flag_time;uint flag_guan;uchar smg_i;uchar dis_smg[7]={0};uchar password[7]={6,5,4,3,2,1}; //密码保存uchar password_bj[7]={1,2,3,4,5,6};//密码比较uchar code password_r[6] = {1,2,3,1,2,3} ;uchar code password_gl[6] = {5,2,0,0,2,5} ;uchar password_xg[6];//密码修改uchar flag_password;//密码正确否uchar flag_password_cichu1;//密码错误次数bit flag_200ms=1; //200ms标志位uchar key_can;uchar menu_1,menu_i;#include iic.h/***********************1ms延时函数*****************************/void delay_1ms(uint q){uint i,j;for(i=0;i<q;i++)for(j=0;j<120;j++);}void key()//独立按键程序{static uchar key_new = 0, key_l;key_can = 20; //按键值还原P1 = 0x0f;if((P1 & 0x0f) != 0x0f)//按键按下{delay_1ms(1);//按键消抖动if(((P1 & 0x0f) != 0x0f) && (key_new == 1)){//确认是按键按下key_new = 0;key_l = (P1 | 0xf0); //矩阵键盘扫描P1 = key_l;switch(P1){case 0xee:key_can = 1;break;//得到按键值 case 0xde:key_can = 4;break; //得到按键值 case 0xbe:key_can = 7;break; //得到按键值 case 0x7e:key_can = 10;break; //得到按键值 case 0xed:key_can = 0;break;//得到按键值 case 0xdd:key_can = 8;break; //得到按键值 case 0xbd:key_can = 5;break; //得到按键值 case 0x7d:key_can = 2;break; //得到按键值 case 0xeb:key_can = 3;break;//得到按键值 case 0xdb:key_can = 6;break; //得到按键值 case 0xbb:key_can = 9;break; //得到按键值 case 0x7b:key_can = 11;break; //得到按键值 case 0xe7:key_can = 15;break;//得到按键值 case 0xd7:key_can = 14;break;//得到按键值 case 0xb7:key_can = 13;break; //得到按键值 case 0x77:key_can = 12;break;//得到按键值}}}else {key_new = 1;flag_lj_en = 0;}}/*****************密码还原********************/void password_return(){if(flag_lj_en == 1){flag_lj_en_value ++;if(flag_lj_en_value > 13)//按下3秒钟就自动密码还原{flag_lj_en_value = 0;flag_lj_en = 0;write_24c02_8(6,0,password_r);beep = 0;delay_1ms(500);beep = 1; read_24c02_8(6,0,password);}}}/***************把数组清空**********************/void clear_shuzu(uchar *p){for(i=0;i<7;i++)p[i] = 0;}/*************定时器0初始化程序***************/void time_init() {EA = 1; //开总中断TMOD = 0X01; //定时器0、工作方式1ET0= 1;//开定时器0中断 TR0= 1;//允许定时器0定时}/******************下载程序密码初始化**********************/void password_chushifa(){scl = 0;value = read_24c02(10) ;if(value != 75){value = 75;beep = 0;write_24c02(10,value);delay_1ms(200);write_24c02_8(6,0,password_r);delay_1ms(200);read_24c02_8(6,0,password);beep = 1; }}/****************按键功能处理********************/void key_with(){static uchar value;if(key_can == 14) //手动关闭密码锁relay = 1;if(key_can == 10)//用做密码从新回到初始值 {flag_lj_en = 1; //连加使能flag_lj_en_value = 0;}if(menu_1 == 0){if(key_can <= 9)if(menu_i < 6) //密码输入{menu_i ++;if(menu_i > 6)menu_i = 6;smg_i = menu_i;for(i=6;i>0;i--)password_bj[i] = password_bj[i-1];password_bj[0] = key_can;for(i=0;i<smg_i;i++)dis_smg[i] =*;//0x30 + password_bj[i];write_string(2,7,dis_smg);lcd1602_guanbiao(1,7 + menu_i + 0x40);//开光标}if(key_can == 11)//密码删除{for(i=0;i<menu_i;i++)password_bj[i] = password_bj[i+1]; menu_i --;password_bj[menu_i] = ;dis_smg[menu_i] = ;write_string(2,7,dis_smg);lcd1602_guanbiao(1,7 + menu_i + 0x40);//开光标}if(key_can == 15)//确认键{value = 0;for(i=0;i<6;i++){if(password_bj[i] == password_gl[i]) //判断管理员密码{value ++;if(value >= 6)//密码正确{write_string(2,0,return);beep = 0;delay_1ms(200);read_24c02_8(6,0,password);beep = 1; delay_1ms(2000);}}}if(value < 6)for(i=0;i<6;i++){if(password_bj[i] == password[i]){flag_password = 1;//密码正确relay = 0; //打开密码锁for(i=0;i<6;i++)dis_smg[i] = 0xbf;}else {flag_password = 0;flag_password_cichu1 ++;write_string(1,0, Password error );write_string(2,0, cishu: );write_sfm2(2,9,flag_password_cichu1);delay_1ms(280);for(i=0;i<6;i++){beep = ~beep;delay_1ms(200);}beep = 1;delay_1ms(800);break; //密码不正确}}clear_shuzu(dis_smg); write_string(1,0, Password Lock);write_string(2,0, Input: );lcd1602_guanbiao(1,7+0x40);//开光标menu_i = 0;}}}/****************修改密码********************/void xiugai_password(){if(key_can == 13) //修改密码{if((relay == 0) && (menu_1 == 0)){menu_1 = 1;menu_i = 0;clear_shuzu(password_bj); //数据清空clear_shuzu(dis_smg); write_string(1,0,Input1:);write_string(2,0,Input2:);lcd1602_guanbiao(1,7);//开光标}}if(menu_1 == 1) //第一次输入修改的密码{if(key_can <= 9){if(menu_i < 6){menu_i ++;if(menu_i > 6)menu_i = 6;smg_i = menu_i;for(i=7;i>0;i--)password_bj[i] = password_bj[i-1];password_bj[0] = key_can;for(i=0;i<menu_i;i++)dis_smg[i] =*;write_string(1,7,dis_smg);lcd1602_guanbiao(1,7 + menu_i);//开光标}}if(key_can == 11)//删除键{for(i=0;i<menu_i;i++)password_bj[i] = password_bj[i+1];menu_i --;password_bj[menu_i] = ;dis_smg[menu_i] = ;write_string(1,7,dis_smg);lcd1602_guanbiao(1,7 + menu_i);//开光标}if(key_can == 15)//确定键{clear_shuzu(password_xg); clear_shuzu(dis_smg); lcd1602_guanbiao(1,8 + 0x40);//开光标menu_1 = 2; menu_i = 0;key_can = 20;}}if(menu_1 == 2) //第二次输入修改的密码{if(key_can <= 9){if(menu_i < 6){menu_i ++;if(menu_i > 6)menu_i = 6;for(i=5;i>0;i--)password_xg[i] = password_xg[i-1];password_xg[0] = key_can;for(i=0;i<menu_i;i++)dis_smg[i] =*;//0x30 + password_xg[i];write_string(2,7,dis_smg);lcd1602_guanbiao(1,7 + menu_i + 0x40);//开光标}}if(key_can == 11)//删除键{for(i=0;i<menu_i;i++)password_xg[i] = password_xg[i+1];password_xg[menu_i] = ;dis_smg[menu_i] = ;write_string(2,7,dis_smg);lcd1602_guanbiao(1,7 + menu_i + 0x40);//开光标}if(key_can == 15)//确定键{for(i=0;i<6;i++){if(password_bj[i] == password_xg[i]){flag_password = 1;//两次输入的密码一样}else {flag_password = 0;write_string(1,0, Password Error );write_string(2,0, reenter);delay_1ms(300);for(i=0;i<6;i++){beep = ~beep;//提示三声delay_1ms(300);}beep = 1;delay_1ms(1000);break; //密码不正确}}if(flag_password == 1) //两次输入的密码一样的{for(i=0;i<6;i++){write_string(1,0,Password);write_string(2,0,Succeed );password[i] = password_bj[i]; //保存密码}write_24c02_8(6,0,password);delay_1ms(300);beep = 0;delay_1ms(2000);beep = 1;}clear_shuzu(password_xg); clear_shuzu(dis_smg); write_string(1,0, Password Lock);write_string(2,0, Input: );lcd1602_guanbiao(1,7+0x40);//开光标menu_1 = 0; menu_i = 0;}}}/******************主程序**********************/void main(){static uint value ;password_chushifa();time_init(); //定时器初始化read_24c02_8(6,0,password);init_1602(); beiguan = 0;while(1){if(flag_password_cichu1 < 3) //错误三次按键不能用了{key();//按键函数if(key_can < 20){if(beiguan == 0){if(menu_1 == 0)key_with();//按键处理函数xiugai_password(); //修改密码}else beiguan = 0;flag_time = 0;}}if(flag_200ms == 1){flag_200ms = 0;if(beiguan == 0)//延时关闭锁20秒关闭背光{flag_time ++;//write_sfm2(2,10,flag_time);if(flag_time >= 5 * 30)//30秒{flag_time = 0;beiguan = 1;//关闭背光}}if(relay == 0)//延时关闭锁{flag_guan++;if(flag_guan >= 5 * 10)//10秒{flag_guan = 0; relay = 1; //关闭密码锁}}else flag_guan = 0;if(flag_password_cichu1 >= 3){value ++;//200msbeep = ~beep;//蜂鸣器报警if(value >= 5 * 60)//1分钟{value = 0;beep = 1;flag_password_cichu1 = 0;}}password_return(); //密码还原}delay_1ms(1);}}/*************定时器0中断服务程序***************/void time0_int() interrupt 1{static uchar value;TH0 = 0x3c;TL0 = 0xb0; // 50ms12Mvalue ++;if(value % 4 == 0){flag_200ms = 1;}}#ifndef _IIC_H_#define _IIC_H_sbit scl = P2^1;sbit sda = P2^0;/***************启始信号 ***************************/void start(){sda = 1;scl = 1;sda = 0;scl = 0;}/****************结束信号 **************************/void stop(){sda = 0;scl = 1;sda = 1;scl = 0; }/*****************检测应答*************************/void ack(){uchar i;sda = 1; scl = 1;while((i < 100) & (sda == 1))i++;scl =0;}void ack_zhuji(){sda = 0;scl = 1;scl = 0;sda = 1;}/*****************非应答*************************/void no_ack(){sda = 1;scl = 1;scl = 0;}/*****************写一个字节*************************/void write_iic(uchar dat){uchar i;for(i=0;i<8;i++){scl = 0;dat <<= 1 ;sda = CY;scl = 1;}scl = 0;}/*******************读一个字节***********************/uchar read_iic(){uchar i,value;for(i=0;i<8;i++){scl = 1;value <<= 1;if(sda == 1)value |= 0x01;scl = 0;}return value;}/*****************向24C02写一个字节进去*************************/void write_24c02(uchar add,uchar dat){start();write_iic(0xa0);ack();write_iic(add);ack();write_iic(dat);no_ack();stop();}/******************从24C02读一个字节进去************************/uchar read_24c02(uchar add){uchar value;start();write_iic(0xa0);ack();write_iic(add);ack();start();write_iic(0xa1);ack();value = read_iic();no_ack();stop();return value;}void write_24c02_8(uchar n,uchar add,uchar *p){uchar i;EA = 0;start();write_iic(0xa0);ack();write_iic(add);for(i=0;i<n;i++){ack(); write_iic(*p);p++;}no_ack(); stop();EA = 1;}void read_24c02_8(uchar n,uchar add,uchar *p){uchar i;EA = 0;start();write_iic(0xa0);ack();write_iic(add);ack();start();write_iic(0xa1);ack();for(i=0;i<n;i++){p[i] = read_iic();if(i == n-1){ack();stop();}elseack_zhuji();}EA = 1;}#endif显示器程序贴不下了

本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论