帖子很有参考价值。
客户的原程序如果没有定义MW20的数据类型,将整数25传送给MW20,计数器得到的预置值为25对应的十六进制数16#19,但是程序运行不会出错。
如果在符号表中定义MW20的数据类型为INT,输入预置值的实参MW20后,它变为红色,根本就输入不了。所以也无法复现客户的故障。
有两点弄不明白:
1.为什么“为严肃纪律,在此推荐用数据块DB地址,以便数据类型WORD和INT做明确定义。”
使用其他地址区,也可以定义数据类型呀。
不定义预置值所用地址的数据类型,也可以使用它。也可以直接将它定义为Word类型。
2.预置值为什么非得要输入整数,然后将它转换为BCD码?
实际上可以直接将C#25输入MW20(见下图),它马上变为16#25,因此也可以直接输入16#25。
BCD码借用了16进制数的表示方法。图中的CV是十六进制数,CV_BCD是BCD码(即十进制数25)。