SMC_GEOINFO

这个数据类型位于CODESYS SoftMotion 函数库 SM3_CNC。这个结构体用于存储一个路径对象, 例如一个程序路径部分,例如一条线,圆弧或者椭圆部分。相关的有关对象的更多几何信息可以被存储,例如起始时的速度 / 路径结束或者表格。

从 V3.5 SP2 编程系统开始, iSourceLine_No 存储CNC关键字并且语句数量存储在 diSentenceNo。在之前的版本中,尤其是CODESYS V2.3,语句的数量存储在 iSourceLine_No。

成员

类型

初始值

描述

iObjNo

INT

0

任意对象号 (与当前路径描述不相关)。是一个以 1-开始的转换 Id。

iSourceLine_No

INT

0

存储以 0-开始的内部CNC文件的行号。

diSentenceNo

DINT

0

存储 G-代码语句序号 (关键字 N-的值)

iMoveTyp

SMC_MOVTYP

 

对象编译类型的值。 “SMC_MOVTYP (ENUM)”

piStartPos

SMC_POSINFO

 

精确描述对象位置的结构体 (如果 iMoveType=INITPOS将会被忽略)。

piDestPos

SMC_POSINFO

 

精确描述对象结束位置的数据结构体。

dP1

LREAL

0

依据 iMoveType 这些参数将包含以下的信息:

  • LIN, LINPOS::存储在 piStart_Pos 和 piDest_Pos 中的完整信息。
  • CLW, CCLW:坐标存储在坐标系统中 (vX, vY, vN)。
    • dP1:圆中心点 的 X-坐标
    • dP2:圆中心点 的 Y-坐标
    • dP3:圆半径
    • dP4:圆的Z坐标
  • SPLINE:
    • dP1-dP8:样条参数
    • dP9-dP18:附加样条参数
  • ELLCLW, ELLCCLW:
    • dP1: 圆中心的 X-坐标
    • dP2: 圆中心的 Y-坐标
    • dP3: 主轴单位矢量的 X-分量
    • dP4: 主轴单位矢量的 Y-分量
    • dP5: 主轴长度
    • dP6: 子轴长度
    • dP7: 主轴和 X-轴之间的夹角 (弧度)
    • dP8: 比率 P6/P5
  • INITPOS: -
  • MCOMMAND: 插补期间用于 M-命令 (MOVTYP = 120) M-函数序号

dP2

LREAL

0

dP3

LREAL

0

dP4

LREAL

0

dP4

LREAL

0

dP5

LREAL

0

dP6

LREAL

0

dP7

LREAL

0

dP8

LREAL

0

dP9

LREAL

0

dP10

LREAL

0

dP11

LREAL

0

dP12

LREAL

0

dP13

LREAL

0

dP14

LREAL

0

dP15

LREAL

0

dP16

LREAL

0

dP17

LREAL

0

dP18

LREAL

0

vX

SMC_Vector3D

STRUCT(dX := 1, dY := 0, dZ := 0)

本地坐标系统的 X-轴,以世界坐标系表达。

vY

SMC_Vector3D

STRUCT(dX := 0, dY := 1, dZ := 0)

本地坐标系统的 Y-轴,以世界坐标系表达。

vN

SMC_Vector3D

STRUCT(dX := 0, dY := 0, dZ := 1)

本地坐标系统的 Z-轴,以世界坐标系表达。

dT1

LREAL

0

圆周/样条曲线的起始参数

  • LIN, LINPOS: 存储在 Start_Pos 和 Dest_Pos中完整的信息
  • CLW, ELLCLW:
    • dT1: 以数学方式为导向的起始角度 (0=east, 90=north, 180=west, 270=south)
    • dT2: 以度数定义的圆弧角度值 (例如 90=四分之一圆, 180 = 半圆)
  • CCLW, ELLCCLW:
    • dT1: 以数字方式定义的起始角度值 (0=east, 90=north, 180=west, 270=south)
    • dT2: 以速度定义的反向圆弧角 (例如 -90=四分之一圆, -180 = 半圆)
  • SPLINE: 参数 t 的启动和结束值(参阅线条的描述), “ G5, G10” 0 和 1 默认情况下。
  • ELLCLW, ELLCCLW: <删除
  • INITPOS: -

dT2

LREAL

1

dToolRadius

LREAL

0

路径编译必须的信息 SMC_ToolCorr 或者 SMC_RoundPath 以及其他相关。

dVel

LREAL

0

到达的目标速度 (以 path units / sec 为单位)。

dVelEnd

LREAL

0

对象结束时的预定速度 (以 Bahneinheiten / sec为单位)。

dVelEndStored

LREAL

0

结束部分最大速度值调用 SMC_CheckVelocities功能块之前。

dVelEndSafe

LREAL

0

用于二次曲线的计算: maximum <= dVelEnd 允许在下一语句达到 dVelEndSafe 。如果下一语句有无效的速度,加速度以及减速度值那么此值为 -1。

dAccel

LREAL

100

允许最大加速度 (以路径 units / sec²为单位)。

dDecel

LREAL

100

允许最大减速度 (以路径 units / sec²为单位)。

dLength

LREAL

0

在路径单元的对象长度

byInternMark

BYTE

0

路径预处理的起始和结束点:

Bit 0 置位: 完成此对象之后停止刀具补偿

Bit 1 置位:在对象的左半部分启动刀具补偿

Bit 2 置位:在对象的右部分启动刀具补偿

Bit 3 置位:停止路径弯曲 / 此对象之后进行圆滑处理

Bit 4 置位:停止路径弯曲 / 在这个对象启动圆滑

Bit 5 置位:在这个对象启动路径圆滑

Bit 6 置位:在此对象之后停止避让循环

Bit 7 置位:在这个对象中停止避让循环

dHelpPos

ARRAY[0..MAX_IPOSWITCHES] OF INT

 

辅助开关的相对位置 (0: 对象启动, 1: 对象结束,类似于G代码中的 O)

iHelpID

ARRAY[0..MAX_IPOSWITCHES] OF INT

 

ID (G-代码: H) 辅助开关。如果当前 MCOMMAND类型的对象 iHelpID[0] 中将包含 M-操作的序号。

adVelAddAx

ARRAY[0..7] OF LREAL

 

If <>0 这些错误值指定速度值:

0: 用于所有 G0 命令的速度值

1: Z轴最大速度值;用于 SMC_ExtendedVelocityChecks

2: Q轴最大速度值;用于 SMC_ExtendedVelocityChecks

3:Q轴最大速度值;用于 SMC_ExtendedVelocityChecks

4:U轴最大速度值;用于 SMC_ExtendedVelocityChecks

5: V轴最大速度值;用于 SMC_ExtendedVelocityChecks

6: W轴最大速度值;用于 SMC_ExtendedVelocityChecks

adAccAddAx

ARRAY[0..7] OF LREAL

 

If <>0 这些错误的值定义加速度的值:

0: 加速度/减速度用于所有的 G0 命令

1: Z轴最大的加速度/减速度值;用于SMC_ExtendedVelocityChecks

2: P轴最大的加速度/减速度值;用于SMC_ExtendedVelocityChecks

3:Q轴最大的加速度/减速度值;用于SMC_ExtendedVelocityChecks

4:U轴最大的加速度/减速度值;用于SMC_ExtendedVelocityChecks

5: V轴最大的加速度/减速度值;用于SMC_ExtendedVelocityChecks

6: W轴最大的加速度/减速度值;用于SMC_ExtendedVelocityChecks

adDecAddAx

ARRAY[0..7] OF LREAL

 

示例

G-代码

%Name
N111 G1 X100
 

IEC-代码

VAR
    I : INT := 0;
    BufDecoder: ARRAY[0..99] OF SMC_GEOINFO;
END_VAR

BufDecoder[i].iObjNo = 1
BufDecoder[i].iSourceLine_No = 111
 

手动创建路径

如果一个路径是通过G代码关键字手动创建,那么行号必须设置在SMC_GEOINFO 结构体中的 iSourceLine_No 中并且按照以下方式进行新行的定义:

VAR
    I : INT := 0;
    diLineNumber : DINT; 
    BufCNC: ARRAY[0..99] OF SMC_GCODE_WORD;
END_VAR

BufCNC[i].byLetter = SRC_LINE_ADDR; //SoftMotion_CNC_Constants
BufCNC[i].diValue = diLineNumber