MODOBUS伺服通讯设置
admin
2024-03-16 10:23:46
0

(*********************************【Modbus_Comm_Load参数设置】********************************)
//Modbus_Comm_Load允许组态Modbus_RTU的通讯模块端口
#Modbus_Comm_Load_Instance.REQ := "第一个循环触发" OR #Re_Load_Master;

#Modbus_Comm_Load_Instance(REQ:= #Modbus_Comm_Load_Instance.REQ ,//触发位
                           "PORT":="Local~CM_PtP_RS422_485_HF_1",//CM 端口值,即“硬件 ID
                           BAUD:=57600,//波特率
                           PARITY:=0,//选择奇偶校验
                           FLOW_CTRL:=0,//选择流控制 默认)无流控制                           
                           RTS_ON_DLY:=0,//RTS 接通延迟选择,
                           RTS_OFF_DLY:=0,//RTS 关断延迟选择
                           RESP_TO:=1000,//响应超时
                           DONE=>#Modbus_Comm_Load_Instance.DONE,//完成并且没有错误
                           ERROR=>#Modbus_Comm_Load_Instance.ERROR,//完成出错
                           STATUS=>#Modbus_Comm_Load_Instance.STATUS,//完成出错代码
                           MB_DB:=#Modbus_Master_Instance.MB_DB);

IF #Re_Load_Master = 1 OR "第一个循环触发" THEN
    IF #Modbus_Comm_Load_Instance.ERROR = 0 THEN
        IF #Modbus_Comm_Load_Instance.DONE = 1 THEN
            "流程控制_DB".#基础报警.Alarm_10 := 0;
            #Re_Load_Master := 0;
        END_IF;
    END_IF;
END_IF;

//如果首次参数设置失败则退出MODBUS通讯块。
IF   #Re_Load_Master OR  "第一个循环触发"  OR ("参数设定_DB".穿梭车状态.任务执行中=0 AND "触摸屏使用".维修.维修执行=0)
THEN
    #伺服参数写入 := 1;
    #伺服参数读取 := 0;
    #W_DATA := 0;
    #伺服读取无措完成 := 0;
    #伺服读取无措完成 := 0;
    #伸缩伺服动作开始 := 0;
    RETURN;
END_IF;

(**************************************行走伺服参数设定**********************************)
IF "流程控制_DB".穿梭车状态.M_28 = 1 AND "触摸屏使用".维修.维修执行=0 THEN
    
    IF #伺服读取无措完成 = 1 THEN
        #伺服参数写入 := 1;
        #伺服读取无措完成 := 0;
    ELSIF #伺服写入无措完成 = 1 THEN
        #伺服参数读取 := 1;
        #伺服写入无措完成 := 0;
        IF #W_DATA < 10 THEN
            #W_DATA := #W_DATA + 1;
        END_IF;
    END_IF;
    
    
    
 //Modobus站地址
    #Modbus_Master_Instance.MB_ADDR := 1;
    (*MODBUS地址*)
    #Modbus_Master_Instance.DATA_ADDR := 40275;
    (*写入长度*)
    #Modbus_Master_Instance.DATA_LEN := 4;
    
 IF #伺服参数写入 = 1 THEN
     //模式选择: 指定请求类型(0读取、1写入或诊断)C
     #Modbus_Master_Instance.MODE := 1;
     
     IF "速度计算_DB".状态方向 <> 0 AND "参数设定_DB".穿梭车状态.任务执行中 <> 0
     THEN
         IF "速度计算_DB".状态方向 = 1 THEN
             "Master_Data_W".M_Data[2] := 0;//前进
             "Master_Data_W".M_Data[1] := DINT_TO_WORD("速度计算_DB".转换值);
             #伺服写入参数准备OK := 1;
         ELSIF "速度计算_DB".状态方向 = 2 THEN
             "Master_Data_W".M_Data[2] := -1;//后退
             "Master_Data_W".M_Data[1] := DINT_TO_WORD(- "速度计算_DB".转换值);
             #伺服写入参数准备OK := 1;
         END_IF;
     ELSE
         "Master_Data_W".M_Data[2] := 0;
         "Master_Data_W".M_Data[1] := 0;
     END_IF;
     
ELSIF #伺服参数读取 = 1 THEN
 #Modbus_Master_Instance.MODE := 0;
 END_IF;
END_IF;


(*************************************伸缩伺服参数设定**********************************)

IF "流程控制_DB".穿梭车状态.M_28 = 0 (*AND "流程控制_DB".当前任务判断 <> 0 *)OR "触摸屏使用".维修.维修执行=1 THEN
    
    IF #伺服写入无措完成 = 1 THEN
        #伺服参数读取 := 1;
    END_IF;
    
//用于初始化 #伺服写入无措完成 信号    
    IF #伸缩伺服动作开始 = 0 THEN
        #伺服写入无措完成 := 0;
        #伸缩伺服动作开始 := 1;
    END_IF;
    
    //Modobus站地址
    #Modbus_Master_Instance.MB_ADDR := 2;
    #Modbus_Master_Instance.DATA_ADDR := 41295;
    #Modbus_Master_Instance.DATA_LEN := 2;
    
    IF #伺服写入无措完成 = 1 AND "流程控制_DB".穿梭车状态.MA_05 = 1(*复位*) THEN
        #伺服写入无措完成 := 0;
    END_IF;

    IF ("流程控制_DB".穿梭车状态.MA_14 = 1 OR "流程控制_DB".穿梭车状态.MA_15 = 1 OR
        "流程控制_DB".穿梭车状态.MA_16 = 1 OR "流程控制_DB".#伸缩臂控制.M_07 = 1 OR
        "流程控制_DB".#伸缩臂控制.M_01 = 1 OR "流程控制_DB".#伸缩臂控制.M_02 = 1 OR
        "流程控制_DB".#伸缩臂控制.M_03 = 1 OR "流程控制_DB".#伸缩臂控制.M_04 = 1 OR
        "流程控制_DB".#伸缩臂控制.M_05 = 1 OR "流程控制_DB".#伸缩臂控制.M_06 = 1 OR
        "流程控制_DB".#伸缩臂控制.M_15 = 1 OR "流程控制_DB".#伸缩臂控制.M_16 = 1 )AND
        #伺服写入无措完成=0 AND "流程控制_DB".流程类报警.Alarm_总=0
    THEN
        #伺服写入参数准备OK := 1;
    END_IF;
    
    IF    #伺服写入参数准备OK=1 AND "Master_Data_W".M_Data[1]<>0 THEN
        #Modbus_Master_Instance.MODE := 1;
        #伺服参数写入 := 1;
    ELSE
        #Modbus_Master_Instance.MODE := 0;
    END_IF;
    
    IF #伺服写入无措完成 = 0 AND  "流程控制_DB".流程类报警.Alarm_总=0 THEN
        IF  "流程控制_DB".#伸缩臂控制.M_02 = 1 THEN
            "Master_Data_W".M_Data[1] := 2;
            
        ELSIF  "流程控制_DB".#伸缩臂控制.M_04 = 1 THEN
            "Master_Data_W".M_Data[1] := 3;
        ELSIF "流程控制_DB".#伸缩臂控制.M_01 = 1 THEN
            "Master_Data_W".M_Data[1] := 4;
        ELSIF "流程控制_DB".#伸缩臂控制.M_03 = 1 THEN
            "Master_Data_W".M_Data[1] := 5;
        ELSIF "流程控制_DB".#伸缩臂控制.M_05 = 1 OR "流程控制_DB".穿梭车状态.MA_14 = 1 THEN
            "Master_Data_W".M_Data[1] := 6;
        ELSIF "流程控制_DB".#伸缩臂控制.M_06 = 1 OR "流程控制_DB".穿梭车状态.MA_15 = 1  THEN
            "Master_Data_W".M_Data[1] := 7;
        ELSIF "流程控制_DB".穿梭车状态.MA_16 = 1 OR "流程控制_DB".#伸缩臂控制.M_07 = 1 THEN
            "Master_Data_W".M_Data[1] := 1;
        END_IF;
    END_IF;

    IF #伺服写入无措完成 AND "Master_Data_W".M_Data[1] + 20000 = "Master_Data_R".M_Data[1] THEN
        IF "流程控制_DB".#伸缩臂控制.M_01 = 1 THEN
            "流程控制_DB".#伸缩臂控制.M_08 := 1;
            "Master_Data_W".M_Data[1] := 0;
            #伺服写入无措完成 := 0;
        ELSIF "流程控制_DB".#伸缩臂控制.M_02=1 THEN
            "流程控制_DB".#伸缩臂控制.M_09 := 1;
            "Master_Data_W".M_Data[1] := 0;
            #伺服写入无措完成 := 0;
        ELSIF "流程控制_DB".#伸缩臂控制.M_03=1 THEN
            "流程控制_DB".#伸缩臂控制.M_10 := 1;
            "Master_Data_W".M_Data[1] := 0;
            #伺服写入无措完成 := 0;
        ELSIF "流程控制_DB".#伸缩臂控制.M_04=1 THEN
            "流程控制_DB".#伸缩臂控制.M_11 := 1;
            "Master_Data_W".M_Data[1] := 0;
            #伺服写入无措完成 := 0;
        ELSIF "流程控制_DB".#伸缩臂控制.M_05=1 THEN
            "流程控制_DB".#伸缩臂控制.M_12 := 1;
            "Master_Data_W".M_Data[1] := 0;
            #伺服写入无措完成 := 0;
        ELSIF "流程控制_DB".#伸缩臂控制.M_06=1 THEN
            "流程控制_DB".#伸缩臂控制.M_13 := 1;
            "Master_Data_W".M_Data[1] := 0;
            #伺服写入无措完成 := 0;
        ELSIF "流程控制_DB".#伸缩臂控制.M_07=1 THEN
            "流程控制_DB".#伸缩臂控制.M_14 := 1;
            "Master_Data_W".M_Data[1] := 0;
            #伺服写入无措完成 := 0;
            

        ELSIF  "流程控制_DB".穿梭车状态.MA_14=1 THEN
            "流程控制_DB".#伸缩臂控制.M_09 := 1;
             "流程控制_DB".穿梭车状态.MA_14 := 0;
             "Master_Data_W".M_Data[1] := 0;
             #伺服写入无措完成 := 0;
        ELSIF  "流程控制_DB".穿梭车状态.MA_15=1 THEN
            "流程控制_DB".#伸缩臂控制.M_11 := 1;
             "流程控制_DB".穿梭车状态.MA_15 := 0;
             "Master_Data_W".M_Data[1] := 0;
             #伺服写入无措完成 := 0;
        ELSIF  "流程控制_DB".穿梭车状态.MA_16 =1 THEN
            "流程控制_DB".#伸缩臂控制.M_14 := 1;
            "流程控制_DB".穿梭车状态.MA_16 := 0;
            "Master_Data_W".M_Data[1] := 0;
            #伺服写入无措完成 := 0;
        END_IF;
    END_IF;
END_IF;


(*************************************伺服参数写入和读取设定**********************************)

(*****【Modbus_Master 主站通讯-接收调用】******)
IF #Modbus_Master_Instance.MODE = 0 THEN
    #Modbus_Master_Instance(REQ := #伺服参数读取,//触发信号
                            MB_ADDR := #Modbus_Master_Instance.MB_ADDR,//访问的从站地址
                            MODE := #Modbus_Master_Instance.MODE,//与“DATA_ADDR”参数一起决定 Modbus 功能码为
                            DATA_ADDR := #Modbus_Master_Instance.DATA_ADDR,//Modobus地址
                            DATA_LEN := #Modbus_Master_Instance.DATA_LEN,//数据长度为  
                            DONE => #Modbus_Master_Instance.DONE,//无错误完成脉冲
                            BUSY => #Modbus_Master_Instance.BUSY,//繁忙
                            ERROR => #Modbus_Master_Instance.ERROR,//有错误完成脉冲
                            STATUS => #Modbus_Master_Instance.STATUS,//错误代码
                            DATA_PTR := "Master_Data_R".M_Data);//数据长度为
END_IF;
    
(*****【Modbus_Master 主站通讯-发送调用】******)
//写入行走伺服参数
IF #Modbus_Master_Instance.MODE = 1 THEN
    #Modbus_Master_Instance(REQ := #伺服参数写入,//触发信号
                            MB_ADDR := #Modbus_Master_Instance.MB_ADDR,//访问的从站地址
                            MODE := #Modbus_Master_Instance.MODE,//与“DATA_ADDR”参数一起决定 Modbus 功能码为
                            DATA_ADDR := #Modbus_Master_Instance.DATA_ADDR,//Modobus地址
                            DATA_LEN := #Modbus_Master_Instance.DATA_LEN,//数据长度为  
                            DONE => #Modbus_Master_Instance.DONE,//无错误完成脉冲
                            BUSY => #Modbus_Master_Instance.BUSY,//繁忙
                            ERROR => #Modbus_Master_Instance.ERROR,//有错误完成脉冲
                            STATUS => #Modbus_Master_Instance.STATUS,//错误代码
                            DATA_PTR := "Master_Data_W".M_Data);//数据长度为   
END_IF;

//判断伺服完成情况
IF #Modbus_Master_Instance.BUSY = 0 AND #Modbus_Master_Instance.ERROR = 0 THEN
    IF #Modbus_Master_Instance.DONE = 1 AND #伺服参数写入= 1 THEN
        #伺服参数写入 := 0;
        #伺服写入参数准备OK := 0;
        #伺服写入无措完成 := 1;
        "流程控制_DB".#基础报警.Alarm_11 := 0;
    ELSIF #Modbus_Master_Instance.DONE = 1 AND #伺服参数读取 = 1 THEN
        #伺服参数读取 := 0;
        #伺服读取无措完成 := 1;
        "流程控制_DB".#基础报警.Alarm_11 := 0;
    END_IF;
END_IF;

上一篇:linux上部署java环境

下一篇:JSTL 标签库

相关内容

热门资讯

怎么解除订阅安卓系统,安卓系统... 你是不是也和我一样,手机里订阅了好多服务,结果现在想解除订阅,却一头雾水?别急,今天就来手把手教你如...
安卓系统停用怎么开启,轻松恢复... 亲爱的手机控们,你是否曾经遇到过安卓系统突然停用的情况,让你手忙脚乱,不知所措?别担心,今天就来教你...
安卓系统电池健康度,电池健康度... 你有没有发现,你的安卓手机最近是不是有点儿不给力了?电池续航能力大不如前,充电速度也慢了不少?别急,...
安卓系统按键怎么截图,安卓系统... 你是不是也和我一样,有时候想截个图分享给朋友,却发现安卓手机的截图功能有点神秘呢?别急,今天就来手把...
购票系统安卓源代码,架构设计与... 你有没有想过,那些我们每天离不开的购票系统,它们背后的秘密是什么呢?今天,就让我带你一探究竟,揭开购...
安卓手机系统后台测试,深度解析... 你有没有发现,你的安卓手机后台总是悄悄地忙碌着?别小看了这些后台程序,它们可是手机系统稳定运行的关键...
安卓系统重启的图标,解锁设备新... 手机突然重启,是不是心里有点慌?别急,今天就来和你聊聊安卓系统重启的图标,让你一眼就能认出它,再也不...
车载智慧屏安卓系统,智能出行新... 你有没有发现,现在的车载智慧屏越来越智能了?尤其是那些搭载了安卓系统的,简直就像是个移动的小电脑,不...
安卓系统连上网权限,解锁设备无... 你有没有发现,你的安卓手机里有些应用总是偷偷连上网?别小看这个小小的网络权限,它可是能影响你隐私、消...
安卓谷歌操作系统,探索安卓谷歌... 你知道吗?在智能手机的世界里,有一个操作系统可是无人不知、无人不晓,那就是安卓谷歌操作系统。它就像一...
安卓系统手写%怎样调出,具体实... 你有没有遇到过这种情况:在使用安卓手机的时候,突然想用手写输入法来记录一些灵感或者重要信息,可是怎么...
安卓手机重置 系统设置,轻松恢... 手机用久了是不是感觉卡顿得厉害?别急,今天就来教你怎么给安卓手机来个大变身——重置系统设置!想象你的...
win如何安装安卓系统,Win... 哇,你有没有想过,让你的Win系统也能玩转安卓应用?没错,就是那种在手机上轻松自如的安卓系统,现在也...
苹果qq和安卓系统,跨平台体验... 你有没有发现,现在手机市场上,苹果和安卓的较量可是越来越激烈了呢!咱们就来聊聊这个话题,看看苹果QQ...
显示最好的安卓系统,探索最新旗... 你有没有想过,为什么安卓系统那么受欢迎呢?它就像一个魔法盒子,里面装满了各种神奇的魔法。今天,就让我...
安卓app怎么降级系统,系统版... 你有没有发现,有时候安卓手机的系统更新后,新功能虽然炫酷,但老系统用起来更顺手呢?别急,今天就来教你...
雷军脱离安卓系统,引领科技变革... 你知道吗?最近科技圈可是炸开了锅,因为我们的雷军大大竟然宣布要脱离安卓系统,这可真是让人大跌眼镜啊!...
安卓系统自动开网络,安卓系统自... 你有没有发现,手机里的安卓系统有时候会自动开启网络连接,这可真是让人又爱又恨啊!有时候,你正专心致志...
安卓系统怎样控制后台,因为服务... 手机里的安卓系统是不是感觉越来越卡了?后台程序太多,不仅耗电还影响性能。别急,今天就来教你怎么巧妙地...
安卓系统打游戏推荐,一触即达! 你有没有发现,现在手机游戏越来越好玩了?不管是休闲小游戏还是大型MMORPG,都能在手机上畅玩。但是...