[西门子] Fanuc Karel 学习三(R寄存器/GO组输出和integer/real数据类型)

[复制链接]
查看96869 | 回复0 | 2024-2-23 18:53:15 | 显示全部楼层 |阅读模式
Fanuc Karel语言中,integer-32位整数(-2147483648 到+2147483646),Real-浮点数;GIN和GOUT是最高16位的无符号整数,在Karel中不能为负数;R寄存器可以存放整数和浮点数,但它不能认为是一个绝对地址,更像一个全局变量,有数据类型和数据值两个属性。

通过实验来学习Karel语言对R寄存器和GOUT组输出的操作,以及数据类型和运算的关系。

一,程序规划

Karel程序功能

将GO(GO[11])的值加1,并赋值到integer变量;

integer变量赋值到real变量,将integer和real变量分别写入到R寄存器(R[2]和R[3]);

输出integer和GO值到user画面。

读出R寄存器(R[1],R[2],R[3])值,输出到user画面。

TP程序功能

寄存器指令,将GO值传到R寄存器(R[1])

调用上面的Karel程序。

二,准备工作

示教器上配置好GO[11],组合16个DO点



建立Karel程序,构建pc程序



TP程序:



三,代码及测试:

1,GO(GO[11])的值加1



在示教器上将GO[11]修改成32766,



执行一次TP程序,示教器上查看 R[1]=32766,  GO[11]=32767;

再执行一次TP程序,示教器上查看R[1]=32767, GO[11]=32768;

再执行一次TP程序,示教器上查看R[1]=32768, 出现报警信息:



karel代码中 第18行,GOUT[11]=GOUT[11]+1  执行出错:

出错可能原因:karel对GOUT[11]进行读取或运算时,GOUT[11]被当成16位整数处理,但在对GOUT[11]进行赋值时,被当成16位无符号处理。

为验证上述分析,修改代码之后再测试:



在示教器上将GO[11]修改成32766,

执行一次TP程序,示教器上查看 R[1]=32766,  GO[11]=32767;

再执行一次TP程序,示教器上查看R[1]=32767, GO[11]=32768;

再执行一次TP程序,示教器上查看R[1]=32768, GO[11]=32769.

通过以上实验,可以看出:

A, GO[X]是16位无符号整数;

B, 在TP程序中,R寄存器存储格式长度32位,能以整数(?)形式获取GO[X]表达的16位无符号整数。

C,在karel中,对GO[X]赋值时,必须以16位无符号整数形式赋值,不能出现负整数;对GO[X]值运算或取值时,以16位整数处理。

2,integer变量赋值到real变量,将integer和real变量分别写入到R寄存器(R[2]和R[3]);输出integer和GO值到user画面。



写入寄存器时,写入integer和real数据类型,需要用不同的指令。

测试:





从上面可以看出:

A,karel中,输出GOUT[11]的WRITE 语句中,获取GOUT[11]值时,还是以整数形式获取。

B,虽然在示教器中DATA画面中,R[3]看起来是整数,但实际上是以real的形式存在的。

3,读出R寄存器(R[1],R[2],R[3])值,输出到user画面。





从上面可以看出:

虽然在示教器上看,R[3]看起来像整数,实际上是浮点数。

4,直接在示教器DATA画面中R寄存器值,用karel读出并输出到user画面

修改读取R[1]并输出的语句,删除TP程序中R[1]的赋值语句:





在示教器中给R[1]输入一个较大的2147483646,会自动转换为浮点数,



执行TP程序结果:



在示教器中给R[1]输入一个略小的65536,显示为整数,



执行TP程序结果:



从上面可以看出:

A,在示教器DATA中输入R寄存器数值时,系统自动会切换整数/浮点数形式,在karel读取时,要注意分辨数据类型。

四:实验总结

1, 在TP或KAREL中,GO[X]存储16位无符号整数。

2,在karel中,对GO[X]赋值时,必须以16位无符号整数形式赋值,不能出现负整数;对GO[X]值运算或取值时,以16位整数处理,GO[X]值>32767,以负整数读取和运算。

3,在TP程序中,R寄存器存储格式长度32位,32位整数形式获取GO[X]表达的16位无符号整数。

4, R寄存器具有数据类型和数据值两个属性,可以“结构变量”来理解,Type[ integer | real]   /  Val (integer)  /  Val(real),不能以“绝对地址”理解.

5,  R寄存器在示教器DATA画面中输入值时,会自动切换为整数或浮点数,对于不确定的R寄存器,在karel中读取时,需要分辨数据类型。

五:本次实验Karel的完整代码:



(完)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则