博图Modbus组态及参数设定源码

news2024/11/20 1:26:49

1、组态选择 协议为Modbus,可在程序里设置通讯方式

2、参数初始化设置

3、选择伺服Modbus 地址

 

4、写入负值,两个字都必须是负值

5、接线方式 

伺服端:驱动器通过通讯连接器与计算机相连,使用者可利用 MODBUS 通讯结合汇编语言来操作驱动器,或 PLC、 HMI。我们提供两种常用通讯界面:(1) RS-232 ; (2) RS-485。 RS-232 供操作软件 “Lexium23 Plus CT”使用,通讯距离大约 15 米。选择使用RS-485,可达较远的传输距离,且支持多组驱动器同时联机能力。

串口端:接4 RS-485+ /11 RS-485- / 8接地信号

 

 6、参数设定程序源码

//状态值设定
"速度计算_DB".当前位置:="PositionValue";
//"当前条码值":="PositionValue";
//"当前条码速度" := "VelocityValue";
//"读码器状态值" := "StatusAndControl";

//运行过程中提升机丢失
IF ("速度计算_DB".目的位置 = "基础参数".Coordinate[3, 0, 1] AND "流程控制_DB".穿梭车状态.M_28 = 1 OR
    #穿梭车状态.定位到提升机 = 1) THEN
    IF #穿梭车状态.提升机当前层 <> "基础参数".warehouse.当前所在层 OR "流程控制_DB".基础报警.Alarm_6 = 1
        OR "接收提升机的数据".提升当前层 <>"基础参数".warehouse.当前所在层 OR "接收提升机的数据".提升机有故障 <> 0
        OR ("接收提升机的数据".停准信号 = 0 AND "PositionValue" <= "基础参数".Coordinate[3, 1, "基础参数".warehouse.当前所在层])
     //   OR "接收提升机的数据".开启机构开到位=0 OR "接收提升机的数据".开启机构关到位=1
    THEN
        "流程控制_DB".基础报警.Alarm_15 := 1;
    END_IF;
END_IF;

(**********************************************  报警信息反馈  *******************************************************)
//提升机与穿梭车在同层的情况下
IF "基础参数".warehouse.当前所在层 <> 0 AND
    "接收提升机的数据".提升当前层 = "基础参数".warehouse.当前所在层 AND
    #穿梭车状态.提升机当前层 = "基础参数".warehouse.当前所在层
    
THEN
    IF "速度计算_DB".当前位置 > 22460 THEN
        "流程控制_DB".#流程类报警.Alarm_28 := 1;
    ELSE
        "流程控制_DB".#流程类报警.Alarm_28 := 0;
    END_IF;
END_IF;

//提升机与穿梭车在不同层的情况下
IF ("接收提升机的数据".提升当前层 <> "基础参数".warehouse.当前所在层 OR
    #穿梭车状态.提升机当前层 <> "基础参数".warehouse.当前所在层) AND
    #穿梭车状态.穿梭车在提升机内 = 0
THEN
    IF "速度计算_DB".当前位置 > "速度计算_DB".前极限位置 THEN
        "流程控制_DB".#流程类报警.Alarm_28 := 1;
    ELSE
        "流程控制_DB".#流程类报警.Alarm_28 := 0;
    END_IF;
END_IF;


IF "速度计算_DB".当前位置 < "速度计算_DB".后极限位置 THEN
    "流程控制_DB".#流程类报警.Alarm_29 := 1;
ELSE
    "流程控制_DB".#流程类报警.Alarm_29 := 0;
END_IF;


//"WCS_Read".小车错误代码ID := 0;
FOR #F01 := 1 TO 50  DO
    IF "故障列表".Alram[#F01] <> 0 AND "时钟脉冲处理_DB".脉冲输出[7] = 1 THEN
        "WCS_Read".小车错误代码ID := 0;
        "WCS_Read".小车错误代码ID := #F01;
    END_IF;
END_FOR;

(********************************************  判断排列层数值是否非0  ***********************************************)

IF "基础参数".warehouse.总排数 = 0 OR "基础参数".warehouse.总列数 = 0 OR "基础参数".warehouse.总层数 = 0
    OR "基础参数".warehouse.当前所在层 =0  OR "接收提升机的数据".提升当前层 = 0 THEN
    "流程控制_DB".#基础报警.Alarm_1:=1;
    RETURN;
END_IF;

(********************************************  计算穿梭车当前列   ***********************************************)
"基础参数".warehouse.当前所在排 := 3;
#A01 := "基础参数".warehouse.当前所在排;
//计算穿梭车当前列
IF "基础参数".warehouse.当前所在排 <> 0 AND "基础参数".warehouse.当前所在层 <> 0 THEN
    FOR #F01 := 1 TO "基础参数".warehouse.总层数 DO
        FOR #F02 := 0 TO "基础参数".warehouse.总列数 DO
            IF "基础参数".warehouse.当前所在层 = #F01 THEN
                IF "速度计算_DB".当前位置 < "基础参数".Coordinate[#A01, #F02, #F01]+100 AND
                    "速度计算_DB".当前位置 > "基础参数".Coordinate[#A01, #F02, #F01]-100 THEN
                    "基础参数".warehouse.当前所在列 := #F02;
                END_IF;
            END_IF;
        END_FOR;
    END_FOR;
END_IF;

(********************************************  穿梭车定位到附近货位  ***********************************************)

IF "触摸屏使用".半自动.货位定位 = 1 THEN
    FOR #F01 := 0 TO "基础参数".warehouse.总列数 DO
        IF "速度计算_DB".当前位置 + 200 > "基础参数".Coordinate["基础参数".warehouse.当前所在排, #F01, "基础参数".warehouse.当前所在层]
            & "速度计算_DB".当前位置 - 200 < "基础参数".Coordinate["基础参数".warehouse.当前所在排, #F01, "基础参数".warehouse.当前所在层]
        THEN
            "速度计算_DB".目的位置 := "基础参数".Coordinate["基础参数".warehouse.当前所在排, #F01, "基础参数".warehouse.当前所在层];
            IF "速度计算_DB".当前位置 < "基础参数".Coordinate["基础参数".warehouse.当前所在排, #F01, "基础参数".warehouse.当前所在层]
            THEN
                "触摸屏使用".半自动.前进标识 := 1;
                "触摸屏使用".半自动.后退标识 := 0;
            ELSIF "速度计算_DB".当前位置 > "基础参数".Coordinate["基础参数".warehouse.当前所在排, #F01, "基础参数".warehouse.当前所在层]
            THEN
                "触摸屏使用".半自动.后退标识 := 1;
                "触摸屏使用".半自动.前进标识 := 0;
            END_IF;
            IF "速度计算_DB".当前位置 >= "基础参数".Coordinate["基础参数".warehouse.当前所在排, #F01, "基础参数".warehouse.当前所在层] - 2 &
                "速度计算_DB".当前位置 <= "基础参数".Coordinate["基础参数".warehouse.当前所在排, #F01, "基础参数".warehouse.当前所在层] + 2
            THEN
                "触摸屏使用".半自动.货位定位 := 0;
                "流程控制_DB".穿梭车状态.MA_10 := 0;
                "流程控制_DB".穿梭车状态.MA_11 := 0;
                "触摸屏使用".半自动.前进标识 := 0;
                "触摸屏使用".半自动.后退标识 := 0;
            END_IF;
        END_IF;
    END_FOR;
ELSE
    "触摸屏使用".半自动.前进标识 := "流程控制_DB".穿梭车状态.MA_10;
    "触摸屏使用".半自动.后退标识 := "流程控制_DB".穿梭车状态.MA_11;
END_IF;

(********************************************  小车运行的启始位置判断  ***********************************************)
IF #穿梭车状态.任务执行中 = 1 AND #穿梭车状态.穿梭车行驶到位 = 0 AND "行走伺服SPD0" = 0 THEN
    "速度计算_DB".起始位置 := "速度计算_DB".当前位置;
END_IF;
        
        
        
(********************************************  小车行走方向判断  ***********************************************)
IF "流程控制_DB".穿梭车状态.M_27 = 1 THEN
    "速度计算_DB".状态方向 := 0;
    "流程控制_DB".穿梭车状态.M_28 := 0;
END_IF;
IF #穿梭车状态.任务执行中 <> 0 AND #穿梭车状态.穿梭车行驶到位 = 0 THEN
    IF "速度计算_DB".当前位置 - "速度计算_DB".目的位置 > 2
    THEN
        "速度计算_DB".状态方向 := 2;(*后退*)
        "流程控制_DB".穿梭车状态.M_28 := 1;
    ELSIF "速度计算_DB".当前位置 - "速度计算_DB".目的位置 < -2
    THEN
        "速度计算_DB".状态方向 := 1;(*前进*)
        "流程控制_DB".穿梭车状态.M_28 := 1;
    END_IF;
END_IF;
        
        

(********************************************  小车到位判断  ***********************************************)
#穿梭车状态.穿梭车行驶到位 := 0;
IF "速度计算_DB".目的位置 <> 0
THEN
    IF "速度计算_DB".当前位置 >= "速度计算_DB".目的位置 - 2 &
        "速度计算_DB".当前位置 <= "速度计算_DB".目的位置 + 2
    THEN
        #穿梭车状态.穿梭车行驶到位 := 1;
    END_IF;
END_IF;

#Temp[1].S5 := S_ODT(T_NO := "穿梭车到位ON延时", S := #穿梭车状态.穿梭车行驶到位 ,
                     TV := S5T#100MS, R := NOT (#穿梭车状态.穿梭车行驶到位 ),
                     BI => #Temp[1].BI, Q => #Temp[1].Q);

#穿梭车状态.穿梭车停准信号 := #Temp[1].Q;

(*

//穿梭车停准信号
#Temp[1].S5 := S_ODT(T_NO := "穿梭车到位ON延时", S := #穿梭车状态.穿梭车行驶到位,
                     TV := S5T#50MS, R := NOT (#穿梭车状态.穿梭车行驶到位),
                     BI => #Temp[1].BI, Q => #Temp[1].Q);

//穿梭车停准信号
#Temp[2].S5 := S_ODT(T_NO := "穿梭车到位OFF延时", S := NOT (#穿梭车状态.穿梭车行驶到位),
                     TV := S5T#50MS, R := #穿梭车状态.穿梭车行驶到位,
                     BI => #Temp[2].BI, Q => #Temp[2].Q);

IF #Temp[1].Q = 1 THEN
    #穿梭车状态.穿梭车停准信号 := 1;
ELSIF #Temp[2].Q = 1 THEN
    #穿梭车状态.穿梭车停准信号 := 0;
END_IF;
*)

(************************************************  任务完成情况判断  *****************************************)
//定位完成情况
IF "流程控制_DB".穿梭车状态.M_27 = 1 AND #穿梭车状态.任务执行中 = 1 AND #穿梭车状态.穿梭车行驶到位 = 1 AND
    #穿梭车状态.穿梭车停准信号=1
THEN
    IF #穿梭车状态.任务类型暂存 = 1 THEN
        #穿梭车状态.任务类型暂存 := 0;
        #穿梭车状态.任务执行中 := 0;
        "速度计算_DB".状态方向 := 0;
        
        "触摸屏使用".任务暂存.任务目标排 := 0;
        "触摸屏使用".任务暂存.任务目标列 := 0;
        "触摸屏使用".任务暂存.任务目标层 := 0;
    END_IF;
    IF #穿梭车状态.定位到提升机 = 1 OR #穿梭车状态.定位到一列 = 1 THEN
        #穿梭车状态.任务执行中 := 0;
        "速度计算_DB".状态方向 := 0;
        #穿梭车状态.定位到提升机 := 0;
        #穿梭车状态.定位到一列 := 0;
    END_IF;
END_IF;

(************************************************  定位完成发送任务类型  *****************************************)
IF "流程控制_DB".当前任务暂存 <> 0 AND "流程控制_DB".穿梭车状态.M_27 = 1 AND "流程控制_DB".穿梭车状态.M_28 = 0 AND
    #穿梭车状态.穿梭车行驶到位=1 THEN
    IF "触摸屏使用".任务暂存.任务起始排 <> 0  AND "触摸屏使用".任务暂存.任务起始层 <> 0
    THEN
        IF "触摸屏使用".任务暂存.任务起始层 = "基础参数".warehouse.当前所在层 AND
            "触摸屏使用".任务暂存.任务起始列 = "基础参数".warehouse.当前所在列
        THEN
            "流程控制_DB".当前任务判断 := "流程控制_DB".当前任务暂存;
            "流程控制_DB".当前任务暂存 := 0;
            "触摸屏使用".任务暂存.任务起始排 := 0;
            "触摸屏使用".任务暂存.任务起始列 := 0;
            "触摸屏使用".任务暂存.任务起始层 := 0;
        END_IF;
    END_IF;
   // "触摸屏使用".任务暂存.任务目标排 := 3;
    IF "触摸屏使用".任务暂存.任务目标排 <> 0 AND "触摸屏使用".任务暂存.任务目标层 <> 0 AND
        "触摸屏使用".任务暂存.任务起始排=0 AND  "触摸屏使用".任务暂存.任务起始层=0
    THEN
        IF "触摸屏使用".任务暂存.任务目标层 = "基础参数".warehouse.当前所在层 AND
            "触摸屏使用".任务暂存.任务目标列 = "基础参数".warehouse.当前所在列
        THEN
            "流程控制_DB".当前任务判断 := "流程控制_DB".当前任务暂存;
            "流程控制_DB".当前任务暂存 := 0;
            "触摸屏使用".任务暂存.任务目标排 := 0;
            "触摸屏使用".任务暂存.任务目标列 := 0;
            "触摸屏使用".任务暂存.任务目标层 := 0;
        END_IF;
    END_IF;
END_IF;
    
    

//取货允许和放货允许判断
(*入库任务时*)
IF #穿梭车状态.任务类型暂存 = 10 THEN
    "流程控制_DB".穿梭车状态.M_22 := 0;
    IF "接收提升机的数据".输送机允许取货 <> 0 THEN
        "流程控制_DB".穿梭车状态.M_22 := 1;
    END_IF;
ELSE
    "流程控制_DB".穿梭车状态.M_22 := 1;
END_IF;
(*出库任务时*)
IF #穿梭车状态.任务类型暂存 = 11 THEN
        "流程控制_DB".穿梭车状态.M_23 := 0;
    IF "接收提升机的数据".输送机允许放货 <> 0 THEN
        "流程控制_DB".穿梭车状态.M_23:= 1;
    END_IF;
ELSE
    "流程控制_DB".穿梭车状态.M_23 := 1;
END_IF;


//判断任务-取货完成情况
IF "流程控制_DB".穿梭车状态.M_19 = 1 THEN
    IF #穿梭车状态.任务类型暂存 = 10(*入库任务时需要将取货完成反馈给上位机*) THEN
        "写给提升机的数据".取货完成 := 1;
    END_IF;
    IF "WCS_状态整合".New_Task = 0 THEN
        IF #穿梭车状态.上位机完成任务暂存 <> 0 THEN
            "WCS_Read".TaskID := #穿梭车状态.上位机完成任务暂存;
            #穿梭车状态.上位机完成任务暂存 := 0;
        END_IF;
        #穿梭车状态.任务类型暂存 := 0;
    END_IF;
    #穿梭车状态.任务执行中 := 0;
    "流程控制_DB".当前任务判断 := 0;
    "流程控制_DB".穿梭车状态.M_19 := 0;
END_IF;

//判断任务-放货完成情况
IF "流程控制_DB".穿梭车状态.M_21 = 1 THEN
    IF #穿梭车状态.任务类型暂存 = 11(*入库任务时需要将取货完成反馈给上位机*) THEN
        "写给提升机的数据".放货完成 := 1;
    END_IF;
    IF "WCS_状态整合".New_Task = 0 THEN
        IF #穿梭车状态.上位机完成任务暂存 <> 0 THEN
            "WCS_Read".TaskID := #穿梭车状态.上位机完成任务暂存;
            #穿梭车状态.上位机完成任务暂存 := 0;
        END_IF;
        #穿梭车状态.任务类型暂存 := 0;
    END_IF;

    #穿梭车状态.任务执行中 := 0;
    "流程控制_DB".当前任务判断 := 0;
    "流程控制_DB".穿梭车状态.M_21 := 0;
END_IF;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/62562.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

运放失调电压失调电流,计算输入电压信号大小,设计反向放大器

笔者电子信息专业硕士毕业&#xff0c;获得过多次电子设计大赛、大学生智能车、数学建模国奖&#xff0c;现就职于南京某半导体芯片公司&#xff0c;从事硬件研发&#xff0c;电路设计研究。对于学电子的小伙伴&#xff0c;深知入门的不易&#xff0c;特开次博客交流分享经验&a…

销售抓住客户心理的话术

由于销售会与各种各样的人打交道&#xff0c;因此销售也是最容易洞察客户心理的职业&#xff0c;优秀的销售懂得如何抓住客户的心理&#xff0c;从而挖掘客户的需求和痛点&#xff0c;进一步促进成交。 前言 由于销售会与各种各样的人打交道&#xff0c;因此销售也是最容易洞察…

【NC65】主子表单据按照单表结构展现 节点客开

需求描述: 需要将【采购入库】按照【采购订单关闭】节点的形式展现数据。 客开思路: 功能注册增加功能节点,(40080603)勾选启用。菜单注册增加 菜单 并关联 功能节点(40080603)。初始化 单据模板,查询模板采购入库单主子表汇总VO是PurchaseInViewVO ,系统里其他单据节点 …

MyBatis-Plus之ActiveRecord[基础增删改查操作]

系列文章目录 Mybatis-Plus知识点[MyBatisMyBatis-Plus的基础运用]_心态还需努力呀的博客-CSDN博客 Mybatis-PlusSpringBoot结合运用_心态还需努力呀的博客-CSDN博客MyBaits-Plus中TableField和TableId用法_心态还需努力呀的博客-CSDN博客 MyBatis-Plus中的更新操作&#xf…

应用层之HTTP和HTTPS协议(必备知识)

文章目录1、什么是HTTP协议2、HTTP协议格式<1>HTTP请求方法<2>HTTP的状态码3、HTTP是不保存状态的协议<1>使用Cookie的状态管理3、HTTPS<1>加密方式<2>理解HTTPS加密过程1、什么是HTTP协议 HTTP协议常被称为超文本传输协议&#xff0c;HTTP协议…

国产蓝牙耳机什么牌子好?2022蓝牙耳机品牌排行

随着蓝牙耳机市场的快速发展&#xff0c;国产蓝牙耳机品牌也越来越多。那么在众多的国产蓝牙耳机当中&#xff0c;什么牌子的比较好呢&#xff1f;下面&#xff0c;一起来看看2022蓝牙耳机品牌排行吧。 一、南卡小音舱蓝牙耳机 售价&#xff1a;299 蓝牙&#xff1a;5.3 发…

ADSP-21489的开发详解:VDSP+自己编程写代码开发(4-按键控制 LED 灯)

以上全部都 OK 之后&#xff0c;我们就可以开始跑程序了。&#xff08;抱歉上面几项写的很罗嗦&#xff0c;都是我这近 15 年来开发 ADI DSP 实际项目里碰到问题的经验之谈&#xff0c;希望能够对用户有帮助&#xff09; 跑程序就涉及到了 Visual DSP软件的操作&#xff0c;我…

高校教材征订系统(Java+Web+MySQL)

目 录 ABSTRACT 2 1 概述 5 1.1开发背景 5 1.2 项目提出的意义 5 1.3 系统的开发方法 5 1.4 系统开发工具 6 1.4.1 JSP简介 6 1.4.2 JDK配置 7 1.4.3 数据库简介 8 1&#xff0e;4&#xff0e;4 tomcat配置 9 2 需求分析 11 2.1可行性分析 11 2.2 系统设计的要求 11 2.3 系统功…

01、RabbitMQ入门

目录 1.、什么是MQ 2、应用场景 3、主流MQ框架 4、Docker安装部署RabbitMQ 5、RabbitMQ管理平台 6、MQ的核心概念 单一生产者和单一消费者 7、springboot整合rabbitmq 执行测试方法testRabbitmq&#xff0c;控制台输出&#xff1a;receive msg : test rabbitmq messag…

[附源码]计算机毕业设计时间管理软件appSpringboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Vector-常用CAN工具 - CANoe入门到精通_01

之前有写过相关的CANoe工程配置&#xff0c;不过没有进行系统的介绍&#xff0c;通过各位热心人士的反馈&#xff0c;有些内容无法看懂&#xff0c;因此后续的内容会做好排版&#xff0c;让大家从入门到精通&#xff0c;一次性掌握所有的相关内容。今天就主要来介绍下VN1640/VN…

读vue源码搞懂响应式原理

vue2响应式原理 Vue2是借助Object.defineProperty()实现的&#xff0c;而Vue3是借助Proxy实现的想深入学习 Vue2 的响应式原理, 需要先学习 Object.defineProperty() 方法为了称呼方便, 后续说 Vue 响应式原理统一指 Vue2 的响应式原理 1.Object.defineProperty 方法 - 简介 定…

go实战(1)-hello,world与包基础(1)-模块基础

目录程序结构程序代码使用和建立包建立目录模块参考中的身份验证计算哈希值go.sum文件Checksum database程序结构 声明一个main包(包是对函数进行分组的一种方法&#xff0c;它由同一目录中的所有文件组成)。 导入流行的fmt包&#xff0c;它包含格式化文本的函数&#xff0c;…

WIFI码挪车码创建生成CPS聚合流量主小程序开发

WIFI码挪车码创建生成CPS聚合流量主小程序开发 系统特点// 这不是一套普通的给别人开SAAS账号的CPS推广返利系统&#xff0c;而是一套服务商版的CPS推广返利系统&#xff01;所谓服务商版&#xff0c;就是所有CPS推广走你的渠道接口&#xff0c;除了可以给你的下级客户开账号外…

MySQL下载安装运行

方式1、MySQL 官方网站&#xff1a;http://www.mysql.com 拉到最下面&#xff1a; 方式2、Windows版 MySQL 的官方下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 配置环境变量&#xff1a;在Path中添加至“\bin”&#xff08;系统盘C盘&#xff09;形式 使用管…

【OpenCV 例程 300篇】249. 特征描述之视网膜算法(FREAK)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】249. 特征检测之视网膜算法&#xff08;FREAK&#xff09; 1. FREAK 算法简介 快速视网膜算法&#xff08;FREAK&#xff09;算法是 Alexandre Alahi 在 ICCV 2012 的论文 FREAK: Fast Retina Keyp…

1.32 Cubemx_STM32F429串口中断+空闲中断

1、简介 有时候串口接收数据时,没有帧头与帧尾,单纯使用单字节中断接收数据,不太好断帧。如果单纯使用空闲中断接收数据,当帧内数据不连续或者黏包,使用空闲中断接收就会出现接收的数据小于或者大于帧长度,比较难断帧。解决办法 方法1、单字节中断接收+空闲中断 发送命…

Spring Cache组件

《Spring Cache组件》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《Spring Cache组件》《Spring Cache组件》1. Spring Cache组件概述2. ConcurrentHashMap缓存管理3. Cacheable详解4. Caffeine缓存管理5. 缓存更新策略6. 缓存清除策略7. 多级缓存策略…

[附源码]计算机毕业设计基于Springboot景区直通车服务系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

探究商城中的在线语音谈判功能开发

近年来&#xff0c;电子商务已经成为一种新型的商业形式&#xff0c;电子商务的发展让传统的面对面谈判发展为以互联网为依托的在线沟通&#xff0c;相较于传统的谈判方式&#xff0c;在线语音谈判方式更便捷、更高效&#xff0c;逐渐成为商务谈判的主流&#xff0c;因此该功能…