威纶通触摸屏利用变址偏移功能在一个画面上监控所有IO状态的具体方法

威纶通触摸屏利用变址偏移功能在一个画面上监控所有IO状态的具体方法

1

  1. 新建一个项目,以MT8070iE触摸屏与西门子S7-1500通讯为例,做好通讯设置。其中PLC要设置好以太网地址,并在“连接机制”中选中“允许来自远程对象的PUT/GET通信访问”。
  2. 新建一个宏指令,设置为“周期执行”。
    宏内容为:
    macro_command main()
    int i,n
    int a[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
    int b[16]
    GetData(n, “Local HMI”, LW, 9200, 1)
    for i=0 to 15
    b[i]=a[i]+ n*16
    SetData(b[i], “Local HMI”, LW, i, 1)
    next i
    end macro_command

即将触摸屏内部地址LW0~LW15的值分别设为0-15+索引寄存器值×16。

基本知识
威纶通共有16个16位地址索引器,对应地址从LW9200到LW9215。利用其中任意一个地址索引器来实现

假设存储器中的一组双字的起始地址为base,每个双字长度为4个字节(32位),共有n个双字需要排序。下面是基于冒泡排序算法的示例代码: ``` mov ecx, n ; 将双字数量存入ecx寄存器 dec ecx ; 双字数量减1,作为外层循环的次数,从n-1到1 mov esi, base ; 将起始地址存入esi寄存器,作为变址寄存器 mov edx, 4 ; 将双字长度4存入edx寄存器,作为偏移量 outer_loop: push ecx ; 保存ecx寄存器的值,用于内层循环 xor ecx, ecx ; 将ecx清零,作为内层循环计数器 inner_loop: mov eax, [esi] ; 将esi指向的双字读入eax寄存器 cmp eax, [esi+edx]; 将esi+4指向的双字与eax比较 jle skip_swap ; 如果eax小于等于esi+4指向的双字,跳过交换 xchg eax, [esi+edx]; 否则交换eax和esi+4指向的双字的值 mov [esi], eax ; 将eax的值存入esi指向的双字 mov ecx, 1 ; 将ecx置1,表示发生了交换 skip_swap: add esi, edx ; 将esi加上双字长度4,指向下一个双字 loop inner_loop ; 内层循环 pop ecx ; 恢复ecx寄存器的值 test ecx, ecx ; 检查是否发生了交换 jne outer_loop ; 如果发生了交换,继续外层循环 ``` 在上面的代码中,基址是存储器中一组双字的起始地址base,变址寄存器是esi,偏移量是4个字节(32位),即edx寄存器的值。在内层循环中,每次取出esi指向的双字和esi+4指向的双字,比较它们的大小关系,如果前者大于后者,则交换它们的值。交换完成后,将esi指向的双字的值存入eax寄存器,然后将esi指向下一个双字。如果发生了交换,将ecx寄存器的值置1,表示需要继续外层循环。如果外层循环结束后,ecx寄存器的值为0,说明所有双字已经按升序排好序了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AAA_自动化工程师

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值