用户中心
· 企业空间 首页 | 资讯 | 技术 | 产品 | 企业 | 直播 | 专题 | 智能制造 | 论坛| 在线研讨会
天津昆仑纵横自动化技术有限公司
企业空间 > 资料下载 > 正文
  • 上传时间:2009/1/22 9:36:05
  • 下载次数:2255
  • 授权方式: 由提供单位免费提供,本站注册用户才可以下载此文件。注册  登录
  • 详细介绍:
    基于HMIBuilder 的TCL 脚本学习
    北京纵横科技
    2008年
    Dlh
    在线浏览:http://www.hmibuilder.com/bbs/Topic.asp?id=26&BoardID=2&TB=1
    引言:
    HMIBuilder 内嵌TK/Tcl83标准库,尤其是HMIBuilder 通用版全面支持TCL 语言,下面是我们在
    HMIBuilder 基础上的各种应用测试,希望对大家有所帮助。
    注意:对已HMIBuilder 嵌入版,由于平台兼容性问题,有些Tcl 命令没有移植,比如文件操作!下面脚
    本都在通用版中测试通过。
    正文
    ?? Tcl脚本串口操作测试
    (HMIBuilder 通用版支持,嵌入版目前不支持!)
    #配置串口
    #-------------------------------------------------------------------------------#
    proc ComSetup {ComPort ComRate} {
    set iChannel [open $ComPort w+]
    set rate $ComRate
    fconfigure $iChannel -mode $ComRate,n,8,1
    fconfigure $iChannel -blocking 0
    fconfigure $iChannel -buffering none
    fileevent $iChannel readable ""
    return $iChannel
    }
    #-------------------------------------------------------------------------------#
    # 读取数据
    #-------------------------------------------------------------------------------#
    proc GetData {iChannel} {
    global output
    update
    after 2000
    set cap [read -nonewline $iChannel]
    return "$cap"
    }
    #-------------------------------------------------------------------------------#
    # 发送数据
    #-------------------------------------------------------------------------------#
    proc SendCmd {channel command} {
    global output debug
    set letter_delay 10
    set commandlen [string length $command]
    for {set i 0} {$i < $commandlen} {incr i} {
    set letter [string index $command $i]
    after $letter_delay
    puts -nonewline $channel $letter
    #if {$debug(dutConfig) == 1} {puts -nonewline $output "$letter"}
    }
    after $letter_delay
    puts -nonewline $channel "\n"
    #if {$debug(dutConfig) == 1} {puts $output ""}
    after 500
    flush $channel
    }
    #-------------------------------------------------------------------------------#
    # 测试代码
    #-------------------------------------------------------------------------------#
    set com "com6" ;
    set channelRate 9600;
    #close $channelId
    set channelId [ComSetup $com $channelRate]
    set buffer "test by dlh"
    SendCmd $channelId $buffer;
    sleep 50000
    set data [GetData $channelId]
    messagebox "Get" $data
    ?? 进制的转换
    #d 十进制o 八进制x 十六进制X 十六进制大写
    set age 10
    set msg [format "%X" $age];
    set msg [format "%x" $age];
    set msg [format "%o" $age];
    set msg [format "%d" $age];
    #10进制数转换为2进制16位显示
    proc dec2bin {dec change} {
    set bin ""
    set a 1
    while {$a>0} {
    set a [expr $dec/$change]
    set b [expr $dec%$change]
    set dec $a
    set bin $b$bin
    }
    set len [string length $bin]
    #如果8位显示,请修改16为8
    if {$len < 16 } {
    #如果8位显示,请修改16为8
    for {set i 0} {$i<[expr 16-$len]} {incr i} {
    set bin 0$bin
    }
    }
    return $bin
    }
    set sss [ dec2bin 16 2]
    set_edit_text "ObjID" $sss
    Learning,sporting and fighting!
    ?? Tcl数组
    理解Tcl 数组的捷径是,将它们视作与Perl 散列相同的东西。Tcl 数组不是用数字建立下标的线性数据
    结构,除非选择对数据强加那种解释。尽管带空格的字符串需要用引号括起或需要一个变量引用,但下标
    (或键)可以是任何字符串。
    正如一般的变量一样,使用set 命令初始化数组,如左边所示。圆括号内是给出的下标部分。请注意,圆
    括号不象花括号或双引号那样提供分组。一旦初始化为数组,就不能将变量作为单一变量来访问。如左边
    列表底部所示,数组元素也可以是列表。
    set i 1
    set j 10
    set array($i,$j) 3.14159
    incr j
    set array($i,$j) 2.71828
    ?? switch结构测试
    set x c # 请改变x 的内容, 通过Debugger 查看执行路线!
    set t0 0
    set t1 0
    set t2 0
    set t3 0
    set a 1
    set b 2
    set c 3
    switch $x {
    a {incr t0}
    b {incr t1}
    c {incr t2}
    default {incr t3}
    }
    ?? 如何获取每天早晨00点的时间值.
    #初始化时间
    set t [get_current_time]; #通过HMIBuilder 接口,获取系统当前时间
    set tStart [expr $t - ( $t % (60*60*24)) - 60*60*8 ];# - 60*60*8 就是减去8小时,为了到0
    点;
    set tEnd [expr $tTime + 60*60*24]; #获取一天的结束时间
    messagebox $tStart $tEnd ;
    Learning,sporting and fighting!
    ?? 获取32位整型数的bit位,如何处理
    最佳方案:
    set val [expr {int([get_analog_value “ sta0 ” “ val0 ” ])}];
    set c [expr {$val & (1 << 7)}]; #取val 的第7位
    set_status_val “ sta0 ” “ status0 ” [expr {$c ? 1 : 0}]; #设置对应状态量
    set val [expr {$val | (1 << 7)}]; #将val 的第7位置位
    set val [expr {$val & (~(1 << 7))}]; #将val 第7位复位
    其他解决方法:
    set bit 1;
    set data 16;
    set b [expr { $data ^ int (pow(2,$bit))}]; #data的bit位置1
    messagebox "data 的bit 位置1后为" $b;
    set bit 2;
    set data 15;
    set c [expr { $data&int(pow(2,$bit))}]; #data的bit位清0
    messagebox "data 的bit 位清0后为" $c;
    Learning,sporting and fighting!
    ?? 如何通过脚本实现一个开关量数据的取反?
    建立一个变量sta0站的开关量status0!
    在按钮中,采用下面脚本,实现取反操作:
    set a [get_status_value "sta0" "status0" ]
    set a [expr {!$a }] #取反操作
    set_status_value "sta0" "status0" $a
    ?? 工程转化的实现:
    在HMIBuilder 中,我们经常通过Y=kX+b 的方式,进行工程转换,也就是线性转化。
    但是,在实际工程中,经常通过输入量的最大/最小值和转换量的最大/最小值的关系进行转换。
    那么如何通过输入量的最大/最小值(MaxI /MinI )和转换量的最大/最小值(MaxO /MinO )算出公
    式Y(转换值)=kX(输入值)+b 中的k 和b 呢?
    下面就是程序代码:
    set MaxI [get_edit_text "edit_MaxI"];
    set MinI [get_edit_text "edit_MinI"];
    set MaxO [get_edit_text "edit_MaxO"];
    set MinO [get_edit_text "edit_MinO"];
    set k [expr ($MaxO-$MinO)/($MaxI-$MinI) ];
    set b [expr $MinO-$k*$MinI]
    messagebox $b $k;
    set In [get_edit_text "edit_In"];
    set Out [expr $k*$In+$b]
    messagebox "" $Out
    ?? Everything is string的感悟
    TCL 脚本的特点是Everything is string,使TCL 脚本命令的参数的变量字符串可以通过
    字符串命令动态获得,这样减少了判断。
    set val [get_current_select "combox_1025" 1]; #从下拉框获取站号
    set modle [format "sta%d" $val];
    set val [get_current_select "combox_1026" 1]; #从下拉框获取通道号
    set channel [format "analog%d" $val];
    set a [get_analog_para $modle $channel "description"];#动态对站和通道的参数进行设置。
    也就是,通过窗口的启动脚本将窗口中的下拉选择菜单初始化,并根据初始化的菜单,
    初始化模块通道的各个参数显示和设置构件。然后,在下拉菜单和设置保存按钮中,当
    操作结束,根据选择的模块和通道更新当前参数的刷新。
  • 企业介绍
天津纵横公司以人机界面产品组合为核心,为专属行业客户群提供最佳的系统级解决方案,我们把对行业的关注转化为实际产品的提供,始终关注自动化市场中的应用需求,努力成为成为工业自动化客户群首选的HMI系统级解决方案提供商。  纵横科技提…  更多>>
  • 产品分类
  • 该公司暂未设置产品类别
  • 联系方式

天津昆仑纵横自动化技术有限公司

联系人:纵横科技HMIBuilder

地址:天津市南开区科研西路12号科技创业中心118室

邮编:300192

电话:022-87890516

传真:022-87890516

公司网址:http://www.hmibuilder.com

  • 该空间手机版

扫描此二维码即可访问该空间手机版

  • 在线反馈
1.我有以下需求:



2.详细的需求:
姓名:
单位:
电话:
邮件:
您还没有登录,请登陆,
如果您还没有注册,点击这里注册.
  • 网友反馈
  • 宋阳 在2019/9/28 13:06:00留言
  • 留言类型:贵公司技术支持人员联系我,
  • 详细留言:hmi与plc通讯报出初始化通道错误
  • 康雨潇 在2013/10/30 14:49:00留言
  • 留言类型:我让贵公司技术支持人员联系我,
  • 详细留言:如何获取系统时间日期图元
  • 康雨潇 在2013/10/30 14:48:00留言
  • 留言类型:我让贵公司技术支持人员联系我,
  • 详细留言:如何获取系统时间日期图元
  • 刘国栋 在2012/7/24 14:33:00留言
  • 留言类型:我让贵公司技术支持人员联系我,
  • 详细留言:为什么初始化通道错误
  • 张振华 在2012/3/31 16:27:00留言
  • 留言类型:得到贵公司产品详细资料,得到贵公司产品的价格信息,
  • 详细留言:纵横科技HMIBuilder全中文组态软件 的价格及手册
更多请进入空间管理中心查看
关于我们 | 网站地图 | 联系我们
© 2003-2018    经营许可编号:京ICP证120335号
公安机关备案号:110102002318  服务热线:010-82053688
我要反馈