编程turn
我说的是这个题解题思路,代码自己实现
初始车位置(0,0),四个朝向{{1,0},{0,-1},{-1,0},{0,1}};初始方向0,也就是朝向第一个下标
读取所有输入后从第一组输入开始,车(x,y) += 朝向[方向]*时间*速度,实现车移动
判断指令,1:方向+1,2:方向-1,3:结束;(这里注意方向只能是0,1,2,3超出后修正)
输出车坐标
㈡ 数控车床指令turntransfer是指什么
程序段跳转(就是中间有部分程序不需要执行,直接跳过去)
㈢ 求助:简单c++编程
//在主程序中创造需要分析的数据数组
//再用自程序完成数据的排序、和、平均值计算
//然后再用自程序完成程序的分析(包括找出出现最频繁的数均以及出现的次数)
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
void turn(int[],int);
void totle_average(int[],int);
void analyse(int[],int[],int);
int counter=0;
void main()
{
//本程序可以以程序中的给定的数据为计算数值,也可以以随机生成的数据为计算的数值
const int size=200;
int i;
int a[1000];
int freqence[100]={0};
/*a[size]=
{7,8,1,5,7,6,5,7,5,8,
7,8,2,5,4,6,5,6,7,9,
8,5,5,7,3,9,7,8,9,9,
8,6,5,4,7,1,8,7,4,5,
9,8,7,9,5,6,9,3,8,4,
8,8,7,2,5,9,5,4,7,8,
4,8,3,5,7,9,5,7,8,4,
8,8,1,7,5,4,8,6,7,8,
8,5,2,7,8,9,8,4,5,7,
8,8,3,5,7,6,9,5,4,9};*/
//产生随机数100个。
for(i=0;i<size;i++)
{
a[i]=(1+rand()%10);
}
cout<<"\n原数据是(未经处理的):"<<endl;
for(i=1;i<size;i++)
{
if(i%10==0)
cout<<endl;
cout<<" "<<a[i-1]<<setw(2);
}
cout<<"\n\n经过分析处理的数据是:"<<endl;
cout<<"安从大到小的顺序输出这"<<size<<"个数据,并且其平均值以及其和是:"<<endl;
turn(a,size);
totle_average(a,size);
//数据分析:出现最平凡的数字以及其出现的次数
cout<<"\n出现最平凡的数字以及其出现的次数是:"<<endl;
analyse(a,freqence,size);
}
void turn(int b[],int size)
{
int i,model;
model=0;
for(int pass=0;pass<size-1;pass++)
for(i=0;i<size-1;i++) //排序
if(b[i]>b[i+1])
{
model=b[i];
b[i]=b[i+1];
b[i+1]=model;
}
cout<<"\nDate in turn is :\n"<<endl;
for(i=1;i<=size;i++)
{
//if(i%10==0)
// cout<<endl;
if(b[i-1]==b[i]) ///一定要注意如果这里是b[i]“=”b[i+1]
///否则运算结果就不会正确!
{
cout<<" "<<b[i]<<setw(2);
}
else
cout<<endl;
}
//计算随机出现的数中总共有几种数,用counter作为统计。
for(i=1;i<=size;i++)
if(b[i-1]!=b[i])
{
counter+=1;
}
cout<<"\n共出现过 "<<counter<<" 个数。"<<endl;
}
void totle_average(int b[],int size)
{
cout<<"\n总数以及平均值分别是:"<<endl;
int i,totle;
double average;
totle=0;
average=0;
for(i=0;i<size;i++) /////计算总数
{
totle+=b[i];
}
average=totle/100; ////计算平均值
cout<<"\n这一百个数的总数是:"<<totle<<"\n平均值是:"<<average<<endl;
}
void analyse(int b[],int freq[],int size) ///数据分析自程序
{
int bigest=0,i,value=0;
cout<<"\n ======================================\n \t\tmodle\n ======================================"<<endl;
for(i=0;i<counter;i++) ////初始化
freq[i]=0;
for(int j=0;j<size;j++)
++freq[b[j]]; //数据的统计,如果是2那么就freq自加,如果是3那么就freq[3]自加
for (i=0;i<counter;i++)
{
cout<<"\n ----------------------------\n \t\tmodle\n ----------------------------"<<endl;
cout<<freq[i];
}
cout<<setw(5)<<"Response"<<setw(12)<<"freqence"<<setw(12)<<"Histogram\n"<<endl;
for(i=1;i<counter+1;i++)
{
cout<<setw(5)<<i<<setw(12)<<freq[i]<<" ";
if(freq[i]>bigest)
{
bigest=freq[i];
value=i;
}
for(int h=1;h<=freq[i];h++)
cout<<" *";
cout<<endl;
}
cout<<"\n出现频率最高的数是: "<<value<<"\n出现了"<<bigest<<"次\n\n"<<endl;
}
前边的输入输出我相信你都能搞得定,这部分是后面的关键部分,包括统计等,这个程序使用的是0~100的随机数,靠你的智商来完成你需要的工作喽。
㈣ 西门子数控车床怎么编程
西门子数控系统编程:
1.用半径和终点进行圆弧编程
圆弧运动通过以下几点来描述:
• 圆弧半径 CR= 和
• 在直角坐标 X,Y,Z中的终点
除了圆弧半径,您还必须用符号+/-表示运行角度是否应该大于或者小于180°。正符可以不注明。
识别符表示:
CR=+…:角度小于或者等于 180°
CR=–…:角度大于 180°
举例:
N10 G0X67.5 Y80.211
N20 G3X17.203 Y38.029 CR=34.913 F500
在这种处理方式下您不一定要给出中点。整圆(运行角度 360°)不能用CR=来编程,而是通过圆弧终点和插补参数来编程。
2.用圆弧角和圆心或者终点进行圆弧编程
圆弧运动通过以下几点来描述:
• 圆弧角 AR= 和
• 在直角坐标 X,Y,Z中的终点或者
• 地址 I,J,K上的圆弧中点
分别表示:
AR=:圆弧角,取值范围 0° 至 360°
I,J,K的意义参见前面几页。
整圆(运行角度 360°)不能用 AR=来编程,而是通过圆弧终点和插补参数来编程。
举例:
N10 G0X67.5 Y80.211
N20 G3X17.203 Y38.029 AR=140.134 F500
或者
N20 G3I–17.5 J–30.211 AR=140.134 F500
3.用极坐标进行圆弧编程
圆弧运动通过以下几点来描述:
• 极角 AP=
• 和极半径 RP=
在这种情况下,适用以下规定:
极点在圆心。
极半径和圆弧半径相符。
举例:
N10 G0X67.5 Y80.211
N20 G111X50 Y50
N30 G3RP=34.913 AP=200.052 F500
编程举例
以下程序是圆弧编程举例。必需的尺寸在右边的加工图纸中。
N10 G0 G91 X133 Y44.48 S800 M3 回到起始点
N20 G17 G1 Z-5 F1000 刀具横向进给
N30 G2X115 Y113.3 I-43 J25.52 用增量尺寸表示的圆弧终点,圆心
或者
N30 G2X115 Y113.3 I=AC(90) J=AC(70) 用绝对尺寸表示的圆弧终点,圆心
或者
N30 G2X115 Y113.3 CR=-50 圆弧终点,圆弧半径
或者
N30 G2AR=269.31 I-43 J25.52 用增量尺寸表示的圆弧角,中心点
或者
N30 G2AR=269.31 X115 Y113.3 圆弧角,圆弧终点
N40 M30 程序结束
5、螺旋线插补G2/G3TURN
编程:
G2/G3 X… Y… Z… I… J… K… TURN=
G2/G3 X… Y… Z… I… J… K… TURN=
G2/G3 AR=… I… J… K… TURN=
G2/G3 AR=… X… Y… Z… TURN=
G2/G3 AP… RP=… TURN=
指令和参数说明
G2 沿圆弧轨迹顺时针方向运行
G3 沿圆弧轨迹逆时针方向运行
X Y Z 直角坐标的终点
I J K 直角坐标的圆心
AR 圆弧角
TURN= 附加圆弧运行次数的范围从 0至 999
AP= 极角
RP= 极半径
功能
螺旋线插补可以用来加工如螺纹或油槽 (延迟线插补)。
操作顺序
在螺旋线插补时,两个运动是叠加的并且并列执行。
• 水平圆弧运动
• 垂直直线运动
圆弧运动在工作平面确定的轴上进行。
举例:工作平面 G17,针对圆弧插补的轴 X和 Y。
然后在垂直的横向进给轴上进行横向进给运动,这里是 Z轴。
运动顺序
1. 回到起始点
2. 执行用TURN= 编程的整圆
3. 回到圆弧终点,例如:作为部分旋转
4. 执行第2,3步穿过进刀深度
加工螺旋线所需的螺距 = 整圆数 + 编程的终点 -穿过的进刀深度。
编程举例
螺旋线插补
N10 G17 G0 X27.5 Y32.99 Z3 回到起始位置
N20 G1 Z-5 F50 刀具横向进给
N30 G3X20 Y5 Z-20 I=AC(20) J=AC (20) TURN=2 带以下参数的螺旋线:从起始位置执行两个整圆,然后回到终点
N40 M30 程序结束
㈤ 单片机c语言编程错误求解决,怎么改 float AD_turn(uchar i) *** 要改成没有错误的答案
#include"reg51.h"
#include"absacc.h"
#include"intrins.h"
#include"math.h"
#include"string.h"
#defineuintunsignedint
#defineucharunsignedchar
#definemenxian3.2
#definemenxian24.5
ucharZKB1=0;
ucharclick;
ucharcontrolflag=0;
uchark;
ucharn=5;
ucharshe=0;
ucharflagAD=0;
ucharflagSY=0;
uintcount=0;
uintNum;
sbitTlc549_Clk=P1^0;
sbitTlc549_Data=P1^1;
sbitTlc549_Cs=P1^2;
sbitLED=P2^0;
sbitkz=P3^2;
sbitpwm=P2^1;
ucharTlc549(void)//AD549采集电压
{
uchari;
uintTT=0;
Tlc549_Cs=0;
for(i=0;i<8;i++)//这儿多个{
{
Tlc549_Clk=1;
TT=TT<<1;
if(Tlc549_Data==1)
TT=TT+1;
Tlc549_Clk=0;
}
Tlc549_Cs=1;
Num=TT;
returnNum;
}
floatAD_turn(uchari)
{
floatff;
ff=5.0/255*i;
returnff;
}
//这儿多个}
voidTimer_init(void)
{
TMOD=0x01;
TH0=0xFF;
TL0=0x06;//赋初值
EA=1;
ET0=1;
EX0=1;
IT0=1;
LED=0;
}
voidmain()
{
floatbian;
Timer_init();
while(1)
{
k=Tlc549();//读取AD采集的光照传感器的数值
bian=AD_turn(k);//读取AD采集的光照传感器的数值转换成电压
if(bian>menxian)//电压值高于门限
{
flagAD=1;//光照低于一定的值,黑天
}
else
{
flagAD=0;//白天
}
if(flagAD&&flagSY)//黑天且有声音
{
TH0=0xFF;
TL0=0x06;
TR0=1;
LED=1;//打开LED灯
count=0;
flagSY=0;
EX0=0;
controlflag=1;
}
if(bian>menxian2)//pwm////////////////////////////////
{
ZKB1=50;
}
else
{
ZKB1=140-bian*20;//255档归为100级,及占空比100%可调
}
}
}
voidTimer_inter(void)interrupt1
{
count++;
if(controlflag==1)
{
if(count>60000)
{
count=0;
LED=0;
EX0=1;
controlflag=0;
}
}
TH0=0xFF;
TL0=0x06;//定时250us
TR0=1;
++click;
if(click>100)click=0;//靠这个定时计数来实现PWM控制周期
if(click<ZKB1)/*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/
{
pwm=0;
}
else
{
pwm=1;
}
}////////////////////////////////////////////////////////////////////////
voidExtra_inter(void)interrupt0
{
if(kz==1)
{
flagSY=1;
}
else
{
flagSY=0;
}
}
㈥ 西门子turn的用法
西门子PLC中SM是特殊标志继电器。
特殊标志继电器用“SM”表示,特殊标志继电器区根据功能和性质不同具有位、字节、字和双字操作方式。其中SMB0、SMB1为系统状态字,只能读取其中的状态数据,不能改写,可以位寻址。系统状态字中部分常用的标志位说明如下:
SM0.0:始终接通;
SM0.1:首次扫描为1,以后为0,常用来对程序进行初始化;
SM0.2:当机器执行数学运算的结果为负时,该位被置1;
SM0.3:开机后进入RUN方式,该位被置1一个扫描周期;
SM0.4:该位提供一个周期为1分钟的时钟脉冲,30秒为1,30秒为0;
SM0.5:该位提供一个周期为1秒钟的时钟脉冲,0.5秒为1,0.5秒为0;
SM0.6:该位为扫描时钟脉冲,本次扫描为1,下次扫描为0;
㈦ 西门子数控编程指令代码含义
1、准备功能(G指令)
2、 GOO快速定位(模态指令)
3、 G01直线插补(模态指令)
4、G02/G03圆弧插补(模态指令)
5、G02/G03 TURN螺旋线插补
6、G04暂停时间(非模态指令)
7、G17、G18、G19平面选择(模态指令)
8、G40、G41、G42刀具半径补偿功能(模态指令)
9、 G33恒螺距螺纹切削(模态指令)
10、G53、G153、SUPA(非模态)、(3-500(模态指令)
11、G54、G65、G56、G57工件坐标系(模态指令)
12、G09(非模态指令)、G60(模态指令)准确停止
13、 G63攻螺纹方式(非模态指令)
14、G64/G641连续切削加工方式(模态指令)
15、 G70/G7l/G700/G7lO公制/英制编程单位选择(模态指令)
16、G74自动返回到参考点(非模态指令)
㈧ 编程,大小写转换
import java.util.Scanner;
/**
* 大小写转换
*
*/
public class Turn {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入字符串,回车结束!");
String scanStr = scanner.nextLine();
System.out.println("您输入的字符串为:"+scanStr);
System.out.println("字符串转换中……");
System.out.print("转换后的字符为:");
turn(scanStr);//转换函数
}
/**
* 转换函数
* @param scanStr
*/
private static void turn(String scanStr) {
for (int i = 0; i < scanStr.length(); i++) {
if((scanStr.charAt(i)+"").matches("[a-z]")){
lowerTOupper(scanStr.charAt(i));//如果是小写,则执行小写转大写函数
}else if((scanStr.charAt(i)+"").matches("[A-Z]")){
upperTOlower(scanStr.charAt(i));//如果是小写,则执行小写转大写函数
}else{
System.out.print(scanStr.charAt(i));//直接打印当前字符
}
}
}
/**
* 大写转小写
* @param charAt
*/
private static void upperTOlower(char charAt) {
System.out.print((char)(charAt+32));
}
/**
* 小写转大写
* @param charAt
*/
private static void lowerTOupper(char charAt) {
System.out.print((char)(charAt-32));
}
}
这是所有的代码 用java写的,已经测试过了
㈨ 西门子840D系统TURN挑螺纹程序怎么编程转速进给怎么求值
《西门子840d数控编程实例加强版》工厂实际加工案例,来自一线的经典教材学数控必备,每个加工步骤都配有详细的解释,自学编程的好材料,例题后面都配有课后习题,依据实际加工为基础作者精心雕琢,循序渐进