# leao **Repository Path**: ma-zhida/leao ## Basic Information - **Project Name**: leao - **Description**: Mac 电机 和macUI 进行交互 swiftui 开发 usb 连接 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-18 - **Last Updated**: 2025-03-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ActionScript 编写规范 ## 1 前言 本文档旨在说明ActionScript动作控制脚本的编写方法。 ActionScript是一种我司自研的硬件控制脚本,用于iPRIC项目的动作控制和流程管理。 ## 2 格式 ActionScript可以利用各类文本编辑器编写。一行代表一条指令,允许空行,可以在函数外任意位置插入注释,不需要进行形如【//】或【#】等的注释标记。 每一个程序段以Button函数起头,例如: Button(ceshiiphone) 程序ceshiiphone iPhoneBlink(01) Button(chushihua) 程序chushihua TcpDevice(10001, R1, 192.168.0.12, 2222)Add 创建一个叫R1的机器人 AddTcpDevice(20001, L2, 192.168.0.14, 1111) 创建一个叫L2的光源 Button(zouwei) 程序zouwei MovJGP(R1, 12, 70) R1走到12点,速度70 OptFLSTrigger(L2, 3) L2触发3通道 iPhoneCapture(01, , 1, ) 01号iphone拍照 上述程序会在狮子界面上生成三个按钮ceshiiphone、chushihua、zouwei,点击相应的按钮执行相应的程序。如需要更改程序,在文本编辑器中改变脚本文件,重新加载脚本文件即可。 ## 3 函数 ### 3.1 通用函数 #### 3.1.1 程序入口 形式: Button(Name) 参数: - Name:字符串,程序名称。 示例: Button(A1) 开始一段名为A1的程序。 #### 3.1.2 函数 形式: Func(Name) 参数: - Name:字符串,函数名称。 示例: Func(A1) 开始一段名为A1的程序。 #### 3.1.3 延时 形式: Sleep(Second) 参数: - Second:浮点数,单位为秒。 示例: Sleep(0.5) 延时0.5s。 #### 3.1.4 与 形式: And(Op1, Op2, Op3) 参数: - Op1:字符串,布尔变量名称 - Op2:字符串,布尔变量名称 - Op3:字符串,布尔变量名称 示例: And(Op1, Op2, Op3) 令Op3 = Op1 && Op2,并将结果存储于Op3中。 #### 3.1.5 或 形式: Or(Op1, Op2, Op3) 参数: - Op1:字符串,布尔变量名称 - Op2:字符串,布尔变量名称 - Op3:字符串,布尔变量名称 示例: Or(Op1, Op2, Op3) 令Op3 = Op1 || Op2,并将结果存储于Op3中。 #### 3.1.6 非 形式: Not(Op1, Op2) 参数: - Op1:字符串,布尔变量名称 - Op2:字符串,布尔变量名称 示例: And(Op1, Op2) 令Op2 = !Op1,并将结果存储于Op2中。 #### 3.1.7 条件判断语句 形式: If(Op, Func1, Func2) 参数: - Op1:字符串,布尔变量名称 - Func1:字符串,函数名称 - Func2:字符串,函数名称 示例: If(A1, B1, B2) 判断A1是否为真,如果为真则执行B1函数,否则则执行B2函数。 #### 3.1.8 循环语句 形式: For(Func, Times) 参数: - Func:字符串,函数名称 - Times:整数,循环次数 示例: For(A1, 3) 循环执行A1函数3次。 ### 3.2 添加设备函数 #### 3.2.1 添加TCP设备 形式: AddTcpDevice(Type, Name, Ip, Port) 参数: - Type:整数,设备类型; - 10001:汇川六轴机器人; - 20001:OPT频闪光源; - 20002:OPT长亮光源; - 40001:TCP IO模块; - Name:字符串,设备名称; - Ip: 字符串,Ip地址; - Port:整形,端口号。 示例: AddTcpDevice(10001, R1, 192.168.1.2, 8888) 添加一个汇川六轴机器人,名字为R1,ip地址192.168.1.2,端口为8888。 #### 3.2.2 添加串口设备 形式: AddSerialDevice(Type, Name, SerialString) 参数: - Type:整数,设备类型; - 30001:串口电机; - Name:字符串,设备名称; - SerialString:字符串:串口名称。 示例: AddSerialDevice(30001, SM, COM1) 添加一个串口电机,名字为SM,串口名称为COM1。 ### 3.3 电机函数 #### 3.3.1 电机上使能 形式: SMEnable(Name, Channel) 参数: - Name:字符串,设备名称; - Channel:整形,通道号。 示例: SMEnable(SW, 3) 将SW电机第3通道上使能。 #### 3.3.2 电机下使能 形式: SMDisable(Name, Channel) 参数: - Name:字符串,设备名称; - Channel:整形,通道号。 示例: SMDisable(SW, 3) 将SW电机第3通道下使能。 #### 3.3.3 电机相对运动 形式: SMRelativelyMove(Name, Channel) 参数: - Name:字符串,设备名称; - Channel:整形,通道号。 示例: SMRelativelyMove(SW, 3) 将SW电机第3通道进行相对运动。 #### 3.3.4 电机设置步长 形式: SMSetSteps(Name, Channe, Steps) 参数: - Name:字符串,设备名称; - Channel:整形:通道号; - Steps: 整形,电机运动步长。 示例: SMSetSteps(SW, 3, 200000) 将SW电机第3通道运动步长设置为200000。 #### 3.3.5 电机回原点 形式: SMHome(Name, Channe, Trigger) 参数: - Name:字符串,设备名称; - Channel:整形,通道号; - Trigger: 整形,原点触发号。 示例: SMHome(SW, 3, 4) 将SW电机第3通道回原点,其触发号为0x04。 #### 3.3.6 电机设置加速度 形式: SMSetAcc(Name, Channel, Value) 参数: - Name:字符串,设备名称; - Channel:整形,通道号; - Value: 整形,加速度数值。 示例: SMSetAcc(SW, 3, 1200) 设置SW电机第三通道加速度数值为1200 #### 3.3.7 电机设置减速度 形式: SMSetDcc(Name, Channel, Value) 参数: - Name:字符串,设备名称; - Channel:整形,通道号; - Value: 整形,减速度数值。 示例: SMHome(SW, 3, 1200) 将SW电机第3通道的减速度数值设置为1200。 #### 3.3.8 电机设置速度 形式: SMSetSpeed(Name, Channel, Value) 参数: - Name:字符串,设备名称; - Channel:整形,通道号; - Value: 整形,速度数值。 示例: SMSetSpeed(SW, 3, 1200) 将SW电机第3通道的速度数值设为1200。 #### 3.3.9 电机等待 形式: SMWait(Name, Channel, Timeout) 参数: - Name:字符串,设备名称; - Channel:整形,通道号; - Timeout: 浮点型,超时长度数值,单位为秒。 示例: SMSetSpeed(SW, 3, 3.5) 阻塞查询SW电机第3通道是否停止运动,若停止运动,则执行下一条语句;若3.5秒后仍在运动,则报超时退出执行脚本。 ### 3.4 光源函数 #### 3.4.1 设置脉宽 形式: OptFLSSetPulseWidth(Name, Channel, Value) 参数: - Name:字符串,设备名称; - Channel:整形,通道号; - Value:整形,脉宽。 示例: OptFLSSetPulseWidth(L1, 2, 500) 将名为L1的光源的第2通道的脉宽设为500ms。 #### 3.4.2 触发频闪 形式: OptFLSTrigger(Name, Channel) 参数: - Name:字符串,设备名称; - Channel:整形,通道号。 示例: OptFLSTrigger(L1, 2) 触发名为L1的光源的第2通道。 #### 3.4.3 设置亮度 形式: OptPLSSetLightValue(Name, Channel, Value) 参数: - Name:字符串,设备名称; - Channel:整形,通道号; - Value:整形,亮度。 示例: OptPLSSetLightValue(L1, 2, 500) 将名为L1的光源的第2通道的亮度设为500。 #### 3.4.4 设置通道开关 形式: OptPLSSetStatus(Name, Channel, Value) 参数: - Name:字符串,设备名称; - Channel:整形,通道号; - Value:整形,开关; - 0:关; - 1:开。 示例: OptPLSSetStatus(L1, 2, 1) 将名为L1的光源的第2通道打开。 ### 3.5 机器人函数 #### 3.5.1 获取权限 形式: IR6GetPermit(Name) 参数: - Name:字符串,设备名称。 示例: IR6GetPermit(R1) 获得名为R1的机器人的权限。 #### 3.5.2 强行获取权限 形式: IR6GetPermitForcibly(Name) 参数: - Name:字符串,设备名称。 示例: IR6GetPermitForcibly(R1) 强行获得名为R1的机器人的权限。 #### 3.5.3 取消权限 形式: IR6RemovePermit(Name) 参数: - Name:字符串,设备名称。 示例: IR6RemovePermit(R1) 取消名为R1的机器人的权限。 #### 3.5.4 登录 形式: IR6Login(Name, Mode, Password) 参数: - Name:字符串,设备名称; - Mode: 整形,登录模式; - Password:字符串,登陆密码。 示例: IR6Login(R1, 0, 123465) 登录名为R1的机器人,登陆模式为0,登陆密码为123465。 #### 3.5.5 登出 形式: IR6Logout(Name) 参数: - Name:字符串,设备名称。 示例: IR6Logout(R1) 登出名为R1的机器人。 #### 3.5.6 重置系统错误 形式: IR6ResetSystemError(Name) 参数: - Name:字符串,设备名称。 示例: IR6ResetSystemError(R1) 重置名为R1的机器人的系统错误。 #### 3.5.7 设置系统急停 形式: IR6ResetSystemError(Name, Value) 参数: - Name:字符串,设备名称; - Value:整形,急停状态; - 0:关闭; - 1:打开。 示例: IR6SetEmergencyStatus(R1, 1) 打开名为R1的机器人的系统急停。 #### 3.5.8 设置系统电机状态 形式: IR6SetMotorStatus(Name, Value) 参数: - Name:字符串,设备名称; - Value:整形,电机状态; - 0:关闭; - 1:打开。 示例: IR6SetMotorStatus(R1, 1) 打开名为R1的机器人的电机。 #### 3.5.9 设置系统数据流模式状态 形式: IR6SetDsmodeStatus(Name, Value) 参数: - Name:字符串,设备名称; - Value:整形,数据流模式。 示例: IR6SetDsmodeStatus(R1, 1) 设置名为R1的机器人的数据流模式为1。 #### 3.5.10 设置DO 形式: IR6SetDo(Name, Point, Value) 参数: - Name:字符串,设备名称; - Point:整形,点位号; - Value:整形,点位状态; - 0:低电平; - 1:高电平。 示例: IR6SetDsmodeStatus(R1, 4, 1) 设置名为R1的机器人的第4号DO点位输出为高电平。 #### 3.5.11 回原点 形式: IR6GoHome0(Name) 参数: - Name:字符串,设备名称。 示例: IR6GoHome0(R1) 令名为R1的机器人回原点。 #### 3.5.12 直线运动 形式: IR6MovJGP(Name, Point, Speed) 参数: - Name:字符串,设备名称; - Point:整形,点位号; - Speed:整形,速度。 示例: IR6MovJGP(R1, 4, 85) 设置名为R1的机器人以85的速度向4号点运动。 ### 3.6 iPhone函数 #### 3.6.1 拍照 形式: iPhoneCapture(Name, Formula, Volver, Uuid) 参数: - Name:字符串,设备名称; - Formula:字符串:配方名称,可不填; - Volver:整形,回图标志位,如果配合大象使用请置1; - 0:不会图; - 1:回图; - Uuid:字符串,图像Uuid,可不填。 示例: iPhoneCapture(A2, , 1, ) 控制名为A2的iPhone进行拍照,无配方,回图至Mac,Uuid为空。 iPhoneCapture(A2, ikun, 0, 1234) 控制名为A2的iPhone进行拍照,执行配方ikun,不回图至Mac,Uuid为1234。 #### 3.6.2 响铃震动 形式: iPhoneBlink(Name) 参数: - Name:字符串,设备名称。 示例: iPhoneBlink(A2) 名为A2的iPhone会响铃震动。 #### 3.6.3 设置曝光时间 形式: iPhoneSetExpoTime(Name, Value) 参数: - Name:字符串,设备名称; - Value:浮点数,曝光时间。 示例: iPhoneSetExpoTime(A2, 0.5) 名为A2的iPhone设置曝光时间为0.5s。 #### 3.6.4 设置ISO 形式: iPhoneSetIso(Name, Value) 参数: - Name:字符串,设备名称; - Value:浮点数,ISO。 示例: iPhoneSetIso(A2, 500) 名为A2的iPhone设置ISO为500。 #### 3.6.5 设置白平衡 形式: iPhoneSetEv(Name, Value) 参数: - Name:字符串,设备名称; - Value:浮点数,白平衡。 示例: iPhoneSetEv(A2, -3.5) 名为A2的iPhone设置白平衡为-3.5。 #### 3.6.6 设置放大倍率 形式: iPhoneSetZoom(Name, Value) 参数: - Name:字符串,设备名称; - Value:浮点数,放大倍率。 示例: iPhoneSetZoom(A2, 3.2) 名为A2的iPhone设置放大倍率为3.2。 #### 3.6.7 设置闪光灯 形式: iPhoneSetFlash(Name, Value) 参数: - Name:字符串,设备名称; - Value:整形,闪光灯开关; - 0:关闭; - 1:打开。 示例: iPhoneSetFlash(A2, 1) 名为A2的iPhone设置闪光灯打开。 #### 3.6.8 设置对焦位置 形式: iPhoneSetFocus(Name, X, Y) 参数: - Name:字符串,设备名称; - X:浮点数,对焦点X坐标; - Y:浮点数,对焦点Y坐标。 示例: iPhoneSetFocus(Name, 1024, 3000) 名为A2的iPhone设置对焦点为(1024,3000)。 ### 3.7 TCP IO函数 #### 3.7.1 设置单个DO 形式: SetDO(Name, Point, Value, Station) 参数: - Name:字符串,设备名称; - Point:浮点数,对焦点X坐标; - Value:整形,开关; - 0:关; - 1:开。 - Station:整型,站号。 示例: SetDO(A0, 3, 1, 2) 名为A0的IO模块的第2站第3通道设为高电平(1)。 #### 3.7.2 设置所有DO 形式: SetDO(Name, Value, Station) 参数: - Name:字符串,设备名称; - Value:整形,开关; - 0:关; - 1:开。 - Station:整型,站号。 示例: SetDO(A0, 85, 2) 名为A0的IO模块的第2站所有DO设为85(0x01010101)。 #### 3.7.3 读取单个DO 形式: GetDO(Name, Point, Var, Station) 参数: - Name:字符串,设备名称; - Point:浮点数,对焦点X坐标; - Var:整型,变量名称 - Station:整型,站号。 示例: GetDO(A0, 3, BBB, 2) 名为A0的IO模块的第2站第3通道的值存入变量BBB中。 #### 3.7.4 读取单个DI 形式: GetDI(Name, Point, Var, Station) 参数: - Name:字符串,设备名称; - Point:浮点数,对焦点X坐标; - Var:整型,变量名称 - Station:整型,站号。 示例: GetDI(A0, 3, BBB, 2) 名为A0的IO模块的第2站第3通道的值存入变量BBB中。