第一篇:教你如何写参数化程序
教你如何写参数化程序
由于我对siemens840D比较熟悉,所以以下说讲的一切都是在siemnes840D系统上测试过的,是经过实践检验的编制,可靠性应该是很好的。
先让我来给大家介绍一下参数化的几种形式:
1)用DEF命令,在MPF或者SPF程序中制定变量,以达到调用的目的;
2)通过siemens自带的1000个R参数进行参数的编制;
3)直接调用siemens系统变量,进行参数化程序编制。
大概也就这几种常见的形式了。我一个个给初学者进行讲解:
1)用DEF命令,在MPF或者SPF程序中制定变量,以达到调用的目的。
这是一种很灵活的参数化编制形式。
请看一下例子:
==========
MPF:
DEFINE Z_MAX AS G0 G90 G40 G17 SUPA Z850 D0 SPOS=0
DEF REAL DiaMAX=50,DiaMIN=45.8,CAO_KUAN=5
EXTERN XICAO_1(REAL,REAL,REAL)
$P_UIFR[1]=CTRANS(X,Y,Z,B,);G54 B=?
;$P_UIFR[2]=CTRANS(X,Y,Z,B,);G55 B=??
;$P_UIFR[3]=CTRANS(X,Y,Z,B,);G56 B=???
...N320 CS_TOOL(“",1);XI CAO B#
CS_TP(”“,1)
G56 G90 G17 G40
MIRROR X0
R90=85.3 R91=WIDTH-110.3 R92=31.3
XICAO_1(DiaMAX,DiaMIN,CAO_KUAN);也可以写成XICAO_1
R90=235.3
XICAO_1
MIRROR
Z_MAX
...SPF:
%_N_XICAO_1_SPF
;$PATH=/_N_SPF_DIR
PROC XICAO_1(REAL DiaMAX,REAL DiaMIN,REAL CAO_KUAN)SAVE
;R90 is X Coordinate
;R91 is Y Coordinate
;R92 is Z Coordinate
;R93 is S Value
;R94 is OutSide F Value
;R95 is InSide F Value
;DEF REAL DiaMAX,DiaMIN,CAO_KUAN
;MUST SET D1,D2,D3
S=R93 M03
G01 X=R90 Y=R91 F=R94
M08
R40=DiaMAX R41=DiaMIN R60=2 R61=1
R0=0 R1=R92 R3=(R92-CAO_KUAN)R5=20 R6=5 R72=50
F=R95
L8000
M05
M09
STOPRE
M17
============
以上是一个我编制的挖槽程序截取。
在MPF中,在程序最开头进行了三个参数点定制:DiaMAX=50,DiaMIN=45.8,CAO_KUAN=5
并用EXTERN命令进行SPF程序XICAO_1的声明,一般情况如果词程序位于siemnes的标准循环文件夹里面,或者是MPF相同的目录下是没有必要进行EXTERN的,这是一种习惯,我习惯把SPF文件放在SUBPROGRAM文件夹里面,便于管理,所以每次在调用XICAO_1这个程序的时候必须进行程序的声明,这很重要,否则,如果你不能调用SPF文件就不要怪我了,当然,也有其他方式进行参数传递的SPF调用的,比如:PCALL等等命令,这里我就不多说了。
DEF命令是定义你需要的参数,REAL是说明参数点类型是实数型的,如果是整数型的,就是INT,这个和VB语言很相似,如果有VB程序语言基础的朋友应该很容易理解,只不过VB里面是用DIM进行变量的定义的罢了。你也可以定义STRING[50]这种字串型,还有布尔型的,我就不多说。
在MPF程序的后面将会引用这三个参数,并将这三个参数传递到SPF中去。
请大家注意SPF的编制格式,是:
PROC XICAO_1(REAL DiaMAX,REAL DiaMIN,REAL CAO_KUAN)SAVE
括号里面的参数顺序直接控制了你传递参数时填写的数字传递顺序。
比如:XICAO_1(50,48.5,5)就是按照PROC后面的那个括号里面的顺序进行传递的。
这也就是siemens的CYCLE标准循环里面的格式一样的,如果你使用过siemens的CYCLE循环,那么在定义参数的时候,你的定义顺序必须按照说明书上的顺序来,否则,参数将会传递错误的信息,后果自负„„ SAVE可以要,也可以不要,没有关系的。SAVE的作用是在执行完SPF以后,回到MPF时,将保留原MPF中的制定格式,怎么理解呢?简单的距离就是:当你的SPF中时G91编程的,而MPF中是G90编程的,那么加上SVAE以后,在M17执行完后,回到MPF以后,保留G90的形式进行下面的工作,否则就是按照SPF中的G91进行执行,也许就会出错。
用个在siemens的CYCLE里面在SAVE后面添加了一个DISPLOF参数的,用这个参数可以“拟制”SPF中的每一段程序的显示,当然也可以用SBLOF来单块拟制。
不过,通常没有必要拟制程序的显示,因为不便于程序的检查,什么叫拟制呢?简单的说就是在运行SPF时,加上DISPLOF后,以下的程序段,一直到M17结束,在AUTO界面教你嘎时,你无法看见这些程序段的执行过程。
编制格式为:
PROC XICAO_1(REAL DiaMAX,REAL DiaMIN,REAL CAO_KUAN)SAVE DISPLOF
大概这种形式的参数化程序就是这样子的了。当然,这方面还有其他的一些编制参数,不过一般的朋友没有必要要,我讲的应该可以满足一般的要求了。
值得一提的是MACROS的编制。
格式为:DEFINE...AS........在我的前面程序例子前面已经提到了,就是:DEFINE Z_MAX AS G0 G90 G40 G17 SUPA Z850 D0 SPOS=0 在MPF以前定义这个以后,在整个MPF中的任何位置都可以调用这个“宏”,DEFINE Z_MAX AS G0 G90 G40 G17 SUPA Z850 D0 SPOS=0的作用就是用G0,取消所有坐标(采用机床原点坐标),取笑刀具几何补偿,C轴转到O°以后,回到Z=850的位置。
这个很简单,你也可以进行“全局MARCO”的编制,有点象VB程序语言中的“定义全局变量”的功效,往UMAC文件中添加就行了。不熟悉的朋友就不用管这个了。
2)通过siemens自带的1000个R参数进行参数的编制;
请参考前面的程序例子,值得提示的是,请确定是否你的设备供应商已经占用了一些R参数,如果有设备制造商占用了一些R参数,最好不要使用
这些R参数,选取其他R参数就可以了。
其实,R参数的用法和用DEF定义的变量用法是一样的,重要的区别是R参数不用定义,可以直接在程序中任何位置进行调用就可以了。而且不受SPF,MPF的控制,任何程序都可以直接调用。
不过,最好在使用R参数的时候,进行一些约定俗成,以便以后不会因为人员的变动造成参数含义的错乱,那时候就非常麻烦了!!
其他关于R参数的就没有讲的。
3)直接调用siemens系统变量,进行参数化程序编制。
最简单的引用就是前面治理中的$P_UIFR[1]=CTRANS(X,Y,Z,B,);G54 B=?
其中$P_UIFR[1]就是系统的变量中的“框架数据”,这和在“参数”里面的“坐标设置”是一样的功效,只是“坐标设置”中不能设定B罢了„„
这种格式也是可以直接进行坐标的变换的,比如:
$P_UIFR[1]=CTRANS(X,Y,Z,B,):CROT(Z,180)
具体情况就不多说了„„
接下来说说系统变量中常见的一些变量。
$P_Txxx,这个变量的作用是激活主轴上的刀具数据;
$P_TOOL,是激活刀边补偿,D1,D2,D3,D4...;
$P_TOOLL[1],激活整个刀具的几何补偿,通常是指的刀具的悬长,G17-Z,G18-Y,G19-X;
$P_TOOLL[2],激活整个刀具的几何补偿,通常是指的刀具的悬长,G17-Y,G18-X,G19-Z;
$P_TOOLL[3],激活整个刀具的几何补偿,通常是指的刀具的悬长,G17-X,G18-Z,G19-Y;
$P_TOOLNO,激活siemens内部的刀号,T1,T2,T3,T32000;
$_P_TOOLR,激活刀具半径补偿;
$P_SEARCH,搜索变量,值为TRUE=1或者0;
以上参数仅做参考,也许会因为设备制造商的不同有所小区别。
以上这些参数都是可以在程序编制中直接编制的。
大概参数化编程就讲完,还有很多东西没有来得及讲,希望感兴趣一起研究之„„
==========
至于还有朋友提高的IF...ELSE...ENDIF的条件语句结构,这好像不是属于参数化编程的一部分吧。严格上来讲应该属于“柔性编程”的一部分更贴近些。
写个程序,给感兴趣的朋友,一个简单程序。你可以直接做成MPF,进行调用,看看结果就晓得是怎么回事情了。
条件:某工厂是中午12:00下班,晚上18:30下班。程序功能,在MDA中运行,显示时间,提示操作者是否到了下班时间。
=====
%_N_SHOWTIME_MDF
;$PATH=/_N_MPF_DIR
DEF INT SHI,FEN
SHI=$A_HOUR
FEN=$A_MINUTE
IF(SHI=11)AND(FEN>=50)
MSG(”TIME IS : “<<2000+$A_YEAR<<”.“<<$A_MONTH<<”.“<<$A_DAY<<”, “<<$A_HOUR<<”:“<<$A_MINUTE<<”:“<<$A_SECOND<<” ,Good noon!Let us have a rest!“)
M0
M2
ELSE
IF(SHI=18)AND(FEN>=20)
MSG(”TIME IS : “<<2000+$A_YEAR<<”.“<<$A_MONTH<<”.“<<$A_DAY<<”, “<<$A_HOUR<<”:“<<$A_MINUTE<<”:“<<$A_SECOND<<” ,Good evening!Let us go home!“)
M0
M2
ELSE
MSG(”TIME IS : “<<2000+$A_YEAR<<”.“<<$A_MONTH<<”.“<<$A_DAY<<”, “<<$A_HOUR<<”:“<<$A_MINUTE<<”:“<<$A_SECOND<<” , Let us go on!")
M0
M2
ENDIF
ENDIF
=====
这就是简单的条件语句的程序,拷贝一下,去试试会出现什么情况呢?呵呵„„
当然siemens840D里面不仅仅是这么一点点,还有LOOP、WHILE,REPEAT,GOTOF,GOTOB这种条件语句,时间关系,不写下去了,感兴趣的朋友,我们可以继续讨论。
第二篇:教你如何认识手机参数的问题(模版)
教你读懂手机各种参数 让你轻松成为手机达人
手机系统买手机时根据自己的预算确定好选择区间之后就可以考虑买什么系统的手机了,不同系统的手机体验完全不同。
目前市面上主流的有3大系统——苹果的IOS、机型众多的安卓还有以流畅著称的微软的Windows Phone。从大多数的手机用户反馈和手机组编辑室编辑推荐,IOS体验最优,具有数量最多质量最优的软件,系统成熟稳定,不过IOS只运行在苹果的设备上。而且价格昂贵,机型单一。安卓系统适配软件也很多,但总的来说软件质量比不上IOS,系统体验也次之。
安卓对手机硬件要求相对要高一些,手机硬件配置低的话操作体验可能不会那么流畅。但安卓系统机型众多,价格和可选空间都很大。Windows Phone系统体验也不错,使用非常流畅,独特的Metro界面也很吸引人,同等价格或配置的情况下体验会优于安卓。虽然应用速度增长很快,基本的应用差不多都有了,但软件的数量和质量,以及系统对硬件的限制。支持Windows Phone的手机也不少,目前WP7手机由于无缘升级WP8,价格很优惠。除了上面3个主流的系统,剩下的例如黑莓、webOS、Meego等系统也有不错的地方,各有其独到的地方,是另外一种体验,但都有一个共同的缺点——应用。
CPU和电脑一样,手机的CPU也承担着处理数据的重任。目前市面上常说的双核四核是指核心数量,但并不是意味着核心越多性能越强,CPU架构、主频对性能影响也很大。目前安卓旗舰机基本上都上了四核,但能耗续航和性能过剩这些问题也一直如影随行。笔者还是认为,性能这东西够用就好,没必要一味追求多少多少核。
GPU简而言之,GPU就是显卡。目前手机界面越来越华丽、游戏越做越大,繁重的图形处理任务越来越需要一颗好的GPU。GPU性能主要表现在多边形生成能力和像素渲染能力上。
RAM是手机的运行内存,RAM越大手机的多任务处理能力就越强,足够的RAM空间能够保证手机即使在同时运行多个程序也能有很流畅的表现。目前安卓旗舰手机主流水平为1GB RAM,2GB RAM目前还比较少。
ROM就相当于电脑的硬盘,是用来储存数据的,如你下载的文件、电影、软件、游戏等等。ROM当然是越大越好,随着现在手机性能越来越强,大型的游戏动辄就是1GB,无损音乐、高清电影,这些都会让你的ROM不堪重负。所以大家选购的时候尽量往大的选吧,而且最好选可以拓展内存卡的,就算是64GB ROM也有不够用的时候……SIM卡iPhone4之后,手机市场上掀起了一股Micro SIM卡热,很多手机都开始采用不可更换电池设计,也开始采用Micro SIM卡。Micro SIM卡,其实就是我们平常说的小卡,普通SIM卡用剪卡器剪一下就ok。如果换了插大卡的手机,只需要在你的Micro SIM卡上套上你原来剪下的部分就行(称之为卡套),卡套市面上也有卖,5块钱?没技术含量的东西,反正很便宜。大家就放心大胆的剪吧,没事。下一代iPhone将采用Nano SIM卡,Nano SIM卡是在Micro SIM卡的基础上再减去一些部分,准备入手新iPhone的朋友可能需要多准备几个卡套了。DLNA/MHL/HDMIMHL转换器MHL比较麻烦一点三者都用于将你手机上的内容高清输出到其它设备上,DLNA是无线,需要WiFi环境,而相比HDMI,MHL不同点在于它共用了Micro UNB接口,可以节省手机空间;另外可以在MHL输出的同时给手机充电,但目前支持MHL的显示器没有HDMI多,而且需要适配器,成本较贵,而且MHL的适配
器还需要另外供电,比较麻烦。Micro/Mini UNBMini UNB是T型接口,Micro UNB是扁口。
近一两年的手机都是Micro UNB接口了。摄像头拍照是很多女同学最看重的功能了,像素是衡量其拍照能力的一个重要因素,但很多同学似乎将其看太重了,像素越高意味着你拍的照片分辨率越高,但并不意味着照片越精细。其它例如光圈、感光元件、对焦方式、成像速度对照片质量和拍照体验都起着很大的作用,大家选的时候要综合考虑。电池容量手机现在屏幕越来越大,主频越来越高,意味着其耗电量越来越高,目前市售中端安卓手机电池容量主流在1800mAh左右。
当然容量也不是唯一标准,系统优化硬件配置都是续航很重要的因素。屏幕屏幕除了分辨率越高越好之外,屏幕的材质、排列方式、附加的技术也很重要。分辨率越高屏幕越精细,目前旗舰手机基本都达到了1280×720的水平;不同材质的屏幕特性也不一样,而屏幕的排列方式,一般来说RGB是要优于Pentile的,RGB的像素点是由红绿蓝三个子像素组成的,而Pentile是两种,一种是红绿,一种是蓝绿。除非Pentile技术的显示屏拥有足够高的分辨率,才可以弥补由于会产生两倍点距纹理带来的视觉效果下降。
港行国行水货欧版美版我们平常说的港行国行中的“行”是指行货的意思,行货能在中国内地市场享受到售后服务及质量保证,水货则不能。港行就是指销往香港的行货,在中国内地是不能保修的(诺基亚除外)。而水货则是指销往其他地区的机器通过某些渠道进入大陆市场,某些手机分欧版美版ATT版T-mobile版也是因为销售区域或运营商不同。水货不是假货,同国行的手机一样,而由于区域性的原因,某些水货手机在功能上可能和行货手机
有差别,如前些年的国行手机都阉割了Wi-Fi功能,而水货手机是保留了的。水货手机由于不用交关税,价格比行货要便宜很多。
第三篇:如何创建和参数化UDT数据类型
如何创建和参数化UDT数据类型中的变量及IN,OUT,IN_OUT参数
从数据类型的意义上说UDT并不被CPU所识别,而是在离线程序中自定义(组合)的数据类型。S7程序的自定义数据类型并不能装载到S7 CPU中。UDT是由递增的编辑器创建并编辑或由源文件的编译而生成。当在块调用中进行变量传递时是不能将UDT作为内存地址区域来传递的。因此推荐将传递的变量指定为字节数据类型并与其数据长度相一致,或者使用UDT的符号名来定义IN,OUT和IN_OUT参数,因为系统将自动生成相应的地址。
下面介绍如何创建和参数化UDT类型变量的过程。我们将以两组各十台的电机为例。UDT1对应这些电机的所有输入变量。
步骤一:在STEP 7项目中插入自定义数据类型。如图鼠标选中“block”文件夹并点击右键,再弹出菜单中选择命令“Insert New Object>Data Type”。
步骤二:在“Properties-Data Type”对话框中输入UDT1的符号名(这里以“Motor”为例)后点击OK确认。
步骤三:打开UDT1并输入相关数据类型的变量及其初始值。下图为UDT1变量声明的例子。
步骤四:然后通过菜单命令“Insert>S7 Block>Data Block”在 STEP 7项目中添加一个数据块 DB1,并在“Properties-Data”属性对话框中为其定义符号名(例如此例为“Halle_Motoren”(Hall-Motors)。点击OK确认。
步骤五:打开DB1将变量数据类型定义为 UDT1(符号名“Motor”)。如图所示:两个数组(ARRAY)变量,每组包括10个以UDT1为数据类型的变量(编号1到10)。
步骤六:选择菜单命令“View>Data View”可显示所有 DB1数据。
注意事项:在数据块中变量定义为UDT情况下只能对实际值进行编辑。既可以在数据块的数据视图中输入变量的当前值。初始值“Initial Value”纵栏显示的是在定义UDT变量时所设的初值。只是在DB块第一次存储时将初值作为当前值。
步骤七:为FC或FB定义UDT1类型的IN参数
创建FB或FC时,可以定义UDT1(Motor)类型的IN参数,如图所示。例如,与操作语句:“U #Eingabe.Einschalten”(A #Input.Switch On)
·Eingabe:FC1的IN参数变量
·Einschalten:UDT1中的一个变量名
UDT数据类型同样适用于OUT和IN_OUT参数,方法同上。步骤八:数据块 DB1的寻址及编程
下图所示为变量定义为UDT1类型数据结构的 DB1的编程例子。
例如与操作:U “Halle Motoren”.Halle 1 Motor[2].Einschalten(“U Hall_Motors.Hall_1_Motor[2].Switch On)·Halle_Motoren: DB1的符号名
·Halle_1_Motor[2]: DB 块数组2的变量
·Einschalten: UDT1中的一个变量名
步骤九:在FC或FB中参数化IN参数
当调用FC1时,UDT类型的输入变量必须赋值,例如可以用如下语句将第一组电机地址指针赋给输入参数。
·“Halle_Motoren”.Halle_1_Motor[1](“Hall_Motors”.Hall_1_Motor[1])
这种参数化过程同样适用于定义为UDT类型的OUT和IN_OUT参数的其它变量。
步骤十:在交叉参考表中可以显示 S7用户程序所用地址及应用(例如 DB1)的列表。
数据块“unlinked”属性注意事项:
如果在DB块中定义了UDT数据类型并且将 DB“unlinked”属性激活,对于 STEP 7 V5.2/V5.3,如果对UDT作了修改,STEP 7会应用“Check block consistency”功能自动调整数据块,此时,“unlinked”的属性可能会失效。当块一致性检查完成后,确保 DB的“unlinked”属性依然有效,否则可作相应设置。
第四篇:小程序的页面跳转以及参数传递
第九程序小程序的页面跳转以及参数传递
页面跳转
参数传递
微信小程序的页面跳转,页面之间传递参数笔记 先上demo图: 为了简化逻辑,所以index.wxml里面只写了两个text.既然是跳转,那就还有其他页面.目录如下: 三个页面,但是代码很简单.直接上代码...微信小程序的页面跳转,页面之间传递参数笔记
先上demo图:
为了简化逻辑,所以index.wxml里面只写了两个text.既然是跳转,那就还有其他页面.目录如下:三个页面,但是代码很简单.直接上代码.index.wxml中的URL就是跳转的页面路径.上面代码中就是navigator目录下的navigator页面,title是参数.navigator下redirect属性是值在当前页打开.如果不加redirect就是跳转到新页面.都可以携带参数.navigator下redirect属性是值在当前页打开.如果不加redirect就是跳转到新页面.都可以携带参数.在navigatort.wxml中通过js代码可以获取到title,代码如下 //navigatort.js 最后上两张跳转后的图.1.跳转到新页面
2.在原来的页面打开
有没有发现一个细节,在原来的页面打开是不会出现返回按钮的,而跳转到新页面后会出返回按钮.这是因为我写了两个页面.如果indexwxml不是一级页面,这里都会出现返回按钮.当然返回的结果是不一样的:
1.跳转到新页面,返回是回到之前的页面;2.在原来页面打开,返回是回到上一级页面.
第五篇:带参数的构造函数c++程序
#include
using namespace std;
class Box
{
public:
Box(int,int,int);//声明带参数的构造函数(参见之前的与BOX同名函数修改数值为某个固定数)
int volume();
private:
int height;
int width;
int length;
};
Box::Box(int h,int w,int len)
函数
{
height=h;
width=w;
length=len;
}
int Box::volume()
{
return(height*width*length);
}
int main()
{
Box box1(12,23,34);
box1的长宽高
cout<<“the value of box1 is”< Box box2(23,34,45); cout<<“the value of box2 is”< return 0; } //在类外定义带参数的的构造//建立对象box1并指定