如何将读取到的模拟量的值按位取出放在开关量中
建立1个模拟量,32个开关量,写入如下脚本
# 计算开关量的值
set v [expr {int([get_analog_value "sta1" "analog0"])}];
set_status_value "sta1" "switch0" [expr {($v & 0x00000001) > 0 ? 1 : 0}];
set_status_value "sta1" "switch1" [expr {($v & 0x00000002) > 0 ? 1 : 0}];
set_status_value "sta1" "switch2" [expr {($v & 0x00000004) > 0 ? 1 : 0}];
set_status_value "sta1" "switch3" [expr {($v & 0x00000008) > 0 ? 1 : 0}];
set_status_value "sta1" "switch4" [expr {($v & 0x00000010) > 0 ? 1 : 0}];
set_status_value "sta1" "switch5" [expr {($v & 0x00000020) > 0 ? 1 : 0}];
set_status_value "sta1" "switch6" [expr {($v & 0x00000040) > 0 ? 1 : 0}];
set_status_value "sta1" "switch7" [expr {($v & 0x00000080) > 0 ? 1 : 0}];
set_status_value "sta1" "switch8" [expr {($v & 0x00000100) > 0 ? 1 : 0}];
set_status_value "sta1" "switch9" [expr {($v & 0x00000200) > 0 ? 1 : 0}];
set_status_value "sta1" "switch10" [expr {($v & 0x00000400) > 0 ? 1 : 0}];
set_status_value "sta1" "switch11" [expr {($v & 0x00000800) > 0 ? 1 : 0}];
set_status_value "sta1" "switch12" [expr {($v & 0x00001000) > 0 ? 1 : 0}];
set_status_value "sta1" "switch13" [expr {($v & 0x00002000) > 0 ? 1 : 0}];
set_status_value "sta1" "switch14" [expr {($v & 0x00004000) > 0 ? 1 : 0}];
set_status_value "sta1" "switch15" [expr {($v & 0x00008000) > 0 ? 1 : 0}];
set_status_value "sta1" "status16" [expr {($v & 0x00010000) > 0 ? 1 : 0}];
set_status_value "sta1" "status17" [expr {($v & 0x00020000) > 0 ? 1 : 0}];
set_status_value "sta1" "status18" [expr {($v & 0x00040000) > 0 ? 1 : 0}];
set_status_value "sta1" "status19" [expr {($v & 0x00080000) > 0 ? 1 : 0}];
set_status_value "sta1" "status20" [expr {($v & 0x00100000) > 0 ? 1 : 0}];
set_status_value "sta1" "status21" [expr {($v & 0x00200000) > 0 ? 1 : 0}];
set_status_value "sta1" "status22" [expr {($v & 0x00400000) > 0 ? 1 : 0}];
set_status_value "sta1" "status23" [expr {($v & 0x00800000) > 0 ? 1 : 0}];
set_status_value "sta1" "status24" [expr {($v & 0x01000000) > 0 ? 1 : 0}];
set_status_value "sta1" "status25" [expr {($v & 0x02000000) > 0 ? 1 : 0}];
set_status_value "sta1" "status26" [expr {($v & 0x04000000) > 0 ? 1 : 0}];
set_status_value "sta1" "status27" [expr {($v & 0x08000000) > 0 ? 1 : 0}];
set_status_value "sta1" "status28" [expr {($v & 0x10001000) > 0 ? 1 : 0}];
set_status_value "sta1" "status29" [expr {($v & 0x20000000) > 0 ? 1 : 0}];
set_status_value "sta1" "status30" [expr {($v & 0x40000000) > 0 ? 1 : 0}];
set_status_value "sta1" "status31" [expr {($v & 0x80000000) > 0 ? 1 : 0}];