编程指令集
⑴ 卧式加工中心加工编程
卧式加工中心加工编程指令集:
G 代码 G00 定位(快速进给) B *
G01 直线插补(切削进给) B *
G02 圆弧插补/螺旋线(CW) B
G03 圆弧插补/螺旋线(CCW) B
G04 暂停 B
G05.1 预读(预先读出多个程序段) B
G07.1 圆柱插补 O
G08 预读控制 B
G09 准确停止 B
G10 加工程序参数输入 B
G11 加工程序参数输入删除 B
G15 取消极坐标指令 B
G16 极坐标指令 B
G17 X&Y平面选择 B *
G18 Z&X平面选择 B
G19 Y&Z平面选择 B
G20 英寸输入 B
G21 毫米输入 B
G22 存储行程检查 O
G23 存储行程检查删除 O
G27 返回参考点检测 B
G28 返回参考点 B
G29 从参考点返回 B
G30 返回第2.3.4参考点 B
G31 跳跃功能 O
G33 螺旋切削 O
G37 自动刀具长度测量 O
G39 拐角偏置圆弧插补 B
G40 刀具径补偿取消 B *
G41 刀具左侧补偿 B
G42 刀具右侧补偿 B
G40.1 法线方向控制取消 O
G41.1 法线方向控制左侧打开 O
G42.1 法线方向控制右侧打开 O
G43 +方向刀具长度补偿 B
G44 -方向刀具长度补偿 B
G49 刀具长度补偿取消 B *
G50 取消比例缩放 B
G51 比例缩放 B
G50.1 G指令镜像功能删除 B
G51.1 G指令镜像功能 B
G52 局部坐标设定 B
G53 机床坐标选择 B
G54 工件坐标系1选择 B *
G54.1 附加工件坐标系选择 B
G55 工件坐标系2选择 B
G56 工件坐标系3选择 B
G57 工件坐标系4选择 B
G58 工件坐标系5选择 B
G59 工件坐标系6选择 B
M指令
M00 程序停止
M01 条件程序停止
M02 程序结束
M03 主轴正转
M04 主轴反转
M05 主轴停止
M06 刀具交换
M08 冷却开
M09 冷却关
M18 主轴定向解除
M19 主轴定向
M29 刚性攻丝
M30 程序结束并返回程序头
M98 调用子程序
M99 子程序结束返回/重复执行
⑵ 西门子plc编程的指令都有什么
西门子plc编程指令全集在这里
1 位逻辑指令
1.1 -||- 常开接点(地址)
1.2 -|/|- 常闭接点(地址)
1.3 XOR 位异或
1.4 -|NOT|- 信号流反向
1.5 -( ) 输出线圈
1.6 -(#)- 中间输出
1.7 -(R) 线圈复位
1.8 -(S) 线圈置位
1.9 RS 复位置位触发器
1.10 RS 置位复位触发器
1.11 -(N)- RLO下降沿检测
1.12 -(P)- PLO上升沿检测
1.13 -(SAVE) 将RLO存入BR存储器
1.14 MEG 地址下降沿检测
1.15 POS 地址上升沿检测
2 比较指令
2.1 CMP?I 整数比较
2.2 CMP?D 双整数比较
2.3 CMP?R 实数比较
3 转换指令
3.1 BCD_IBCD码转换为整数
3.2 I_BCD 整数转换为BCD码
3.3 I_DINT 整数转换为双整数
3.4 BCD_DIBCD码转换为双整数
3.5 DI_BCD 双整数转换为BCD码
3.6 DI_REAL 双整数转换为浮点数
3.7 INV_I 整数的二进制反码
3.8 INV_DI 双整数的二进制反码
3.9 NEG_I 整数的二进制补码
3.10 NEG_DI 双整数的二进制补码
3.11 NEG_R 浮点数求反
3.12 ROUND 舍入为双整数
3.13 TRUNC 舍去小数取整为双整数
3.14 CEIL 上取整
3.15 FLOOR 下取整
4 计数器指令
4.1 S_CUD 加减计数
4.2 S_CU 加计数器
4.3 S_CD 减计数器
4.4 -(SC) 计数器置初值
4.5 -(CU) 加计数器线圈
4.6 -(CD) 减计数器线圈
5 数据块指令
5.1 -(OPN) 打开数据块DB或DI
6 逻辑控制指令
6.1 -(JMP) 无条件跳转
6.2 -(JMP) 条件跳转
6.3 -(JMPN) 若非则跳转
6.4 LABEL 标号
7 整数算术运算指令
7.1 ADD_I 整数加法
7.2 SUB_I 整数减法
7.3 MUL_I 整数乘法
7.4 DIV_I 整数除法
7.5 ADD_DI 双整数加法
7.6 SUB_DI 双整数减法
7.7 MUL_DI 双整数乘法
7.8 DIV_DI 双整数除法
7.9 MOD_DI 回送余数的双整数
8 浮点算术运算指令
8.1 基础指令
8.1.1 ADD_R 实数加法
8.1.2 SUB_R 实数减法
8.1.3 MUL_R 实数乘法
8.1.4 DIV_R 实数除法
8.1.5 ABS 浮点数绝对值运算
8.2 扩展指令
8.2.1 SQR 浮点数平方
8.2.2 SQRT 浮点数平方根
8.2.3 EXP 浮点数指数运算
8.2.4 LN 浮点数自然对数运算
8.2.5 SIN 浮点数正弦运算
8.4.6 COS 浮点数余弦运算
8.2.7 TAN 浮点数正切运算
8.2.8 ASIN 浮点数反正弦运算
8.2.9 ACOS 浮点数反余弦运算
8.2.10ATAN 浮点数反正切运算
9 赋值指令
9.1 MOVE 赋值
10 程序控制指令
10.1 -(Call) 从线圈调用FC/SFC(无参数)
10.2 CALL_FB 从方块调用FB
10.3 CALL_FC 从方块调用FC
10.4 CALL_SFB 从方块调用SFB
10.5 CALL_SFC 从方块调用SFC
10.6 -(MCR<)>
10.7 -(MCR>) 主控继电器断开
10.8 -(MCRA) 主控继电器启动
10.9 -(MCRD) 主控继电器停止
10.10 -(RET) 返回
11 移位和循环指令
11.1 移位指令
11.1.1 SHR_I 整数右移
11.1.2 SHR_DI 双整数右移
11.1.3 SHL_W 字左移
11.1.4 SHR_W 字右移
11.1.5 SHL_DW 双字左移
11.1.6 SHR_DW 双字右移
11.2 循环指令
11.2.1 ROL_DW 双字左循环
11.2.2 ROR_DW 双字右循环
12 状态位指令
12.1 OV -||- 溢出异常位
12.2 OS -||- 存储溢出异常位
12.3 UO -||- 无序异常位
12.4 BR -||- 异常位二进制结果
12.5 ==0-||- 结果位等于'0'
12.6 <>0-||- 结果位不等于'0'
12.7 >0-||- 结果位大于'0'
12.8 <0-||->
12.9 >=0-||- 结果位大于等于'0'
12.10 <=0-||->
13 定时器指令
13.1 S_PULSE 脉冲S5定时器
13.2 S_PEXT 扩展脉冲S5定时器
13.3 S_ODT 接通延时S5定时器
13.4 S_ODTS 保持型接通延时S5定时器
13.5 S_OFFDT 断电延时S5定时器
13.6 -(SP) 脉冲定时器线圈
13.7 -(SE) 扩展脉冲定时器线圈
13.8 -(SD) 接通延时定时器线圈
13.9 -(SS) 保持型接通延时定时器线圈
13.10 -(SF) 断开延时定时器线圈
14 字逻辑指令
14.1 WAND_W 字和字相'与'
14.2 WOR_W 字和字相'或'
14.3 WAND_DW 双字和双字相'与'
14.4 WOR_DW 双字和双字相'或'
14.5 WXOR_W 字和字相'异或'
14.6 WXOR_DW 双字和双字相'异或
⑶ 如何使用SSE指令集编写应用程序
1、编译器的自动矢量化
-mfpmath=sse
仅建议在P4和K8以上级别的处理器上使用该选项。
-mmmx
-msse
-msse2
-msse3
-m3dnow
-mssse3(gcc-4.3新增)
-msse4.1(gcc-4.3新增)
-msse4.2(gcc-4.3新增)
-msse4(含4.1和4.2,gcc-4.3新增)
是否使用相应的扩展指令集以及内置函数,需要按照自己的cpu做选择。
2、使用C/C++类库
目前,GNU
GCC等大多数编译器都提供了对SSE指令集的变成支持,允许用户在C++代码中不用编写汇编代码,就可以直接通过调用库函数而直接使用SSE指令。
3、使用编译器的内嵌原语(Intrinsics)
SSE的intrinsics的规则
_mm_<opcode>_<suffix>
其中,<opcode>是指令的类别,像add、sub等等,<suffix>是指令的种类。在SSE浮点运算指令中,只有两种:ps和ss。
ps:Packed
Single-precision,指对寄存器中的四个单精度浮点同时进行运算。
ss:Scaler
Single-precision,指对寄存器中的DATA0进行运算。
编程时需要包含下表所示的头文件:
mmintrin.h
MMX
xmmintrin.h
SSE
emmintrin.h
SSE2
pmmintrin.h
SSE3
tmmintrin.h
SSSE3
intrin.h
SSE4A
smmintrin.h
SSE4.1
nmmintrin.h
SSE4.2
mm3dnow.h
3DNOW
说明:如果导入一个高版本的指令集头文件,那么一般就不需要在导入低版本的指令了。
4、使用内嵌汇编
指令语法特征
如:PADDUSW(无符号饱和模式的字组相加)
前缀:P代表成组数据类型
操作指令:如ADD、SUB等
后缀:US为无符号饱和处理
S为有符号饱和处理
B、W、D、Q分别为字节组、字组、双字组、四字。
GCC的asm结构
用汇编编写的程序运行速度快,但开发速度非常慢,效率也很低。如果只是想对关键代码段进行优化,更好的办法是将汇编指令嵌入到C语言程序中,充分利用高级语言和汇编语言各自的优点。一般来讲,在C代码中嵌入汇编语句要比“纯粹”的汇编语言代码复杂的多,因为需要解决如何分配寄存器,以及如何与C代码中的变量相结合等问题。内联汇编能够灵活操作,而且可以使其输出通过C变量显示出来。因为它具有这种能力,所以asm可以用作汇编指令和C程序之间的接口。使用__asm__关键字,如果超过一行的指令,每行要加上双引号,并且后面加上\n\t。如果希望确保编译器不会在“asm”内部优化指令,可以在“__asm__”后面使用关键字“volatile”。
内联汇编的基本要素
具体语法结构,请看我的一篇博文:《GCC内嵌汇编》文章连接:
http://blog.chinaunix.net/u3/119372/showart_2417924.html
基本要素说明:
限定符
意义
“m” “v” “o”
内存单元
“r”
任意寄存器
“q”
寄存器eax,ebx,ecx,edx之一
“i” “h”
直接操作数
“E” “F”
浮点数
“g”
任意
“a” ”b” ”c” ”d”
分别表示寄存器eax,ebx,ecx,edx
“S” ”D”
寄存器esi,edi
“I”
常数(0至31)
5、SSE编程注意事项
数据对齐
CPU内存单元以16Byte为边界,如果数据在运算之前不进行对齐,会是指令运算产生大量延时。
GCC:
float
__attribute__((aligned(16))) a[4]={1.2f,3.5f,1.7f,2.8f};
VC:
__declspec(align(16)) float a[4]={1.2f,3.5f,1.7f,2.8f};