查看: 3598|回复: 20
收起左侧

[本地IO应用问题] GL10 4DA模块配置——欧姆龙程序-已写成功能块

TOP 2021-11-8 10:53:10 | 显示全部楼层 |阅读模式
邀请回答

马上注册,享受更多特权

您需要 登录 才可以下载或查看,没有帐号?立即注册   

x
内部变量:
计步缓存        UINT
EC_CoESDORead4DA_0        EC_CoESDORead
EC_CoESDOWrite_0        EC_CoESDOWrite
ReadDate_0        UINT
EC_CoESDOReadExecute_0        BOOL
SdoObject_0        _sSDO_ACCESS
EC_CoESDOReadDone_0        BOOL
EC_CoESDOReadBusy_0        BOOL
EC_CoESDOReadError_0        BOOL
EC_CoESDReadErrorID_0        WORD
EC_CoESDOWriteExecute_0        BOOL
WriteDate_0        UINT
EC_CoESDOWriteDone_0        BOOL
EC_CoESDOWriteBusy_0        BOOL
EC_CoESDOWriteError_0        BOOL
EC_CoESDOWriteErrorID_0        WORD
SDO_SY_0        UINT
SDO_ZSY_0        USINT
EC_CoESDORead4DA_1        EC_CoESDORead
EC_CoESDOWrite_1        EC_CoESDOWrite
ReadDate_1        UDINT
EC_CoESDOReadExecute_1        BOOL
SdoObject_1        _sSDO_ACCESS
EC_CoESDOReadDone_1        BOOL
EC_CoESDOReadBusy_1        BOOL
EC_CoESDOReadError_1        BOOL
EC_CoESDReadErrorID_1        WORD
EC_CoESDOWriteExecute_1        BOOL
WriteDate_1        UDINT
EC_CoESDOWriteDone_1        BOOL
EC_CoESDOWriteBusy_1        BOOL
EC_CoESDOWriteError_1        BOOL
EC_CoESDOWriteErrorID_1        WORD
SDO_SY_1        UINT
SDO_ZSY_1        USINT
nstate        UINT
RTRIG_0        R_TRIG
RTRIG_1        R_TRIG
DA4_MCTM_0        UDINT
DA4_MCTM_1        UDINT
DA4_MCTM_2        UDINT
DA4_MCTM_3        UDINT
DA4_MCTM_ALL        UDINT
FTRIG_10        F_TRIG
EC_CoESDOReadExecute_2        BOOL
EC_CoESDOWriteExecute_2        BOOL
启动延时        Ton

输入输出变量:
节点号        输入        UINT
模块位置        输入        UINT
Enable        输入        BOOL
CH0转换方式        输入        UDINT
CH0通道使能        输入        BOOL
CH1转换方式        输入        UDINT
CH1通道使能        输入        BOOL
CH2转换方式        输入        UDINT
CH2通道使能        输入        BOOL
CH3转换方式        输入        UDINT
CH3通道使能        输入        BOOL
RESET        输入        BOOL
模式设定完成        输出        BOOL
模式设置值错误        输出        BOOL
ERROR        输出        BOOL




程序:
//SDO定义#16
EC_CoESDORead4DA_0(
        Execute:=EC_CoESDOReadExecute_0,
        NodeAdr:=节点号,
        SdoObj:=SdoObject_0,
        TimeOut:=10,
        ReadDat:=ReadDate_0,
        Done=>EC_CoESDOReadDone_0,
        Busy=>EC_CoESDOReadBusy_0,
        Error=>EC_CoESDOReadError_0,
        ErrorID=>EC_CoESDReadErrorID_0
        );
EC_CoESDOWrite_0(
        Execute:=EC_CoESDOWriteExecute_0,
        NodeAdr:=节点号,
        SdoObj:=SdoObject_0,
        TimeOut:=10,
        WriteDat:=WriteDate_0,
        WriteSize:=2,
        Done=>EC_CoESDOWriteDone_0,
        Busy=>EC_CoESDOWriteBusy_0,
        Error=>EC_CoESDOWriteError_0,
        ErrorID=>EC_CoESDOWriteErrorID_0
        );
SdoObject_0.Index:=SDO_SY_0;
SdoObject_0.Subindex:=SDO_ZSY_0;
SdoObject_0.IsCompleteAccess:=FALSE;
//SDO定义#32
EC_CoESDORead4DA_1(
        Execute:=EC_CoESDOReadExecute_1,
        NodeAdr:=节点号,
        SdoObj:=SdoObject_1,
        TimeOut:=10,
        ReadDat:=ReadDate_1,
        Done=>EC_CoESDOReadDone_1,
        Busy=>EC_CoESDOReadBusy_1,
        Error=>EC_CoESDOReadError_1,
        ErrorID=>EC_CoESDReadErrorID_1
        );
EC_CoESDOWrite_1(
        Execute:=EC_CoESDOWriteExecute_1,
        NodeAdr:=节点号,
        SdoObj:=SdoObject_1,
        TimeOut:=10,
        WriteDat:=WriteDate_1,
        WriteSize:=4,
        Done=>EC_CoESDOWriteDone_1,
        Busy=>EC_CoESDOWriteBusy_1,
        Error=>EC_CoESDOWriteError_1,
        ErrorID=>EC_CoESDOWriteErrorID_1
        );
SdoObject_1.Index:=SDO_SY_1;
SdoObject_1.Subindex:=SDO_ZSY_1;
SdoObject_1.IsCompleteAccess:=FALSE;
//参数保护
IF 节点号=0 OR (模块位置<1 OR 模块位置>16) OR CH0转换方式>6 OR CH1转换方式>6 OR CH2转换方式>6 OR CH3转换方式>6 THEN
        模式设置值错误:=1;
ELSE
        模式设置值错误:=0;
END_IF;

//参数比较校正以及写入
启动延时(In:= _EC_MBXSlavTbl[节点号],PT:=T#1s);
CASE nstate OF
        0:
                RTRIG_0(Clk:=(Enable AND 启动延时.Q));
                IF RTRIG_0.Q AND NOT 模式设置值错误  THEN
                        nstate:=10;
                        DA4_MCTM_0:=0;
                        模式设定完成:=0;
                END_IF;
        10://参数比较
                DA4_MCTM_0:=CH0转换方式;
                DA4_MCTM_1:=DWORD_TO_UDINT(ROL(In:=UDINT_TO_DWORD(CH1转换方式),N:=ULINT#8));
                DA4_MCTM_2:=DWORD_TO_UDINT(ROL(In:=UDINT_TO_DWORD(CH2转换方式),N:=ULINT#16));
                DA4_MCTM_3:=DWORD_TO_UDINT(ROL(In:=UDINT_TO_DWORD(CH3转换方式),N:=ULINT#24));
                DA4_MCTM_ALL:=DWORD_TO_UDINT(UDINT_TO_DWORD(DA4_MCTM_0) OR UDINT_TO_DWORD(DA4_MCTM_1)
                                                                        OR UDINT_TO_DWORD(DA4_MCTM_2) OR UDINT_TO_DWORD(DA4_MCTM_3));
                IF CH0通道使能 THEN
                        DA4_MCTM_ALL:=DWORD_TO_UDINT(UDINT_TO_DWORD(DA4_MCTM_ALL) OR DWORD#16#80);
                END_IF;
                IF CH1通道使能 THEN
                        DA4_MCTM_ALL:=DWORD_TO_UDINT(UDINT_TO_DWORD(DA4_MCTM_ALL) OR DWORD#16#8000);
                END_IF;
                IF CH2通道使能 THEN
                        DA4_MCTM_ALL:=DWORD_TO_UDINT(UDINT_TO_DWORD(DA4_MCTM_ALL) OR DWORD#16#800000);
                END_IF;
                IF CH3通道使能 THEN
                        DA4_MCTM_ALL:=DWORD_TO_UDINT(UDINT_TO_DWORD(DA4_MCTM_ALL) OR DWORD#16#80000000);
                END_IF;
                nstate:=20;
        20://ECTA模块断使能
                SDO_SY_0:=16#FB00;
                SDO_ZSY_0:=16#0;
                EC_CoESDOWriteExecute_0:=0;
                WriteDate_0:=1;
                nstate:=30;
        30:
                EC_CoESDOWriteExecute_0:=1;
                IF EC_CoESDOWriteDone_0 THEN
                        EC_CoESDOWriteExecute_0:=0;
                        nstate:=40;
                ELSIF EC_CoESDOWriteError_0 THEN
                        ERROR:=1;计步缓存:=nstate;
                        nstate:=1001;
                END_IF;
        40:
                EC_CoESDOReadExecute_0:=1;
                IF EC_CoESDOReadDone_0 THEN
                        IF ReadDate_0=1 THEN                               
                                EC_CoESDOReadExecute_0:=0;
                                nstate:=50;
                        ELSE
                                ERROR:=1;计步缓存:=nstate;
                                nstate:=1001;
                        END_IF;
                ELSIF EC_CoESDOReadError_0 THEN
                        ERROR:=1;计步缓存:=nstate;
                        nstate:=1001;
                END_IF;                       
        50://停机完毕后参数写入
                SDO_SY_1:=16#8005+(模块位置-1)*16#100;
                SDO_ZSY_1:=16#1;
                EC_CoESDOWriteExecute_1:=0;
                WriteDate_1:=DA4_MCTM_ALL;
                nstate:=60;
        60:
                EC_CoESDOWriteExecute_1:=1;
                IF EC_CoESDOWriteDone_1 THEN
                        EC_CoESDOWriteExecute_1:=0;
                        nstate:=70;
                ELSIF EC_CoESDOWriteError_1 THEN
                        ERROR:=1;计步缓存:=nstate;
                        nstate:=1001;
                END_IF;
        70:
                EC_CoESDOReadExecute_1:=1;
                IF EC_CoESDOReadDone_1 THEN
                        IF ReadDate_1=WriteDate_1 THEN                               
                                EC_CoESDOReadExecute_1:=0;
                                nstate:=80;
                        ELSE
                                ERROR:=1;计步缓存:=nstate;
                                nstate:=1001;
                        END_IF;
                ELSIF EC_CoESDOReadError_1 THEN
                        ERROR:=1;计步缓存:=nstate;
                        nstate:=1001;
                END_IF;
        80://写入完成后重新启动模块
                SDO_SY_0:=16#FB00;
                SDO_ZSY_0:=16#0;
                EC_CoESDOWriteExecute_0:=0;
                WriteDate_0:=0;
                nstate:=90;
        90:
                EC_CoESDOWriteExecute_0:=1;
                IF EC_CoESDOWriteDone_0 THEN
                        EC_CoESDOWriteExecute_0:=0;
                        nstate:=100;
                ELSIF EC_CoESDOWriteError_0 THEN
                        ERROR:=1;计步缓存:=nstate;
                        nstate:=1001;
                END_IF;
        100:
                EC_CoESDOReadExecute_0:=1;
                IF EC_CoESDOReadDone_0 THEN
                        IF ReadDate_0=0 THEN                               
                                EC_CoESDOReadExecute_0:=0;
                                EC_CoESDOWriteExecute_0:=0;
                                nstate:=0;
                                模式设定完成:=1;
                        ELSE
                                ERROR:=1;计步缓存:=nstate;
                                nstate:=1001;
                        END_IF;
                ELSIF EC_CoESDOReadError_0 THEN
                        ERROR:=1;计步缓存:=nstate;
                        nstate:=1001;
                END_IF;               
END_CASE;
//故障复位
RTRIG_1(Clk:=RESET);
IF RTRIG_1.Q THEN
        nstate:=0;
        ERROR:=0;
        模式设置值错误:=0;
        模式设定完成:=0;
                WriteDate_0:=0;
        WriteDate_1:=0;
        ReadDate_0:=0;
        ReadDate_1:=0;
        EC_CoESDOReadExecute_0:=0;
        EC_CoESDOWriteExecute_0:=0;
        EC_CoESDOReadExecute_1:=0;
        EC_CoESDOWriteExecute_1:=0;
        EC_CoESDOReadExecute_2:=0;
        EC_CoESDOWriteExecute_2:=0;
END_IF;


FTRIG_10(Clk:=Enable);
IF FTRIG_10.Q THEN
nstate:=0;
ERROR:=0;
模式设置值错误:=0;
模式设定完成:=0;
        WriteDate_0:=0;
        WriteDate_1:=0;
        ReadDate_0:=0;
        ReadDate_1:=0;
        EC_CoESDOReadExecute_0:=0;
        EC_CoESDOWriteExecute_0:=0;
        EC_CoESDOReadExecute_1:=0;
        EC_CoESDOWriteExecute_1:=0;
        EC_CoESDOReadExecute_2:=0;
        EC_CoESDOWriteExecute_2:=0;
END_IF;
       




上一篇:欧姆龙+汇川耦合器+4AD
下一篇:关于扩展模块接线问题

已有 0 人打赏作者

回复 邀请回答送花

使用道具 举报

xing122005 2021-12-10 10:37:23 | 显示全部楼层
把资料放出来吧,汇川没有把SDO的地址跟作用放出来。

点评

可以  发表于 2022-2-15 09:00
回复 送花

使用道具 举报

XIN12888 2022-2-18 09:30:49 | 显示全部楼层
image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png
回复 送花

使用道具 举报

Parker 2022-6-13 08:18:38 | 显示全部楼层
内容详细,感谢分享
回复 送花

使用道具 举报

Patrical 2022-6-19 17:46:58 | 显示全部楼层
感谢,很好的分享,有参考价值
回复 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册   

本版积分规则

有技术问题,就上汇川技术社区

INOVANCE汇川技术 公众号

扫码下载掌上汇川APP

全国服务热线:8:30-17:30

4000-300124

苏州地址:江苏省苏州市吴中区越溪友翔路16号

深圳地址:深圳市龙华新区观澜街道高新技术产业园汇川技术总部大厦

Copyright © 2003-2100 汇川技术 Powered by Discuz! X3.4 ( 苏ICP备12002088号 )
快速回复 返回列表 返回顶部