步科触摸屏宏指令

打开

停产版本---查看--》工程文件窗口--》往上拖到最高--》触摸屏

数据类型

新版本        工程结构窗口---下拉 ---宏文件

宏编辑设置路径失败

宏代码变量窗口

触发

元件-数据传输-定时器

寄存器地址

调用子程序

基础

案例一 刷卡系统

//判断登录
int MacroEntry()
{
	char buf[10]="";
	char kahao[10]="";
	short flag[1]={0};
	ReadLocal("LW",8900,5, (void*)kahao, 0);
   ReadLocal("RW",100,5, (void*)buf, 0);
	short i;
	for (i=0;i<15;i++) //在15组用户密码中对比
  {
		ReadLocal("RW", 100+5*i, 5, (void*)buf, 0);
			 if (((strcmp(kahao,buf))==0)&&(strlen(kahao)>0))
				{
					loginuser=5*(i+1);//算出来偏移地址
					quanxian=shouquan[i];//把对应用户的权限赋值
					WriteLocal("LB", 8999, 1, (void*)flag, 0);
					tanchuang=0;
					break;
				}
			else
			 {
				if(strlen(kahao)>0) tanchuang=1;	
				}
	}

	return 0;
}
//退出登录
int MacroEntry()
{
	char buf[10]="";
	WriteLocal("LW", 8900, 5, (void*)buf, 0);
	flag=0;
	return 0;
}

多屏互锁

//HMI1
int MacroEntry()
{
	if (locker & BitMask(0))	//本机被锁
	{
		int unlockVal = 6;
		int reqVal = BitMask(0);
		if (!(locker & BitMask(1)))
		{
			if (!WriteData(reqHmi1, 0, 0, 1, &reqVal))	//发送请求
			{
				WriteData(locker, 1, 0, 1, &unlockVal);	//对方掉线,强制解锁
			}
		}
		if (!(locker & BitMask(2)))
		{
			if (!WriteData(reqHmi2, 0, 0, 1, &reqVal))
			{
				WriteData(locker, 1, 0, 1, &unlockVal);	//对方掉线,强制解锁
			}
		}
	}
	return 0;
}
//HMI2
#define BitMask(i) (1<<(i))

int MacroEntry()
{
	if (locker & BitMask(1))	//本机被锁
	{
		int unlockVal = 5;
		int reqVal = BitMask(1);
		if (!(locker & BitMask(0)))
		{
			if (!WriteData(reqHmi0, 0, 0, 1, &reqVal))	//发送请求
			{
				WriteData(locker, 1, 0, 1, &unlockVal);	//对方掉线,强制解锁
			}
		}
		if (!(locker & BitMask(2)))
		{
			if (!WriteData(reqHmi2, 0, 0, 1, &reqVal))
			{
				WriteData(locker, 1, 0, 1, &unlockVal);	//对方掉线,强制解锁
			}
		}
	}
	return 0;
}
//HMI3
#define BitMask(i) (1<<(i))

int MacroEntry()
{
	if (locker & BitMask(2))	//本机被锁
	{
		int unlockVal = 3;
		int reqVal = BitMask(2);
		if (!(locker & BitMask(0)))
		{
			if (!WriteData(reqHmi0, 0, 0, 1, &reqVal))	//发送请求
			{
				WriteData(locker, 1, 0, 1, &unlockVal);	//对方掉线,强制解锁
			}
		}
		if (!(locker & BitMask(1)))
		{
			if (!WriteData(reqHmi1, 0, 0, 1, &reqVal))
			{
				WriteData(locker, 1, 0, 1, &unlockVal);	//对方掉线,强制解锁
			}
		}
	}
	return 0;
}

扫描枪

int MacroEntry()
{
	char buf[20]="";//清空显示信息用
	WriteLocal("LW", 0, 10, (void*)buf, 0);
	return 0;
}

范例

数组

int MacroEntry()
{
short i;
	for (i=0;i<15;i++) //在15组用户密码中对比
  {
LW500[i]=i;
D300[i]=LW500[i];

		}
return 0;
}

符号取值范围

#include "macrotypedef.h"
#include "math.h"

int MacroEntry()
{
    // 配方名称 12个字符串写入到R20
    signed short buf[12] = {0};
    signed short buff[27] = {0};


    // 读取当前配方名
    ReadLocal("RW", 0, 12, (void*)buf, 0);
    ReadLocal("PLC", 0, 27, (void*)buff, 0);

    switch (LW130)
    {
        case 1:
            // 写入配方1名称到R20
            WriteLocal("RW", 20, 12, (void*)buf, 0);
WriteLocal("RW", 50, 27, (void*)buf, 0);
            
break;
        case 2:
            // 写入配方2名称到R20
            WriteLocal("RW", 100, 12, (void*)buf, 0);
WriteLocal("RW", 150, 27, (void*)buf, 0);
            break;
        case 3:
            // 写入配方3名称到R20
            WriteLocal("RW", 200, 12, (void*)buf, 0);
WriteLocal("RW", 250, 27, (void*)buf, 0);
            break;
        case 4:
            // 写入配方4名称到R20
            WriteLocal("RW", 300, 12, (void*)buf, 0);
WriteLocal("RW", 350, 27, (void*)buf, 0);
            break;
        case 5:
            // 写入配方5名称到R20
            WriteLocal("RW", 400, 12, (void*)buf, 0);
WriteLocal("RW", 450, 27, (void*)buf, 0);
            break;
       case 6:
            // 写入配方5名称到R20
            WriteLocal("RW", 500, 12, (void*)buf, 0);
WriteLocal("RW", 550, 27, (void*)buf, 0);
            break;

        case 7:
            // 写入配方7名称到R20
            WriteLocal("RW", 600, 12, (void*)buf, 0);
WriteLocal("RW", 650, 27, (void*)buf, 0);
            break;
        case 8:
            // 写入配方8名称到R20
            WriteLocal("RW", 700, 12, (void*)buf, 0);
WriteLocal("RW", 750, 27, (void*)buf, 0);
            break;
       case 9:
            // 写入配方5名称到R20
            WriteLocal("RW", 800, 12, (void*)buf, 0);
WriteLocal("RW", 850, 27, (void*)buf, 0);
            break;

        case 10:
            // 写入配方10名称到R20
          WriteLocal("RW", 900, 12, (void*)buf, 0);
WriteLocal("RW", 950, 27, (void*)buf, 0);
              break;
        default:
            // 其他情况不处理
            break;
    }

    return 0;
}

定时器设置一段时间自动变成0 做成不干预

配方

#include "macrotypedef.h"
#include "math.h"

int MacroEntry()
{
    // 定义配方名称缓冲区和参数缓冲区
    signed short recipeNameBuf[12] = {0};
    signed short recipeParamBuf[27] = {0};
    signed short Buf[12] = {0};
    signed short Buff[27] = {0};


    // 确定当前配方编号
    int currentRecipeNumber = LW130;
  if (currentRecipeNumber != 0)

    // 读取当前配方名称和参数
    ReadLocal("RW", 0, 12, (void*)recipeNameBuf, 0);
    ReadLocal("PLC", 0, 27, (void*)recipeParamBuf, 0);

    {
    // 计算配方名称和参数的写入地址
    int recipeNameStartAddress = 20 + (currentRecipeNumber - 1) * 100;
    int recipeParamStartAddress = 50 + (currentRecipeNumber - 1) * 100;

    // 写入配方名称和参数
    WriteLocal("RW", recipeNameStartAddress, 12, (void*)recipeNameBuf, 0);
    WriteLocal("RW", recipeParamStartAddress, 27, (void*)recipeParamBuf, 0);
    }
    // 确定当前选择的模型编号
    int currentModelNumber = LW132;

    // 判断 LW132 是否不等于 0
    if (currentModelNumber != 0)
    {
        // 计算模型名称和参数的读取地址
        int modelNameStartAddress = 20 + (currentModelNumber - 1) * 100;
        int modelParamStartAddress = 50 + (currentModelNumber - 1) * 100;

        // 读取模型名称和参数
        ReadLocal("RW", modelNameStartAddress, 12, (void*)Buf, 0);
        ReadLocal("RW", modelParamStartAddress, 27, (void*)Buff, 0);

        // 写入模型名称和参数
        WriteLocal("RW", 0, 12, (void*)Buf, 0);
        WriteLocal("PLC", 0, 27, (void*)Buff, 0);
    }

    return 0;
}

#include "macrotypedef.h"
#include "math.h"
 
int MacroEntry()
{
    // 定义配方名称缓冲区和参数缓冲区
    signed short recipeNameBuf[12] = {0};
    signed short recipeParamBuf[27] = {0};
    signed short Buf[12] = {0};
    signed short Buff[27] = {0};
     signed short  i
 // 确定当前配方编号
    int currentRecipeNumber = LW130;
  if (currentRecipeNumber != 0)
 
    // 读取当前配方名称和参数
    ReadLocal("RW", 0, 12, (void*)recipeNameBuf, 0);
    ReadLocal("RL", 400, 27, (void*)recipeParamBuf, 0);
 
    {
    // 计算配方名称和参数的写入地址
    int recipeNameStartAddress = 20 + (currentRecipeNumber - 1) * 100;
    int recipeParamStartAddress = 50 + (currentRecipeNumber - 1) * 100;
 
    // 写入配方名称和参数
    WriteLocal("RW", recipeNameStartAddress, 12, (void*)recipeNameBuf, 0);
    WriteLocal("RW", recipeParamStartAddress, 27, (void*)recipeParamBuf, 0);
    }




    // 确定当前选择的模型编号
    int currentModelNumber = LW132;
 
    // 判断 LW132 是否不等于 0
    if (currentModelNumber != 0)
    {
        // 计算模型名称和参数的读取地址
        int modelNameStartAddress = 20 + (currentModelNumber - 1) * 100;
        int modelParamStartAddress = 50 + (currentModelNumber - 1) * 100;
 
        // 读取模型名称和参数
        ReadLocal("RW", modelNameStartAddress, 12, (void*)Buf, 0);
        ReadLocal("RW", modelParamStartAddress, 27, (void*)Buff, 0);
 
        // 写入模型名称和参数
        WriteLocal("RW", 0, 12, (void*)Buf, 0);
        WriteLocal("RL", 400, 27, (void*)Buff, 0);
    }
 
    return 0;
}

#include "macrotypedef.h"
#include "math.h"

int MacroEntry()
{
 signed short recipeNameBuf[12] = {0};
    signed short Buf[12] = {0};
   
    short i;

    // 根据 LW130 的值执行不同的操作
    switch (LW130)
    {
        case 1:
            // 在 15 组用户密码中对比
            for (i = 0; i < 27; i++)
            {
                // 将 D400 数组的值复制到 RW10000 数组中
                RW10000[i] = D400[i];
            }
            break;

        case 2:
            // 在 15 组用户密码中对比
            for (i = 0; i < 27; i++)
            {
                // 将 D400 数组的值复制到 RW10100 数组中
                RW10100[i] = D400[i];
            }
            break;

        case 3:
            for (i = 0; i < 27; i++)
            {
                RW10200[i] = D400[i];
            }
            break;

        case 4:
            for (i = 0; i < 27; i++)
            {
                RW10300[i] = D400[i];
            }
            break;

        case 5:
            for (i = 0; i < 27; i++)
            {
                RW10400[i] = D400[i];
            }
            break;

        case 6:
            for (i = 0; i < 27; i++)
            {
                RW10500[i] = D400[i];
            }
            break;

        case 7:
            for (i = 0; i < 27; i++)
            {
                RW10600[i] = D400[i];
            }
            break;

        case 8:
            for (i = 0; i < 27; i++)
            {
                RW10700[i] = D400[i];
            }
            break;

        case 9:
            for (i = 0; i < 27; i++)
            {
                RW10800[i] = D400[i];
            }
            break;

        case 10:
            for (i = 0; i < 27; i++)
            {
                RW10900[i] = D400[i];
            }
            break;

        case 11:
            for (i = 0; i < 27; i++)
            {
                RW11000[i] = D400[i];
            }
            break;

        case 12:
            for (i = 0; i < 27; i++)
            {
                RW11100[i] = D400[i];
            }
            break;

        case 13:
            for (i = 0; i < 27; i++)
            {
                RW11200[i] = D400[i];
            }
            break;

        default:
            // 如果 LW130 的值不是 1 或 2,则什么也不做
            break;
    }

    // 根据 LW132 的值执行不同的操作
    switch (LW132)
    {
        case 1:
            // 在 15 组用户密码中对比
            for (i = 0; i < 27; i++)
            {
                // 将 D400 数组的值复制到 RW10000 数组中
                 D400[i]=RW10000[i] ;
            }
            break;

        case 2:
            // 在 15 组用户密码中对比
            for (i = 0; i < 27; i++)
            {
                // 将 D400 数组的值复制到 RW10100 数组中
                 D400[i]=RW10100[i] ;
            }
            break;

        case 3:
            for (i = 0; i < 27; i++)
            {
                 D400[i]=RW10200[i] ;
            }
            break;

        case 4:
            for (i = 0; i < 27; i++)
            {
                D400[i]=RW10300[i] ;
            }
            break;

        case 5:
            for (i = 0; i < 27; i++)
            {
                  D400[i]=RW10400[i];
            }
            break;

        case 6:
            for (i = 0; i < 27; i++)
            {
                  D400[i]=RW10500[i];
            }
            break;

        case 7:
            for (i = 0; i < 27; i++)
            {
                  D400[i]=RW10600[i];
            }
            break;

        case 8:
            for (i = 0; i < 27; i++)
            {
                  D400[i]=RW10700[i];
            }
            break;

        case 9:
            for (i = 0; i < 27; i++)
            {
                  D400[i]=RW10800[i];
            }
            break;

        case 10:
            for (i = 0; i < 27; i++)
            {
                  D400[i]=RW10900[i];
            }
            break;

        case 11:
            for (i = 0; i < 27; i++)
            {
                  D400[i]=RW11000[i];
            }
            break;

        case 12:
            for (i = 0; i < 27; i++)
            {
                  D400[i]=RW11100[i];
            }
            break;

        case 13:
            for (i = 0; i < 27; i++)
            {
                  D400[i]=RW11200[i];
            }
            break;

        default:
            // 如果 LW132 的值不是 1 或 2,则什么也不做
            break;
    }

   // 确定当前配方编号
    int currentRecipeNumber = LW130;
  if (currentRecipeNumber != 0)
   ReadLocal("RW", 0, 12, (void*)recipeNameBuf, 0);
 
    {
    // 计算配方名称和参数的写入地址
    int recipeNameStartAddress = 20 + (currentRecipeNumber - 1) * 100;
  
    // 写入配方名称和参数
    WriteLocal("RW", recipeNameStartAddress, 12, (void*)recipeNameBuf, 0);
    }
    // 确定当前选择的模型编号
    int currentModelNumber = LW132;
 
    // 判断 LW132 是否不等于 0
    if (currentModelNumber != 0)
    {
        // 计算模型名称和参数的读取地址
        int modelNameStartAddress = 20 + (currentModelNumber - 1) * 100;
 
        // 读取模型名称和参数
        ReadLocal("RW", modelNameStartAddress, 12, (void*)Buf, 0);
 
        // 写入模型名称和参数
        WriteLocal("RW", 0, 12, (void*)Buf, 0);
    }
 
 
    return 0;
}

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
步科触摸屏的函数脚本说明 目 录 1. KingSCADA的条件事件脚本等系统脚本中不能调用画面内部的对象吗? ...1 2. 我想在一个画面中调用另一个画面的内部对象,怎样做?............................1 3. 画面自定义变量和属性除了能被本画面的图素引用,其他的画面能引用吗? .............................................................................................................................................3 4. 导航图应用有EnableNavigate()和ShowNavigateWindow()两个函数,他们有什 么区别?.............................................................................................................................3 5. KingSCADA 提 供 保 存 画 面 的 函 数 , 如 SavePictureToFile() 、 SaveWholePictureToFile()函数,我写在按钮命令语言里为什么不执行?..................3 6. 利用表格模板和SQLCreateTable()函数创建数据库表格,为什么创建不成 功?.....................................................................................................................................3 7. 用SQLDropTable()函数删除一个数据库表格,为什么删不掉? ....................3 8. 用SQLGetRecord()函数为什么不能返回当前选择集中的指定序号的记录? 3 9. 用VarRefAddress函数不能实现变量的引用?..................................................4 10. KingSCADA运行系统怎样得到当前产生的报警数量? .................................4 11. 怎样从实时报警窗中手动删除确认过的报警记录?......................................5 12. KingSCADA可以实现通过弹出对话框让用户选择文件的功能吗? .............5 13. 有累计计算脚本,长时间运行后,累计值不变?..........................................6 14. FileWriteStr(“c:\sql.txt”,0,“sfd%”,0);但是输出文本里少了%?........................6 15. 在应用程序启动时脚本里添加了打开画面函数,运行时,画面没有打开? .............................................................................................................................................6 16. KS工程里有数据库查询或插入的脚本,长时间运行后,不能查询或插入记 录?.....................................................................................................................................6 17. KingSCADA的全局脚本、局部脚本有大小的限制吗? .................................6 18. KingSCADA中怎样实现把同一类型的文件名显示在列表框中?类似于组态 王的ListLoadFileName()函数的功能。............................................................................6 19. 怎样在KingSCADA运行时获取加密锁序列号? ............................................7 20. 通过调用数据集函数KDBGetDataset()对access数据库进行操作时,一直 报错“对象关闭时,不允许操作。 DBAccess: Open the source recordset failed!”?.7 21. 图素对象属性中的hotkey热键作用?...............................................................7

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值