栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

信捷PLC与人机界面C语言实现表格逻辑编辑运动控制

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

信捷PLC与人机界面C语言实现表格逻辑编辑运动控制




void ZL_M_0_1 ( WORD W, BIT B )
{
#define SysRegAddr_HD_D_HM_M

    int mid = 0;

    int i = 0;
    for ( i = 0; i < 125; i++ )     //遍历表格总步数;
    {
        if ( D[i + 1000] == 1 )
        {
            M[mid] = 1;//第一给M,M0置位1;=》判断指令
            M[mid + 1] = 0; //其它复位   =》结束判断指令
            M[mid + 2] = 0;           // =》置位指令
            M[mid + 3] = 0;           // =》复位
            M[mid + 4] = 0;           // =》延时
            M[mid + 5] = 0;           // =》等待
            M[mid + 6] = 0;           // =》轴运动
            M[mid + 7] = 0;           // =》跳转


        }
        if ( D[i + 1000] == 2 )
        {
            M[mid] = 0;
            M[mid + 1] = 1; //=》结束判断指令
            M[mid + 2] = 0;
            M[mid + 3] = 0;
            M[mid + 4] = 0;
            M[mid + 5] = 0;
            M[mid + 6] = 0;
            M[mid + 7] = 0;

        }
        if ( D[i + 1000] == 3 )
        {
            M[mid] = 0;
            M[mid + 1] = 0;
            M[mid + 2] = 1;    // =》置位指令
            M[mid + 3] = 0;
            M[mid + 4] = 0;
            M[mid + 5] = 0;
            M[mid + 6] = 0;
            M[mid + 7] = 0;

        }
        if ( D[i + 1000] == 4 )
        {
            M[mid] = 0;
            M[mid + 1] = 0;
            M[mid + 2] = 0;
            M[mid + 3] = 1;  // =》复位
            M[mid + 4] = 0;
            M[mid + 5] = 0;
            M[mid + 6] = 0;
            M[mid + 7] = 0;

        }
        if ( D[i + 1000] == 5 )
        {
            M[mid] = 0;
            M[mid + 1] = 0;
            M[mid + 2] = 0;
            M[mid + 3] = 0;
            M[mid + 4] = 1;    //复位
            M[mid + 5] = 0;
            M[mid + 6] = 0;
            M[mid + 7] = 0;

        }
        if ( D[i + 1000] == 6 )
        {
            M[mid] = 0;
            M[mid + 1] = 0;
            M[mid + 2] = 0;
            M[mid + 3] = 0;
            M[mid + 4] = 0;
            M[mid + 5] = 1;//延时
            M[mid + 6] = 0;
            M[mid + 7] = 0;

        }
        if ( D[i + 1000] == 7 )
        {
            M[mid] = 0;
            M[mid + 1] = 0;
            M[mid + 2] = 0;
            M[mid + 3] = 0;
            M[mid + 4] = 0;
            M[mid + 5] = 0;
            M[mid + 6] = 1;//轴运动
            M[mid + 7] = 0;

        }
        if ( D[i + 1000] == 8 )
        {
            M[mid] = 0;
            M[mid + 1] = 0;
            M[mid + 2] = 0;
            M[mid + 3] = 0;
            M[mid + 4] = 0;
            M[mid + 5] = 0;
            M[mid + 6] = 0;
            M[mid + 7] = 1;//跳转

        }

        mid += 10;




    }


}

void JUMP_NP ( WORD W, BIT B )
{
#define SysRegAddr_HD_D_M


    int id = 0;
    int a = 0;
    int i = 0;
    for ( i = 0; i < 125; i++ )
    {
        if ( a == 0 )
        {
            if ( D[i + 500] == 1 ) //当前步开始,=1的认为是在执行的S
            {
                D[i + 500] = 0;   //当前S复位

                id = * ( INT16U * ) &D[2000 + i];//当前步对应的参数1;

                D[i + 500 + id]  = 1;  //置位要跳转的步S号;

                a++;//限制执行次数1次;

                continue;
            }
        }


    }
}







void BU_ZL ( WORD W, BIT B )
{
#define SysRegAddr_HD_D_M


    int i = 0;
    int p = 0;
    for ( i = 0; i < 999; i += 8 )
    {

        if ( * ( INT16U * ) &W[i] == 53445 && * ( INT16U * ) &W[i + 1] == 53174 && * ( INT16U * ) &W[i + 2] == 0 )
        {



            D[p + 1000] = 1;//判断指令,
            p++;           //寄存器地址+1,

        }

        if ( * ( INT16U * ) &W[i] == 53445 && * ( INT16U * ) &W[i + 1] == 53174 && * ( INT16U * ) &W[i + 2] == 47574 )
        {

            D[p + 1000] = 2;//结束判断
            p++;

        }
        if ( * ( INT16U * ) &W[i] == 50134  )
        {

            D[p + 1000] = 3;//置位指令
            p++;

        }
        if ( * ( INT16U * ) &W[i] == 46264  )
        {

            D[p + 1000] = 4;//复位位指令
            p++;

        }
        if ( * ( INT16U * ) &W[i] == 54225  )
        {

            D[p + 1000] = 5;//延时指令
            p++;

        }
        if ( * ( INT16U * ) &W[i] == 51381  )
        {

            D[p + 1000] = 6;//等待
            p++;

        }
        if ( * ( INT16U * ) &W[i] == 57814  )
        {

            D[p + 1000] = 7;//轴移动
            p++;

        }
        if ( * ( INT16U * ) &W[i] == 63692  )
        {

            D[p + 1000] = 8;//跳转
            p++;

        }

    }


}

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/849135.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号