TIA博途SCL编程学习35_另类比大小

1 | 题目
定义一个FC或FB,比较两个数(双整数)的大小,只需要判断出小于或不小于(即大于等于即可)。判断结果如果是小于则输出TRUE,如果是不小于则输出FALSE,注意不能使用大于、等于和小于运算符,也不能使用IF语句。
2 | 设计分析
双整数的长度为32位,由两部分组成:一部分是符号,另一部分是数值。第0位到30位表示数值。第31位为符号位,表示值的正负状态,值为0(FALSE)表示正值,为1(TRUE)表示负值。利用符号位进行两个数的大小比较。
3 | 创建功能或功能块
添加功能块FB,命名为:“DIntCompare”。
4 | 定义接口变量
具体接口变量定义见下图:

输出变量(Output)是一种非常特殊的变量,建议变量命名时加以区分,我在命名时加了一个Q。后面有机会的话,可以和朋友们进行深入交流。
5 | 程序代码
编写程序代码。如下图:

博途SCL提供了访问数据单元某一个位的简洁方法“%X位号”,即片段访问。
6 | 代码测试
在循环OB中调用FB- “DIntCompare”,调用时会自动创建背景数据块,命名为“InstDIntCompare”,本例不使用背景数据块而是使用监控与强制表的方式进行监视和修改数据,因为背景数据块监视不能进行显示格式选择。
转至在线并监控程序。如下图:

999和888比较,999大于888,符号位为0,输出结果为FALSE,即不小于。

666和888比较,666小于888,符号位为1,输出结果为TRUE,即小于。
7 | 总结
变量定义时如果定义为临时变量,在监控和强制表中看不到;
片段访问可以用X访问位单元、B访问字节单元、W访问字单元、D访问双字单元。
西门子 1500 1200 PLC,位访问, 字节访问
访问byte,word中的位
mybyte.%X1
myword.%X1
访问word/dword中的byte
myword.%B0
myword.%B1
myDword.%B0
文中mybyte, myword, mydword请替换为自己的变量