收藏 分享(赏)

康耐视相机操作手册.pdf

上传人:weiwoduzun 文档编号:4188780 上传时间:2018-12-14 格式:PDF 页数:17 大小:759.83KB
下载 相关 举报
康耐视相机操作手册.pdf_第1页
第1页 / 共17页
康耐视相机操作手册.pdf_第2页
第2页 / 共17页
康耐视相机操作手册.pdf_第3页
第3页 / 共17页
康耐视相机操作手册.pdf_第4页
第4页 / 共17页
康耐视相机操作手册.pdf_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、上海新时达机器人有限公司 康耐视 相机操作使用说明书 文件状态: 草稿 修改 定稿 文档密级 不保密 内部 机密 项目名称 版本号 1.0 描述 康耐视 相机操作使用说明书 编写人 余国鹰 编写日期 2015/9/10 审核人 审核日期 上海新时达机器人有限公司 目录 一、 康耐视 相机具体设置 3 1.1 软件安装 . 错误 !未定义书签。 1.2 流程编辑 3 1.3 CODESYS 通信注意事项 . 6 二、 相机标定 7 2.1 相机校准 7 2.2 绝对坐标实现 9 2.3 相对坐标实现 10 三、 示教器示例程序 11 3.1 绝对坐标实现范例 11 3.2 相对坐标实现范例 11

2、 四、 CODESYS 逻辑开发 13 4.1 SOCKET通信开发 . 13 4.2 外部点数据处理 14 五、 细节说明 17 康耐视相机操作 使用说明书 一、 康耐视 相机具体设置 1.1 软件安装 双击 康耐视相机 软件 Cognex_In-Sight_Software_4.8.1, 按照步骤一步步 安装即可 。 1.2 流程编辑 1. 设置电脑 本地连接 IPV4 地址为 192.168.39.12( 设置为 39 段即可 ) 。 2. 双击康耐视 In-Sight 浏览器软件进入相机设置界面 , 软件会自动搜索连接的相机设备, 如下图 1.1 所示 。 图 1.1 3. 双击相机设

3、备 (红色椭圆 内 设备 图标 ) , 进入相机编辑界面,如下图 1.2 所示。 图 1.2 上海新时达机器人有限公司 4. 在应用程序步骤 中,开始、设置工具、配置结果、完成 这 4 个步骤形成一个完整的 相机操作流程; 开始 单击“ 开始 ”中“ 已连接 ” , 如 下图 1.3 所示 ,可以进行连接设备、断开设备、刷新、添加 等操作。 图 1.3 单击“开始”中 的 “设置图像”,如下图 1.4 所示。 在“ 采集 /加载图像 ” 对话框中, “ 触发器 ”按钮是进行拍照,“实况视频”按钮是实时显示相机中的图像 ,“从 PC 加载图像”按钮是加载一张存在的图像。 图 1.4 在“编辑采集

4、设置”对话框中, 设置一系列相机参数,根据具体需要进行调节 设置工具 单击“设置工具”中“ 定位部件 ” 按钮 , 对 检测模型 进行 定位 ,作为识别的模型进行对比;单击“设置工具”中“ 检测 部件”按钮 ,对模型进行编辑操作。 在“定位部件”的设置对话框中 ,如下图 1.5 所示 , 合格阀值:每次拍照之后的得分如果大于阀值,则拍照成功,否则失败;旋转公差:检测部件能够旋转的角度范围,如果在范围之类则会拍照成功,否则会失败 康耐视相机操作 使用说明书 图 1.5 配置结果 单击“配置结果”中“通信”按钮, 进行通讯设置操作,如下图 1.6 所示。新时达机器人视觉通信采用的 TCP/IP 通

5、讯方式,单击“ TCP/IP” ,如下图 1.7 所示,在“ TCP/IP 设置”对话框中, “ 服务器主机名 ”设 为 192.168.39.220(机器人控制器 IP 地址) ,“ 端口 ” 设置与 CodeSys 中 相同 ,本例中设为 9876, “ 超时 时间”设为 15000, “结束符”设为 字符串( CR13) 。 单击 “格式化输出字符串” ,进行输出操作,如下图 1.8 所示。 勾选“使用分隔符”,表示在输出之间用逗号分隔符进行隔开,方便进行数据处理操作; 单击“添加”按钮,可以输出很多数据,这里只需要输出 4 个数据,“失败”、 “定位器 .X”、“定位器 .Y” 、“定

6、位器 .角度” ; 输出数据说明: 均为 7 个字节宽度,除图案 .失败是整形外,其它数据均为浮点型,小数点位数为 2 位。 1) 第一位 图案 .失败 :判定符,为 0 表示 采集到特征,拍照成功;为 1 则拍照失败。 2) 第二位 图案 .定位器 .X:输出用户坐标系下的 X 方向绝对值。 3) 第三位 图案 .定位器 .Y:输出用户坐标系下的 Y 方向绝对值。 4) 第四位 图案 .定位器 .角度 :输出用户坐标系下的相对角度。 图 1.6 上海新时达机器人有限公司 图 1.7 图 1.8 完成 在 “完成”中单击“保存 作业 ” ,则保存当前作业任务中的所有设置;在“ 完 成”中单击“

7、运行作业”,则运行当前作业任务。 注意 , 以上参数设定必须在脱机模式下才能够设置,在联机状态下参数不能设置, 与外界设备 实时 通讯必须在联机模式下 ;物体旋转一定角度拍照失败,看检测部件是否超过相机视野范围和旋转角度值设置是否合理 。 1.3 Codesys 通信注意事项 a) 说明:设定 PC 端的 IP 地址, IP 地址必须 192.168.39.XXX,这里设定为 192.168.39.12,用网线与相机控制器相连 ; b) 通信流程包括 : 建立 TCPIP 的服务器端并连接,给相机发送指令,从相机接收数据; c) 图 1.7 中如果把“字段分隔符”改为“停止”,则两个数据之间就

8、是无分隔符的直接连接;如果选择其他,则有相应的分隔符号; d) 例:采用“消零”为“有”,“字段分隔符”为“停止”的方式时,相机发送数据“ -001.00”和“ 1010.02”时,实际上发送了“ 45 48 48 49 46 48 48 49 48 49 48 46 48 50 13” (13是回车符的 ASIIC 码 ); e) 在下载工 程 成功 时, 查看通讯是否连接正常。当 client_congnex 任务中的step_cognex:=2 和 server_cognex 中的 step_server: =2 时,此时通讯成功,否则通讯不正常,需要查看设备是否连接好和 In-Sigh

9、t 软件是否处于联机状态。 f) 详细指令及其他形式的通信可参考文档 通信设定 sdnb-cn5-714d_fh_fz5。 康耐视相机操作 使用说明书 二、 相机标定 要实现将相机采集的数据转换为机器人坐标系下的位姿数据,必须建立相机坐标系与机器人坐标系的对应转换关系,该过程通过相机标定来实现。 相机也分平面相机和三维相机,前者只支持平面数据采集,后者则可以获取 xyz 空间值。以三维相机为例,要详细建立相机三维空间的位置与机器人坐标系的对应关系,必须通过严格的手眼标定来实现。不同相机有手眼标定算法,通过示教多个点来建立手眼转换关系。这里不详述。 如果只做平面工件抓取,那只需要工件变化的坐标值

10、 x、 y 以及绕 z 轴的转动角度 c,问题就简单的多,只需要进行平面的简单标定即可实现。以 康耐视 相机为例, 格力 等客户 只需要实现流水线来料的抓取操作,标定平面坐标系即可, 康耐视 相机可以提供移动后的工件相对于移动前的偏移位置量 ,或者提供工件的绝对移动位置。这里, 我们提供这两种工作方式的实现过程。 2.1 相机校准 相机默认输出的坐标值是相机采集到的像素值,并非实际工件位置尺寸,因此需要将物理坐标与像素值进行映射标定。 设定校准后,可使测量结果像素值转换为实际尺寸并输出,康耐视 提供了校准参数的制作过程 。 1.单击“设置 图像“,界面右下角 出现 下图 2.1 所示界面。校准

11、类型中有很多种,根据实际需要选择,这里选择 “ 网格”,然后单击“校准”按钮,出现下图 2.2 所示界面。 图 2.1 2.打印校准 网格纸张 。 在图 2.2 中,单击“打印网格”按钮,然后将打印的网格纸张放在相机视野 正中间 。 3.在“设置”界面中,“网格类型”为 方格图案(带基准),其它值均为默认。 4.单击“姿势” ,进入姿势设置界面 ,如图 2.3 所示 ,原点位置为默认,单击“触发器”按钮, 相机会自动拍照, 最后单击“校准” ,校准工作就结束。 5.单击“结果” ,可以查看校准情况 ,如图 2.4 所示。 上海新时达机器人有限公司 图 2.2 图 2.3 康耐视相机操作 使用说

12、明书 图 2.4 6.建立检测模型。单击“定位部件”,出现如图 2.5 所示界面, 单击“位置工具”中“ 图案 ”, 然后 单击“添加” ,单击“ OK”, 接着单击 界面右下角 “ 模型 ” ,拖动绿色 模型 矩形框,使 被 检测模型处于 绿色矩形框中,最后单击界面右下角“训练”,此时检测模型已经建立。 图 2.5 7.查看模型建立是否成功。在界面右侧选择板中,可以查看建立图案的 情况,绿色圆点表示模型建立成功,同时会输出检测模型的位置、角度 、得分 ,如图 2.6 所示。 图 2.6 通过以上 7步即可完成相机的校准过程。 2.2 绝对坐标实现 绝对坐标的实现必须借助机器人的用户坐标系,即

13、机器人在用户坐标系下走绝对位置运动。 具体实现由以下几个步骤组成。 首先,用 step机器人三点法示教出一个固定用户坐标系。用户坐标系的原点根据实际情况而定,一般选择流水线上一个固定位置参考点,该参考点要方便相机进行坐标转化标定 。关于用户坐标系的标定,可参见新时达机器人操作使用说明书 ; 其次, 进行相机坐标与实际位置坐标的标定转换。在完成 第一步中的固定用户坐标系标定后,在该坐标系下选取工件上的三点,计算出这三点在用户坐标系的 X、 Y值 (该步骤可通过机器人协助示教获得 在用户坐标系下的位姿值 ) 。在图像输入的“校准”模块中,按照 2.1中的步骤完成相机坐标与实际位置坐标的校准参数制作

14、转换 ; 最后,机器人实现绝对位置运动。在完成第二步后,工件每偏移一点,相机均可计算出其在用户坐标系下新的位置值 X、 Y和绕 Z轴的 theta角度值。 这样,只需要在示教器程序中设上海新时达机器人有限公司 置抓取运动点参考的坐标系为用户坐标系即可,即 RefSys语句 下走绝对 cpe点 。 该 cpe点是codesys里直接读取的相机返回值。 2.3 相对坐标实现 相对 坐标的实现就比较简单,只需要将相机坐标转换为实际位置坐标即可。在工件上选取三个特征点,用带尖机器人示教出这三点在机器人基坐标系下的 坐标值(主要是 X和 Y)。按照 2.1中的校准流程制作出校准参数。这样,工件偏移后,相

15、机可以直接计算出其新的坐标X、 Y和 theta。 需要 注意的是,使用相对坐标运动时,相机输出数据必须是相对量,即测量坐标与基准坐标之差,而不是绝对测量坐标。具体 信息见后续章节。 康耐视相机操作 使用说明书 三、 示教器示例程序 3.1 绝对坐标实现范例 Tool(tool0);/若带工具,则先加载好 PTP(ap0); /走到一个安全位置点 Lin(cp3);/走到标准抓取位置(工件处于标准位置时机器人的抓取位姿,提前示教好) RefSys(ref1);/切到用户坐标系下 WaitTime(uint3); BOOLEXTSet(boolbasepos,TRUE);/端口号为 2,发送信号

16、到 codesys,读取当前位置作为标准抓取位置 WaitTime(uint4); BOOLEXTSet(boolbasepos,FALSE);/关闭该端口 /以上为获得标准抓取位置需要的步骤 RefSys(WORLD); PTP(ap0); LP:int0; BOOLEXTSet(boolphoto,TRUE); /发送相机拍照命令,端口号 0 WaitTime(uint0); /等待 PLC处理时间,建议在 300ms以上 bool0:=BOOLEXTRead(boolenableget); /读取抓取标志位 ,为 TRUE则能抓取 BOOLEXTSet(boolphoto,FALSE);

17、 /关闭该端口,保证下次为高电平触发 IF(bool0=0)THEN /为 true则可抓取,否则重新发送拍照命令 WaitTime(uint1); GOTO(int0); END_IF RefSys(ref1); /切到用户坐标系下 Lin(rcpe0); /走到 codesys里输出的绝对位置(外部点形式, 端口号 0)BOOLEXTSet(boolfinishget,TRUE); /发送抓取完成标志 WaitTime(uint2); BOOLEXTSet(boolfinishget,FALSE); /关闭抓取完成标志 PTP(ap1); GOTO(int1); /回到循环开始,等待下一个

18、工件 3.2 相对坐标实现范例 Tool(tool0);/若带工具,则先加载好 PTP(ap0); /走到一个安全位置点 Lin(cp3);/走到标准抓取位置(工件处于标准位置时机器人的抓取位姿,提前示教好) WaitTime(uint3); BOOLEXTSet(boolbasepos,TRUE);/端口号为 2,读取当前位置作为标准抓取位置 WaitTime(uint4); 上海新时达机器人有限公司 BOOLEXTSet(boolbasepos,FALSE);/关闭该端口 /以上为获得标准抓取位置需要的步骤 PTP(ap0);/回到安全点 LP:int0; BOOLEXTSet(boolp

19、hoto,TRUE); /发送相机拍照命令,端口号 0 WaitTime(uint0); /等待 PLC处理时间,建议在 300ms以上 bool0:=BOOLEXTRead(boolenableget); /读取抓取标志位 ,为 TRUE则能抓取 BOOLEXTSet(boolphoto,FALSE); /关闭该端口,保证下次为高电平触发 IF(bool0=0)THEN /为 true则可抓取,否则重新发送拍照命令 WaitTime(uint1); GOTO(int0); END_IF Lin(rcpe1); /走到 codesys里输出的绝对位置(外部点形式,该位置是机器人当前位置加上相对

20、偏移, 端口号 1) BOOLEXTSet(boolfinishget,TRUE); /发送抓取完成标志 WaitTime(uint2); BOOLEXTSet(boolfinishget,FALSE); /关闭抓取完成标志 PTP(ap1); GOTO(int1); /回到循环开始,等待下一个工件 康耐视相机操作 使用说明书 四、 Codesys 逻辑开发 4.1 Socket 通信开发 首先,要在 codesys 上完成 socket 通讯开发。通讯开发的要点包括协议类型、协议数据、数据收发、逻辑判断等。 一般的相机都是支持 TCP/IP 协议的,我们也多是采用该协议完成 step 控制器

21、与各类相机的通讯连接及数据交互的。一般来说,机器人控制器作为主机 server(服务器),相机处理器作为从机 client(客户端)。控制器作为主机的好处在于,控制器“知道”自己什么时候需要拍照、需要数据,此时给相机发送命令即可。相机作为客户端始终处于监听状态。主机控制器的 IP 地址为 192.168.39.220,端口号任意,如取为 9876,用网线与相机控制器相连,在 完成相机与控制器的通信数据格式设定后,接下来就是 codesys 端编程实现。 通信示例说明: CASE step OF 0: SAddr.sAddr := 192.168.39.120;/服务器地址 server(xEn

22、able:=TRUE,ipAddr:=SAddr,uiPort:=9876);/建立服务器 IF(server.xBusy = TRUE) THEN connect(xEnable:=server.xBusy,hServer:=server.hServer);/连接 IF(connect.xActive = TRUE) THEN/连接成功 step := 1;/执行接收数据 END_IF IF(connect.xError = TRUE)THEN/连接报错 step := 3;/复位 END_IF END_IF IF(server.xError = TRUE)THEN step := 3; E

23、ND_IF /从相机传过来的数据以 ASCII 码的形式存储到 recvokcr 数组 ,数组的第一位存储的是串行数据输出中设定的首位 /例如设定的整数位为 1,小数位为 1,当相机发送一个 1.0 时, 用 BYTE 型 recvokcr 数组“ 1.0回车( CR)”对应的 ASCII 码“ 49“,” 62“,” 48“,” 13“ 1: size1 := SIZEOF(recvokcr);/数组长度 precv := ADR(recvokcr);/数组地址 recv(xEnable:=TRUE,hConnection:=connect.hConnection,szSize:=size1

24、,pData:=precv);/接收数据 IF(recv.szCount7) THEN/判断是否收到数据输出,这里的数字应小于数据总长度 step:=5;/数据处理 END_IF IF recv.xError THEN/接收数据报错 上海新时达机器人有限公司 step:=3; END_IF /以 ASCII 码的形式从 senddata 数组传给相机,给相机发送“ M 回车( CR)”命令可以采集一张图片 2: size2 := SIZEOF(senddata);/数组长度 senddata0:=16#4D;/M 的 ASCII 码 , 16 进制表示 ,是单次测量的指令 。 senddata

25、1:=16#0D;/回车( CR)的 ASCII 码, 16 进制表示 (欧姆龙相机用 MCR 来发送数据 ) psend := ADR(senddata);/指令地址 send(xExecute:=TRUE,hConnection:=connect.hConnection,szSize:=size2,pData:=psend,udiTimeOut:=1000000); IF(send.xDone = TRUE) THEN/发送成功 send(xExecute:=FALSE);/函数复位 step := 1; END_IF IF(send.xError = TRUE) THEN/发送报错 se

26、nd(xExecute:=FALSE); step := 3; END_IF 5: /数据处理程序 3: /复位后返回 connect(xEnable:=FALSE); server(xEnable:=FALSE); recv(xEnable:=FALSE,hConnection:=connect.hConnection,szSize:=size,pData:=precv); step := 99; 99: step:=0; END_CASE 注意,多数 socket 函数都是上升沿执行,所以在调用后,应在合适的地方将其关闭(给下降沿),这样下一周期执行时才会继续生效。否则可能造成函数执行无效

27、,程序死循环卡死在某一步、或者报错处理。 4.2 外部点数据处理 在步骤 1.1 通过 socket 实现控制器与相机的通信连接及数据收发处理 后,本步骤主要完成与 HMI 的命令收发处理以及外部 cpe 点位置计算与返回。 完整流程逻辑如下: /获取示教器输入 GetHMIBOOL(Enable := TRUE,PortNumber := 0,Data = ReqGet); /获取拍照命令 GetHMIBOOL(Enable := TRUE,PortNumber := 1,Data = FinishGet); /获取完成抓取命令 GetHMIBOOL(Enable := TRUE,PortN

28、umber := 2,Data = BasePosGet); /获取标准抓取位置命令 /(*获取标准抓取位置(当前通过 IO 语句发送命令实现,端口号为 2) *) 康耐视相机操作 使用说明书 IF (BasePosGet = TRUE AND (BasePosCount = 0) THEN BasePosCount := 1; ReadRefSys(Enable := TRUE,RefSys = RefSys_qz); /注意, ReadRefSys 读出来的当前坐标系的 ABC 为弧度,需要转换为角度 RefSys_qz.a := RefSys_qz.a * R2D; RefSys_qz.

29、b := RefSys_qz.b * R2D; RefSys_qz.c := RefSys_qz.c * R2D; ReadTCPData(Enable := TRUE,RefSys := RefSys_qz,CartPos =BasePos); /注意, 当前读取用户坐标系下的位置值 END_IF IF BasePosGet = FALSE THEN BasePosCount := 0; END_IF /(*请求相机数据并计算抓取外部点 与通讯部分分开使用, 通过标志符确定是否获取数据成功 *) rtrig(CLK :=TakePhoPLC); IF rtrig.Q = TRUE THEN

30、TakePhoPLC := FALSE; / baseTCP 为 标准抓取位置 baseTCP.x := BasePos.x; baseTCP.y := BasePos.y; baseTCP.z := BasePos.z; baseTCP.a := BasePos.a*D2R; baseTCP.b := BasePos.b*D2R; baseTCP.c := BasePos.c*D2R; / Tpos 为 相机输出数据 Tpos.x := server.Pos_x; Tpos.y := server.Pos_y; Tpos.z := 0; Tpos.a := 0; Tpos.b := 0; T

31、pos.c := server.Pos_c*D2R; / 以下过程为坐标变换,将相机坐标系下的角度 theta 转换到用户坐标系下 FB_Cartpos2Homomatrix_0(SR_RefSys_0 := baseTCP); baseTCP_homomatrix := FB_Cartpos2Homomatrix_0.Ref_Homomatrix; FB_Cartpos2Homomatrix_1(SR_RefSys_0 := Tpos); basecamera_homomatrix := FB_Cartpos2Homomatrix_1.Ref_Homomatrix; FB_MulHomoma

32、trix_0(homomatrix_1 := basecamera_homomatrix, homomatrix_2 := baseTCP_homomatrix); T0TCP := FB_MulHomomatrix_0.homomatrix_out; (* change to xyzabc*) 上海新时达机器人有限公司 FB_Homomatrix2Cartpos_0(Ref_Homomatrix := T0TCP, SR_RefSys_0 = SR_test); FB_Homomatrix2Cartpos_0(Ref_Homomatrix := T0TCP, SR_RefSys_0 = SR

33、_RefSys_0); SR_RefSys_0.a := SR_RefSys_0.a * R2D; SR_RefSys_0.b := SR_RefSys_0.b * R2D; SR_RefSys_0.c := SR_RefSys_0.c * R2D; /绝对坐标输出,端口号 0 EXTPos.x:=server.Pos_x; / x 和 y 值用相机输出数据 EXTPos.y:=server.Pos_y; EXTPos.z:=BasePos.z; / z、 a、 b 用标准抓取位置值 EXTPos.a:=BasePos.a; EXTPos.b:=BasePos.b; EXTPos.c:= SR

34、_RefSys_0.c; /theta 用转换过的角度 SetCartPos(Enable:=TRUE,PortNumber:=0,RobotCartPos:=EXTPos); /相对坐标输出,端口号 1 EXTPos_1.x:=BasePos.x + server.Pos_x; EXTPos_1.y:=BasePos.y + server.Pos_y; EXTPos_1.z:=BasePos.z; EXTPos_1.a:=BasePos.a; EXTPos_1.b:=BasePos.b; EXTPos_1.c:=SR_RefSys_0.c; EXTPos_1.mode := 0; SetCa

35、rtPos(Enable:=TRUE,PortNumber:=1,RobotCartPos:=EXTPos_1); /发送允许抓取命令 EnableGet := TRUE; END_IF IF FinishGet THEN EnableGet := FALSE; END_IF /输出到示教器的数据 ,告诉示教器可以抓取 SetHMIBOOL(Enable := TRUE,PortNumber := 0, Data := EnableGet); 注意 : 1) EnableGet 变量要设置为 GVL 全局变量,否则示教器会出现数据收发延迟、造成逻辑错乱的情况 。 2) 每次在更换了检测模型时,

36、一定要注意保存和运行作业任务 ,然后将软件进入联机模式,这样相机和机器人收发数据才会成功 。 3) 在建立用户坐标系时,要使用带原点的三点法示教,原点为校准方格的原点, X轴和 Y 轴方向 均要同校准方格方向相同。 4) 机器人程序每次在 LP 语句之间循环 , 机器人不运动 ,检查检测部件是否超出相机的视野范围 和一些 Bool 语句是否给它下降沿信号了。 康耐视相机操作 使用说明书 五、 细节说明 1. 视觉开关的关键点在于 socket 通信的稳定性和相机数据的转换。对于前者,必须保证 socket通信程序逻辑无明显漏洞,防止 case 语句存在死循环; 2. 通信数据的处理: 康耐视

37、发送的是 ASCII 码,需要转换成浮点型位置数据; 3. 位置数据的处理:一般采用外部 cpe 点来发送位置数据, cpe 点的数据计算在 codesys 里完成。需要注意的是, cpe 点的 mode 请慎重,一般情况下为 0,但是具体和机器人所处位形有关和控制器和相机 IP 一样,始终以控制器 IP 为主机进行测试; 6. 如果要直接连相机,调试相机通信逻辑,可临时将相机改为主机, PC 机与相机 IP 在同一段内,通过调试工具连接相机,发送指令数据进行测试; 7. 使用 socket 相关函数需要在工程 library manager 里安装相关库,主要有 CAA NetBaseSrv,SysSocket 和 SysMem; 8. 关于绝对坐标与相对坐标两种支持方式, 各有优缺点。 绝对坐标需要 使用 三点法示教用户坐标系, 靠相机获得的 X 和 Y 位置 存在一定的误差。 而相对坐标给出的全部是相对当前位置的增量, 误差会减小 。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 产品手册

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报