技术论坛

SIMOTION的ST程序中如何对一个字的某一位进行置位?

作者 主题
LEW
侠士

经验值: 1362
发帖数: 29
精华帖: 0
主题:SIMOTION的ST程序中如何对一个字的某一位进行置位?


只看楼主 楼主 2011-04-25 17:43:49
SIMOTION的ST程序中如何对一个字的某一位进行置位?
如一变量 VAR_ID 为 WORD 类型的变量
假设VAR_ID当前为 0100 1000 0000 0001
现在要对第1位(从0位开始)置1 即是VAR_ID 要变为 0100 1000 0000 0011

问题:
在需要对指定的第n位进行置位,但VAR_ID当前的值未知的情况下,在对第n位进行置位时,仅对第n位置位,而其它位不能变化。
这样如何在SIMOTION的ST程序中实现呢?

 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=836082&b_id=46&s_id=0&num=7

游士

经验值: 290
发帖数: 108
精华帖: 1
回复:SIMOTION的ST程序中如何对一个字的某一位进行置位?


只看楼主 1楼 2011-04-25 18:12:18
有一个_setbit指令印象里!
 
以下网友喜欢您的帖子:

  
奇侠

经验值: 6542
发帖数: 767
精华帖: 3
回复:SIMOTION的ST程序中如何对一个字的某一位进行置位?


只看楼主 2楼 2011-04-25 22:57:47
SIMOTION对定义的字、字节好像不能直接进行位寻址,只能靠逻辑“与、或...”运算了
万物皆有用.用坚强的毅力把机遇变成成功!
以下网友喜欢您的帖子:

  
侠圣

经验值: 2757
发帖数: 1301
精华帖: 2
回复:SIMOTION的ST程序中如何对一个字的某一位进行置位?


只看楼主 3楼 2011-04-26 09:18:24
SETBIT可以
 
以下网友喜欢您的帖子:

  
LEW
侠士

经验值: 1362
发帖数: 29
精华帖: 0
回复:SIMOTION的ST程序中如何对一个字的某一位进行置位?


只看楼主 楼主 4楼 2011-04-27 09:12:08
quote:以下是引用soblue在2011-04-26 09:18:24的发言:
SETBIT可以


解决了,谢谢!
 
以下网友喜欢您的帖子:

  
LEW
侠士

经验值: 1362
发帖数: 29
精华帖: 0
回复:SIMOTION的ST程序中如何对一个字的某一位进行置位?


只看楼主 楼主 5楼 2011-04-28 09:26:37
quote:以下是引用welfare1987在2011-04-25 22:57:47的发言:
SIMOTION对定义的字、字节好像不能直接进行位寻址,只能靠逻辑“与、或...”运算了


试过了,用SETBIT可以,不过地址不能用可变变量,只能用常数
VAR_ID.BIT:=1 或者VAR_ID.1:=1
BIT 必须定义为某一常数
 
以下网友喜欢您的帖子:

  
侠士

经验值: 1085
发帖数: 356
精华帖: 4
回复:SIMOTION的ST程序中如何对一个字的某一位进行置位?


只看楼主 6楼 2011-05-05 11:06:33
给你一个例子,可以不使用SETBIT来实现,直接对该BIT操作即可,而且可以很灵活,你可以把这段程序做成功能块使用。
首先建一个bool的数组数组大小是0..7,再建一个byte数组,大小是0..1,最后建一个word。
当然还得有个i变量
这里假设bool变量叫做my_bit,byte变量叫My_byte,word变量叫My_word:
quote:
for i := 0 to 1 by 1 do
my_byte[i] :=
_byte_from_8bool(
bit0 := my_bit[i*8],
bit1 := my_bit[i*8+1],
bit2 := my_bit[i*8+2],
bit3 := my_bit[i*8+3],
bit4 := my_bit[i*8+4],
bit5 := my_bit[i*8+5],
bit6 := my_bit[i*8+6],
bit7 := my_bit[i*8+6],
);
end_for
my_word :=
_word_from_2byte(
byte0 := my_byte[0],
byte1 := my_byte[1],
);


然后你在程序里面针对my_bit[0..7]操作,其结果直接作用于该WORD对应的bit.
 
以下网友喜欢您的帖子:

  
LEW
侠士

经验值: 1362
发帖数: 29
精华帖: 0
回复:SIMOTION的ST程序中如何对一个字的某一位进行置位?


只看楼主 楼主 7楼 2011-05-13 10:38:35
quote:以下是引用LeeWheel在2011-05-05 11:06:33的发言:
给你一个例子,可以不使用SETBIT来实现,直接对该BIT操作即可,而且可以很灵活,你可以把这段程序做成功能块使用。
首先建一个bool的数组数组大小是0..7,再建一个byte数组,大小是0..1,最后建一个word。
当然还得有个i变量
这里假设bool变量叫做my_bit,byte变量叫My_byte,word变量叫My_word:
quote:
for i := 0 to 1 by 1 do
my_byte[i] :=
_byte_from_8bool(
bit0 := my_bit[i*8],
bit1 := my_bit[i*8+1],


然后你在程序里面针对my_bit[0..7]操作,其结果直接作用于该WORD对应的bit.


谢谢你了!
我刚接触,还没弄明白你的这个方法。
不过个人感觉你这个太麻烦了,用SETBIT就是直接对WORD的某一个进行操作的。

如 my_word.7:=1 (这个方法我是编译通过了,但现在手头没有硬件还没运行测试)
 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
SIMOTION的ST程序中如何对一个字的某一位进行置位?
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。