我需要帮助将这个算法转换成tcl用于我的工作,我在tcl语言方面不太好。
Inputs: STA−1, STA−2, STA−3, ..., STA−n
//requests from various stations for channel access
Shared Variables:
for every i, 1 ≤ i ≤ n
counter[i] ∈ { / 0, 1, 2,..., N}, initially 0, updated by stations
Sequence Number, K ∈ { / 0, 1, 2,..., N}, initially 0, will be set to a positive integer
Procedure:
//Initialization
Set sequence number K = m; //based on the action selected
for (i = 1 to n)
counter[i] = 0;
for (i = 1 to n)
{
while (channel access[i])
if (counter[i]! = K)
{
if (channel == idle)
{
if (counter[i]<min(counter[i+1], counter[i+2], ..., counter[i + n]))
access channel;
else
defer access;
}
counter[i]+ +;
}
else
defer access;
}
这是为了让CPS设备在两者之间使用WSN访问互联网。基本网络已经完成但需要帮助才能将此算法添加到其中。 有人可以帮我在tcl编写算法代码吗?
答案 0 :(得分:0)
你的问题不够明确。 对于语法,我建议参考TCL在线帮助。
一些快速摘录:
/customer/login
答案 1 :(得分:0)
假设counter
转换为(关联)数组,并且通道标识符存储在channel
数组中,
将转换为此方法的核心:
variable K 0
for {set i 1} {$i <= $n} {incr i} {
set counter($i) 0
}
for {set i 1} {$i <= $n} {incr i} {
while {[channelAccess $channel($i)]} {
if {$counter($i) != $K} {
if {[channelIdle $channel($i)]} {
set minimum [getMinimum [expr {$i + 1}] [expr {$i + $n}]]
if {$counter($i) < $minimum} {
accessChannel $channel($i)
} else {
deferAccess $channel($i)
}
}
incr counter($i)
} else {
deferAccess $channel($i)
}
}
}
您还需要此程序:
proc getMinimum {from to} {
upvar 1 counter counter
set minVal $counter($from)
for {set i $from} {$i <= $to} {incr i} {
set minVal [expr {min($minVal, $counter($i))}]
}
return $minVal
}
您需要定义channelAccess
,channelIdle
,accessChannel
和deferAccess
;它们是你的算法没有指定的东西。还没有什么可以说明各种变量实际更新的内容。但那是算法已转换。
请注意使用for
的模式;对于这类事情,这些都是惯用的Tcl。还要注意支撑定位;如果你使用那种风格,你的生活在Tcl中最容易。