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 标签库

相关内容

热门资讯

ios系统切换安卓系统还原,还... 你有没有想过,有一天你的手机从iOS系统切换到了安卓系统,然后再从安卓系统回到iOS系统呢?这听起来...
灵焕3装安卓系统,引领智能新体... 你知道吗?最近手机圈里可是掀起了一股热潮,那就是灵焕3这款神器的安卓系统升级。没错,就是那个曾经以独...
安卓系统指南针软件,探索未知世... 手机里的指南针功能是不是让你在户外探险时倍感神奇?但你知道吗,安卓系统中的指南针软件可是大有学问呢!...
华为是不用安卓系统了吗,迈向自... 最近有个大新闻在科技圈里炸开了锅,那就是华为是不是不再使用安卓系统了?这可不是一个简单的问题,它涉及...
安卓系统热点开启失败,排查与解... 最近是不是你也遇到了安卓系统热点开启失败的小麻烦?别急,让我来给你详细说说这个让人头疼的问题,说不定...
小米max2系统安卓,安卓系统... 你有没有听说过小米Max2这款手机?它那超大的屏幕,简直就像是个移动的电脑屏幕,看视频、玩游戏,那叫...
电池健康怎么保持安卓系统,优化... 手机可是我们生活中不可或缺的好伙伴,而电池健康度就是它的生命力。你有没有发现,随着使用时间的增长,你...
安卓手机怎么调系统颜色,安卓手... 你有没有发现,你的安卓手机屏幕颜色突然变得不那么顺眼了?是不是也想给它换换“脸色”,让它看起来更有个...
安卓系统清粉哪个好,哪款清粉工... 手机用久了,是不是觉得卡得要命?别急,今天就来聊聊安卓系统清理垃圾哪个软件好。市面上清理工具那么多,...
华为被限制用安卓系统,挑战安卓... 你知道吗?最近科技圈可是炸开了锅!华为,这个我们耳熟能详的名字,竟然因为一些“小插曲”被限制了使用安...
安卓系统是不是外国,源自外国的... 你有没有想过,我们每天离不开的安卓系统,它是不是外国货呢?这个问题听起来可能有点奇怪,但确实很多人都...
安卓系统缺少文件下载,全面解析... 你有没有发现,用安卓手机的时候,有时候下载个文件真是让人头疼呢?别急,今天就来聊聊这个让人烦恼的小问...
kktv系统刷安卓系统怎么样,... 你有没有听说最近KKTV系统刷安卓系统的事情?这可是个热门话题呢!咱们一起来聊聊,看看这个新玩意儿到...
安卓系统连接电脑蓝牙,操作指南... 你有没有遇到过这种情况:手机里堆满了各种好用的应用,可就是想找个方便快捷的方式,把手机里的音乐、照片...
安卓车机11.0系统包,智能驾... 你有没有发现,最近你的安卓车机系统好像悄悄升级了呢?没错,就是那个安卓车机11.0系统包!这可不是一...
安卓系统最高到多少,从初代到最... 你有没有想过,你的安卓手机系统升级到哪一步了呢?是不是好奇安卓系统最高能到多少呢?别急,今天就来带你...
手机系统安卓和ios系统下载地... 你有没有发现,现在手机的世界里,安卓和iOS两大系统就像是一对双胞胎,各有各的特色,让人爱不释手。今...
安卓系统最早开发公司,从安卓起... 你有没有想过,我们每天离不开的安卓系统,它究竟是由哪家公司最早开发的呢?没错,就是谷歌(Google...
安卓系统平板推荐学生用,学生适... 作为一名热爱学习的学生,你是不是也在寻找一款既实用又好用的平板电脑呢?平板电脑在学习和生活中可是个得...
安卓5.0系统多大容量,存储容... 你有没有想过,你的安卓手机里那个神秘的安卓5.0系统到底有多大容量呢?别急,今天就来给你揭秘这个谜团...