签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
各位大神:
现有两个DB块中各有30个字节,要求这共60个字节数据不能有相同的重复出现,比如DB1.DBB0当前为1,那么就要跟其他59个字节去一一比对,如有同为1的其他字节就需要报警提示,其他字节也一样,有什么简单方便的指令或编程方法吗?一一去做比对有些繁琐了。
另外一个DB块中是10个字节一组的30个字符串,也需要每个字符串之间做对比,有重复的就报警,是不是也能一个一个的去做对比呢?
麻烦各位大神给支支招,谢谢!
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1588384&b_id=4&s_id=0&num=10
对比,只能是一个一个的进行。
这个程序在论坛上讨论的也比较多,早前那些冒泡法,指针偏移是你需要的一种编程方法。
楼主,你这是考试的题目?还是实际工程应用?
能再详细地介绍一下背景应用吗?储存的什么数据?为什么不能有重复值?
是实际应用,两个DB块分别存储60个库区位置号,按入库先后堆栈,理论上不会出现一个位置重复2次的情况,之前是有人为修改后,导致数据错误,现在做这个对比就是想防止类似情况再次出现。
引用2楼详细内容:
再详细一点,什么样的数据类型?这个问题有解决办法,可以不使用遍历比较的手段
。
这60个字节的数值是不是通过HMI这样的上位装置输入设置的?
检测手段:
1、边界检测,上溢出(值>60)或者下溢出(值<0)?
2、冲突检测,数值是否重复?
@20170309439812 简单,采用哈希表(HashTable)。
1、开辟一数据缓冲区,存放RFID读来的数值UploadValue,
2、建立一个数组HashTable[0,60] of INT,初始值全部设为VALID :=-1(有效的)
3、建立一功能函数Hash,进行如下求模取余数运算,
Remainder := MOD(UploadValue,DIVISOR),此处DIVISOR 的值设为61。
4、进行判断
IF HashTable[Remainder] = VALID THEN
DBx.DBBx := UploadValue;
HashTable[Remainder] := INVALID; //常量INVALID := -2,无效的。
ELSE
Alarm := TRUE; //重复数据,输出非法报警。
基本上就这样,字符串的类似。
也可以参考一下此贴【分享】[博途]+数据结构在IO地址冲突检测中的应用
没想到啥好办法,用SCL语言好一点吧
我也有这样的疑惑?尽谅详细点OK?
@20170309439812 结果如何了?
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录