百度
苏州硫化机 油压机维修
级别: 略有小成
精华主题: 0
发帖数量: 183 个
工控威望: 329 点
下载积分: 1450 分
在线时间: 370(小时)
注册时间: 2007-11-30
最后登录: 2024-04-29
查看百度的 主题 / 回贴
楼主  发表于: 2023-06-04 19:20
请教大家个问题,我用smart200给设备做计数,配方有200多个。
我可以读取到配方号0--255.
我如何做到生产配方1,配方1的计数器VD10加1
生产配方2 配方2的计数器VD14加1
一个 一个的写太多了,大家有没有好办法。希望大家给点建议。
hstec2002
级别: 论坛先锋
精华主题: 0
发帖数量: 363 个
工控威望: 1414 点
下载积分: 5075 分
在线时间: 565(小时)
注册时间: 2021-05-05
最后登录: 2024-04-29
查看hstec2002的 主题 / 回贴
1楼  发表于: 2023-06-04 20:56
指针寻址+循环啊
QQ: 2845452345
gxtmdb82164
级别: 论坛先锋
精华主题: 0
发帖数量: 655 个
工控威望: 1033 点
下载积分: 120 分
在线时间: 531(小时)
注册时间: 2019-09-22
最后登录: 2024-04-29
查看gxtmdb82164的 主题 / 回贴
2楼  发表于: 2023-06-05 13:56
比较基础的问题了

使用数据结构+偏移地址的写法

举个例子你的配方需要32个字节的空间来存放实际的数据,那么直接定义好这32个字节的数据结构就行了,完了以后把这32个字节全部使用指针进行访问,比如VD100~VD224,这32个双字里面全是指针(实际上没必要定义32个,看你需要什么数据类型,32个字节也可以是16个字或者8个双字).接下来写一个独立的子函数专门用于处理VD100~VD224的数据,逻辑也非常简单,假设1号参数存在VB1000,那么输入1号参数设置VD100取地址VB1000,后面根据数据类型依次加上去,设置2号参数则所有指针+32

这样在使用的时候,编程用的入口实际上是同一套,比如定义了*VD108这个双字是计数器,那么所有的写入位置都是*VD108,但是实际上因为操作的是指针,这个指针映射到数据结构上的第28个字节,那么在实际操作的时候,设置1的时候实际写入是VD1028,设置2的时候是VD1040

西门子这个按字节寻址同时提供指针的写法,虽然最灵活,但是比日系的DxxZn写法稍微复杂了一丢丢,操作上也会复杂一点要自己算偏移