发表于:2018/11/29 12:39:25
#0楼
http://bbs.gkong.com/archive.aspx?id=460775施耐德编程软件somachine中浮点转换求指点迷津
本帖链接上面的帖子。
我是一个去年接触PLC的初学者,目前也就可能勉强算入门吧,一路都是自学过来,靠着百度,论坛,官网,视频教程,客服电话,目前也就只接触过施耐德的几个系列,西门子,三菱都没有,更苦逼的是施耐德本身网上各种论坛沟通交流的就少,也没有西门子那样的论坛,所以中途走了不少弯路。
不过好在遇到了不少好心人,就像我们这个工控论坛的各位大侠,譬如C版,FUJIFA,G版,PDSH,蜀中之首还有gaoyingchun高工等在我PLC的学习路上给了不少的指点,虽然到目前为止有些回复我还没琢磨清楚。
话扯多了,今天说的就是前段时间的求助帖子(见上)。
一开始我的思路是对的,第三方仪表读取一个32位浮点数的温度值,通过通讯得到的是高字(2字节),低字(2字节),其实只需要将高低字通过move指令交换后存为另一个变量A即可得出,但我错在了将A以双字dword定义,再以类型转换指令得到一个real浮点数,就像fujifa说的“在大多数PLC中,DWORD_TO_REAL仅仅代表将双字整型转换为浮点数”,这是第一个错误;
第二个错误就是我没有定义A而是将A直接以地址来当做一个变量(%MDxx),而这个思路也其实就是第一个错误,本身%MD的定义就是默认的双字,虽然REAL也是以双字形式定义。
后来我就发了求助帖,然后FUJIFA指出了我的程序问题,C版将其中的16进制转浮点数特意做了一个功能块“hextofloat”,我想简单了,我以为后续之路会一目了然,但在10进制双字转16进制的路上我又走错了,为此我咨询了三次施耐德客服,给了我三种方法(也很奇葩不是?),也只有第三次的客服给了我“真理”,就是我下面图片中的再简单不过的方式实现了我的诉求。这还不包括我咨询的其它工作过程中接触到的工程师。
好在借助于上一个帖子我也学习了不少的知识。
为此我将自己犯错的地方和正确的地方用红色线圈出来给大家对比着看。
路漫漫其弯多兮,方法思路何其重要兮!
本帖链接上面的帖子。
我是一个去年接触PLC的初学者,目前也就可能勉强算入门吧,一路都是自学过来,靠着百度,论坛,官网,视频教程,客服电话,目前也就只接触过施耐德的几个系列,西门子,三菱都没有,更苦逼的是施耐德本身网上各种论坛沟通交流的就少,也没有西门子那样的论坛,所以中途走了不少弯路。
不过好在遇到了不少好心人,就像我们这个工控论坛的各位大侠,譬如C版,FUJIFA,G版,PDSH,蜀中之首还有gaoyingchun高工等在我PLC的学习路上给了不少的指点,虽然到目前为止有些回复我还没琢磨清楚。
话扯多了,今天说的就是前段时间的求助帖子(见上)。
一开始我的思路是对的,第三方仪表读取一个32位浮点数的温度值,通过通讯得到的是高字(2字节),低字(2字节),其实只需要将高低字通过move指令交换后存为另一个变量A即可得出,但我错在了将A以双字dword定义,再以类型转换指令得到一个real浮点数,就像fujifa说的“在大多数PLC中,DWORD_TO_REAL仅仅代表将双字整型转换为浮点数”,这是第一个错误;
第二个错误就是我没有定义A而是将A直接以地址来当做一个变量(%MDxx),而这个思路也其实就是第一个错误,本身%MD的定义就是默认的双字,虽然REAL也是以双字形式定义。
后来我就发了求助帖,然后FUJIFA指出了我的程序问题,C版将其中的16进制转浮点数特意做了一个功能块“hextofloat”,我想简单了,我以为后续之路会一目了然,但在10进制双字转16进制的路上我又走错了,为此我咨询了三次施耐德客服,给了我三种方法(也很奇葩不是?),也只有第三次的客服给了我“真理”,就是我下面图片中的再简单不过的方式实现了我的诉求。这还不包括我咨询的其它工作过程中接触到的工程师。
好在借助于上一个帖子我也学习了不少的知识。
为此我将自己犯错的地方和正确的地方用红色线圈出来给大家对比着看。
路漫漫其弯多兮,方法思路何其重要兮!
[此贴子已经被作者于2018/11/30 8:48:09编辑过]