技术论坛

 跟我一起玩200 smart PLC 关于“字节”数据转“位”数据的操作

返回主题列表
作者 主题
WWCWWC
至圣

经验值:79155
发帖数:9098
精华帖:157
楼主    2017-06-12 12:31:50
主题:跟我一起玩200 smart PLC 关于“字节”数据转“位”数据的操作 精华帖 

跟我一起玩200 smart PLC

关于“字节”数据转“位”数据的操作

   今天,在“找答案”栏目中看到有一网友提问,问题大概的描述是如何将一个字节的数据按高、低位如何有序的排列成具体的位输出。我想了想,感觉这个问题值得“推敲”一番,看似简单的问题,直接用编码(ENCO)、译码指令(DECO)就可以解决了的问题,然后取其中的位不就行了,至于这么折腾?但上诉这些指令的IN管脚只能正常以“字”数据类型为输入单位的,不支持字节为单位的输入处理,当然可以通过变通后调用,毕竟指令的“死”的,而人是“活”的。

   回到家里,感觉要做一做这个程序,以加深对此类问题的印象。当打开软件时,还真的有些手足无措了,怎么办呢?还是先做一个子程序看看结果如何吧,待遇到问题再想处理办法。关于编程,我一直在思考如何切入的编程思路非常重要,好的思路有助于编辑程序时具备简洁、明了的逻辑思维,但这个所谓的思路是依靠编程者千锤百炼、不断总结、吸取各种问题,并加以提高、掌握所得来的,而并非一朝一夕就可以获得的事情。

编程思路:

1)  先定义一个子程序名称“byte_and_bit”,在子程序变量接口处定义了一些接口,图示:

2)  定义完变量,编辑程序,我的思路是先把这个外部接口变量字节的数据拿进来,存放在一个临时变量存储地址temp1中(该程序本可以不使用内部临时变量temp1的,目的是经常性看到网友有对此问题的提问,所以加入了此临时变量,以提升对此变量的应用),然后按字节的高、低有序地调用被拆分了的位地址,作为具体的输出条件,实际程序非常简单而笨拙一点,图示:

3)  在主程序中调用子程序,新建“状态图表”后将程序保存、编译并下载到cpu中启动监控模式,图示:在VB0中输入十进制数11(二进制0000 1011)看输出结果


4)  为确认子程序的多次调用是否可靠性,再次插入一个子程序,并在状态图表中新建一些变量地址,保存、编译并下载到cpu,启动监控模式,图示:在第二个子程序的输入VB1 = 十进制的111(二进制0110 1111),并关闭第一个子程序调用的数据VB0 = 0


程序仍然被正确执行,主要是验证temp1变量多次调用。

小结:

   首先,在新建子程序的临时变量时,按要求必须先赋值(初始化)后调用,但我感觉在这个子程序中没有必要赋值,因为,这个临时变量的赋值是按接口变量LB0的状态给赋值了的(实时的刷新),需要按实际灵活应用,验证的结果也符合了我的想法。其次,在调用输出条件时,我拆分了临时变量的地址LB2,我使用的软件是V2.1版本的,当拆分临时变量时,前面没有了“#”标记和下划线,参见图2(图3)红色框,当时在编程过程中还认为在编译时系统会报错误,但点击编译时,系统允许这样的操作。再次,在初始编程前,本想用什么方便的指令来编辑,后来想了想,可能在此类问题上过多的应用其它的指令都将会使程序变为人为的复杂。

   上诉程序的编辑仅仅是我的一个比较笨拙的方法,仅用此程序提供给初级编程者做一些参考,希望那位不知道姓名的网友看到此贴能够有所帮助。


您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。