




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Obtain_HMI组态软件使用说明3.3 Obtain_HMI组态软件的类C脚本3.3.1 Obtain_HMI组态软件脚本中间代码Obtain_HMI组态软件并用了类C语言脚本,即把C语句首先编译成一种中间代码,Obtain_HMI内核采用解释的方式执行这些中间代码。 Obtain_HMI的脚本编译过程如图所示,分为词法分析、语法分析、建立符号、类型检查和代码生成等5个步骤,词法分析语法分析建立符号表类型检查代码生成语法树符号表开始结束基数数据类型:char、int、long、float、double、string常数类型:cCONST、iCONST、fCONST、sCONST Obtain_HMI中间代码所支持的核心命令有:函数指令function、main、return变量类型char、int、float、string、long、double准备被赋值的变量loadp参与运算变量入栈load参与运算常量入栈cCONST、iCONST、fCONST、sCONST数据出栈saveC、=、save、assign(都是赋值,即栈数据保存到变量)为0跳转fJump无条件跳转goto单操作数运算!、 、+=、-=、*=、/=、%=双操作数运算+、-、*、/、%、&、&、|、|、=、360)i=0; EL_Rotate=i; EL_text=i;function mainint iloadp iload EL_Rotate=loadp iload iiCONST 2+ =load iiCONST 360 fJump L1(续)loadp iiCONST 0=lab L1loadp EL_Rotateload i=loadp EL_textload i=return3.3.2 Obtain_HMI支持的类C语言 1、支持的数据类型数据类型基数数据类型char、int、long、float、double、string常数类型cCONST、iCONST、fCONST、sCONST2、支持的运算类型和运算符运算类型运算符算术运算+、+、-、-、*、*、/、/、%、%逻辑运算&、|、!位运算&、|、判断=、!=、=、=3、支持的基本语句语句类型语句条件语句if、if else循环语句for()、while()跳转语句goto、break;4、函数5、系统函数3.5 Obtain_HMI应用系统设计原理3.5.1 Obtain_HMI界面 1、Obtain_HMI主界面Obtain_HMI主界面如图所示,包括菜单、工具条、工具栏和工作区四个部分。左边属性框中的属性为对应工作区中选中器件的属性,这些属性值可以手工修改,可以手工添加和删除,也可以在运行中利用脚本程序对它们进行动态修改、动态添加和删除。左下边的树形列表框是工作区中所有器件的集中列表显示,可以通过选择该列表中的某一行来选中工作区中的器件。可以单击工具条或视图菜单中的“显示”和“隐藏”功能来显示或隐藏左边的工具栏,特别是在运行过程中,可以隐藏工具栏以增加工作区的有效显示面积。左边的通信栏用于设置、启动和停止以太网服务器端或客户端的通信,以及设置、启动和停止串口通信,也可以通过通信菜单的选择来实现相同的功能。2、Obtain_HMI器件常用的属性Obtain_HMI采用map容器来保存器件的属性,因此Obtain_HMI器件的属性可以动态地分配和设置,在分配之前并不会占用空间,没有固定分配包括没有到的属性,有利于节省内存。Obtain_HMI器件常用的属性如下:属性功能LmouseDown鼠标左键按下LmouseUp鼠标左键弹上EL_LmouseDblClicked鼠标左键双击RmouseDown鼠标右键按下RmouseUp鼠标右键弹上Rotate旋转角度(0360度)brushColor填充颜色(刷子,渐变左边颜色)brushColor2填充颜色(刷子,渐变右边颜色)counter运行时计数器counterMAX运行时计数器溢出值(最大值)fontHeight字体高度fontName字体名称fontWeight字体笔画粗细fontWidth字体宽度h器件右下角y轴坐标imgFileName背景图片名称,只能是完整的相对路径和文件名,相对路径必须是Obtain_HMI工作目录下。这所以这样做,其目的主要是为了让编辑出来的界面文件可以不用修改地在Windows桌面操作系统下运行,也可以直接在Windows CE嵌入式操作系统下运行。panWith器件边框宽度penColor器件边框外层颜色penColor2器件边框内层颜色percent用于矩形框、进度条中,代表进度的百分比。滑动条也用该属性代表滑动的当前位置。text器件显示文字的内容textBkColor器件显示文字的底色textColor器件显示文字的颜色textOutType器件显示文字的类型,该属性值等于“单行显示”时,采用单行显示方式显示文本,其它所有值都属于多行显示。toRun决定该器件是否参与运行。如果等于“true”、“True”、“TRUE”、“”(空)四种值之一,则在系统运行时该器件参与运行,否则不参与运行。type器件类型,等于“线”、“矩形”、“圆角矩形”、“圆”、“曲线”、“图像”、“文字”、“渐变矩形”、“示波器”、“信号发生器”、“滑动条”、“输入框”、“选择框”等等。w器件右下角x轴坐标x器件左上角x轴坐标y器件左上角y轴坐标waveColor示波器波形颜色waveWith示波器波形宽度waveXMax示波器X轴最大值waveYMax示波器Y轴最大值 3.5.2 闪烁、运动以及旋转等动画效果的实现 首先使用工具条中的图像、圆和矩形工具,绘制如下图所示的静态工作界面。然后根据图中标注出来的闪烁、左右运动、旋转以及大小和颜色动态变化四个器件,编辑它们的脚本,实现动态效果。旋转大小和颜色动态变化左右运动闪烁脚本的编辑方法是:对着器件单击鼠标右键,在弹出的菜单中选择“脚本编辑”功能,进入脚本编辑对话框,如图所示。脚本编辑对话框左边是类C源程序,右上边的文本框是生成的中间代码,右下边的文本框是编译生成时的出错信息。在左边的文本框中编辑好类C程序之后单击右上角的“生成”按钮即可编译成中间代码,单击右上角的“测试”按钮可以对类C源程序进行简单的词法分析测试。1、闪烁功能闪烁功能主要是在运行中动态改变圆中所填充的颜色来实现,而Obtain_HMI器件颜色的填充由刷颜色“brushColor”属性的值决定,因为在脚本中不断变换该属性的值即可产生闪烁效果。脚本代码如下:void main() if(EL_brushColor=0x00ffff)EL_brushColor=0x0000ff; else EL_brushColor=0x00ffff;2、左右运动功能左右运动功能的实现方法是动态修改器件左上角x轴坐标x属性值和右下角x轴坐标w属性值即可。由于器件原来没有i属性(脚本里的EL_i即对应器件属性i),因此这里定义一个整数类型变量i,然后把让器件属性i(即脚本里用EL_i)赋值给变量i,这样一来在第一次执行脚本时会自动给器件添加一个名为“i”,类型为“int”,默认值为“0”的新属性i。器件属性的生命同期为整个运行过程,因此属性i的生命同期也是整个运行过程,这样就可以用它当成该器件的全局变量,用于保存当前运动的计数值。左右运动代码如下所示:void main() int i; i=EL_i; i+=1; if(i=40)i=0; EL_i=i;3、旋转功能旋转功能通过动态修改器件的Rotate属性实现,该属性的单位为度,取值范围为0-360度。另外,在该器件脚本中,还通过给变量EL_text赋值,即给器件的text属性赋值,而该属性对应于器件所显示的文字,因此运行时会同时显示出当前的角度值,该角度值也是旋转的。脚本代码如下:void main() int i; i=EL_Rotate; i=i+1; if(i360)i=0; EL_Rotate=i; EL_text=i;4、大小和颜色动态变化功能大小和颜色动态变化实际上是前面介绍的闪烁和运动功能的组合,因为没有太大的特别之处,唯一不同是这里不用器件属性来保存变量i的值,而是把它保存到了3号站的映射内存空间之中。某站号的映射内存可以通过系统函数SY_getM_SYS_bit来读取,通过SY_setM_SYS_bit把数据写入映射内存中。void main() int i; int address; address=1000; i=SY_getM_SYS_bit(3,address); if(i=1) EL_brushColor=0x000000; i=0; EL_y=EL_y+10; else EL_brushColor=0x00ffff; i=1; EL_y=EL_y- 10; SY_setM_SYS_bit(3,address,i);3.5.2 信号发生器及示波器功能 在Obtain_HMI中可以非常方便地实现信号发生器及示波器功能。在工具条上提供了信号发生器的显波器工具,直接选中工具条中的按钮然后在工作区中绘制出来即可,绘制效果如图所示。1、信号发生器信号发生器的功能主要利用脚本实现,下面是一个正弦波信号发生器程序,它是原理调用求正弦的系统函数把当前的度数转换成正弦值,该正弦值在系统内部已经把1+1变换成0255,对于更加精确的正弦值,将在后继的版本中实现。脚本代码如下:void main() int i; int address; address=4; i=EL_text; i=i+1; EL_text=i; i=i*18; i=SY_Sin(i); SY_setM_SYS_int(1,address,i);如果要实现余弦波,只要把上述代码中的正弦函数改成余弦函数即可。如果要实现其它的波形,例如三角波、锯子波、矩形波等,方式与些相似,例如一个矩形波的脚本代码如下:void main() int i; int address; address=40; i=EL_i; i+=10; if(i=200)i=0; EL_i=i; SY_setM_SYS_int(1,address,i); 2、示波器示波器的功能通过调用器件函数SY_EL_wavePushback实现,该函数可以向示波器缓冲区中压入一个新的数据,也可以调用SY_EL_waveClear函数来清除示波器缓冲区中的所有内容。如果缓冲区中的数据个数大于器件属性值waveXMax,则清除所有数据,从新开始,实现示波器屏幕整屏的数据更新。属性waveYMax用于设置示波器Y轴的最大值,属性waveColor用于设置示波器波形颜色,属性waveWith用于设置波形线宽,示波器的底色、边框等与矩形属性相同。下面示例与上述信号发生器配合使用,从信号发生器保存数据的地址中读取数值并压入示波器缓冲区中,示波器脚本代码如下:void main() int i; int address; address=40; i=SY_getM_SYS_int(1,address); SY_EL_wavePushback(i);3、数值显示下面数值显示示例与上述信号发生器配合使用,从信号发生器保存数据的地址中读取数值,然后用该值更新器件text属性的值,实现数值的显示功能,脚本代码如下:void main() int i; int address; address=40; i=SY_getM_SYS_int(1,address); EL_text=i;3.6.3 人机交互功能的实现 人机交互功能包括鼠标点击事件、滑动条、输入框、进度条、弹出文本框、弹出消息框、触发报警声音、系统启动停止按钮等。1、鼠标点击事件每个器件在运行时,都会触发鼠标点击事件,并把相应的鼠标点击属性置1。该属性不会自动置0,除非在脚本中让该属性置0。下面是一个鼠标左键单击事件程序,绘制一个图形器件作为指示灯,绘制两个图形按钮,一个作为“开”按钮,一个作为“关”按钮,如图所示。运行时,鼠标单击“开”按钮,上面的指示灯变红色,直到鼠标单击“关”按钮,指示灯又变成黄色。鼠标点击事件的类C程序如下:指示灯程序开按钮程序关按钮程序void main() int i; i=SY_getM_SYS_bit(3,40); if(i=1) EL_brushColor=0x0000ff; else EL_brushColor=0x00ffff; void main() string b; if(EL_LmouseDown=1) SY_setM_SYS_bit(3,40,1); EL_LmouseDown=0;void main() string b; if(EL_LmouseDown=1) SY_setM_SYS_bit(3,40,0); EL_LmouseDown=0;2、滑动条Obtain_HMI的滑动条可以像普通的滑动条控件那样在运行过程中进行进度的调节,不同的是Obtain_HMI中的滑动条外观不同于普通的滑动条,而设计成像一个容器的样子,可以在运行进移动鼠标或按键盘的上下键来改变该容器的已装容量的百分比,变化范围为0100。如图所示是一个滑动条,它右边的矩形框可自动地根据滑动条的进度值的变化而变化,程序如下:滑动条程序自动变颜色的矩形框程序void main() int percent; percent=EL_percent; SY_setM_SYS_int(3,40,percent);void main() int buff; buff=SY_getM_SYS_int(3,40); EL_brushColor=buff;3、输入框Obtain_HMI的输入框可以在运行过程中手工输入数据,包括输入字符,其它功能与Obtain_HMI的文本框相同。Obtain_HMI文本框,用于显示字符串或数字,它可以在运行前设置text属性或运行时通过脚本修改text属性来改变显示内容,但不能在运行中直接地手工输入内容。如图所示是一个输入框,运行时修改输入框的值,它右边文本框中的显示内容也跟着修改。程序如下:输入框程序右边文本框程序void main() int data; data=EL_text; SY_setM_SYS_int(3,50,data);void main() int buff; buff=SY_getM_SYS_int(3,50); EL_text=buff;4、进度条进度条与滑动条的功能有点相似,可以通过修改percent属性来改变显示的进度,不同的是进度条不能在运行时直接用鼠标移动或上下键来修改percent而只能通过脚本进行修改。5、弹出消息框弹出消息框是在运行之中,由脚本调用void SY_MessageBox(string str)函数可以弹出一个消息框,消息框的内容由SY_MessageBox函数的参数指定。6、弹出文本框弹出文本框是在运行之中,由脚本调用string SY_InputBox()函数可以弹出一个对话框,对话框中有一个文本框,可以在文本框中手工输入数据,确定后把输入的数据返回给准备被赋值的变量中。下面弹出消息框程序的功能是用户单击鼠标左键时,系统会弹出消息框,显示“你单击了鼠标左键!”。下面弹出文本框程序的功能是用户单击鼠标左键时,系统会弹出一个对话框,用户输入内容后确定,则输入的内容被赋值给变量b,然后程序调用SY_MessageBox函数弹出消息框,显示出刚才用户在对话框中输入的内容。弹出消息框程序弹出文本框程序void main() if(EL_LmouseDown=1) SY_MessageBox(你单击了鼠标左键!); EL_LmouseDown=0;void main() string b; if(EL_LmouseDown=1) b=SY_InputBox(); SY_MessageBox(b); EL_LmouseDown=0;7、触发报警声音触发报警声音通过调用系统函数void SY_Beep(int frequency,int time_limit)实现,第一个参数代表报警声音频率,第二个参数代表报警声音延续的时间长度(毫秒)。目前报警声音只能在Windows桌面操作系统下工作,因为目前的Windows CE嵌入式操作系统版本中还没有通用的报警声音函数和功能。下面是一个触发报警声音程序,该程序可以发出一个声音从低频到高频变量的报警声音。8、系统启动和停止按钮系统启动和停止功能由调用系统函数SY_Run和SY_Stop实现。下面的系统启动停止按钮程序是一个系统启动和停止按钮的脚本,如果要启动系统,可以用鼠标右键单击该按钮,在弹出的菜单中选择“测试”,注意按钮的counterMAX属性要设置为1,这样即可以通过“测试”菜单启动系统。系统启动后,再对该按钮单击鼠标左键即可以停止系统。触发报警声音程序系统启动停止按钮程序void main() int i;for(i=100;iAA4、源站号用十六进制表示,源站号用于标识数据帧发出的来源。上位机站号默认为0001,范围一般为0001000F;PLC站号默认为0x0011,范围一般为001100F0;执行机构站号默认为0101,范围一般为010101F0。5、数据长度用ASIC表示,数据长度仅仅指其后面紧跟的数据类型和正文数据两部分的长度,单位为字符。默认长度为0C,数据类为2个字符,数据地址点4个字符,数据正文为8个字符,这也叫做一个“标准帧”。6、数据地址数据地址表示数据将存放到目标站中的哪一个地址中,地址也表示了数据所实现了与该地址映射对应的功能。例如,1位地址0001,代表了PLC输入端口I0.0,如果传输的数据为00000001,代表让PLC输入端口I0.0为高电平。采用1位数据地址与32位数据地址独立编码的方式。另外,1位数据地址也可以采用32位数据地址来访问,只不过访问一次2位数据地址等效于一次同时访问了32个1位数据地址,这样做的好处是可以一次就读取32个IO口的状态。7、数据类型数据类型采用ASIC表示,主要用于标识数据类型、操作类型等。(1)默认时,用高四位代表查询指令还是控制指令,定义为:1X代表查询指令2X代表控制指令3X代表返回数据(2)默认时,低四位用于表示数据类型,定义为:X1代表位数据(1位)X2字符数据(8位)X3字节数据(16位)X4字数据(32位)剩下的取值还可以用于代表其它数据类型,例如整数(32位)、浮点数据(32位)以及字符串等。8、数据正文用ASIC表示,数据正文即通信传输的真正数据,默认为8个字符,4个字节,并以ASIC的字符来表示一个十六进制数据,例如8个字符的数据为用ASIC“00001234”,表示的是00001234数据。在传输过程中,真正输送的十六进制数据是0x30 0x30 0x30 0x30 0x31 0x32 0x33 0x34。通常情况下,数据正文的基本长度为32位,如果传输的是1位数据,则只取32位中的最低一位,其它高位忽略;如果传输的是16位数据,则只取32位中的低16位,其它高位忽略;其它数据类型类似。9、校验码校验码用于校验数据帧的正确性,它的值两位ASIC值所代表的十六进数据,为前导码与校验码之间的所有数据接8位值累计所得到的结果,仅仅取累计结果的后两位。10、结束码结束码代表数据帧的结束。同时也是数据完整性的一种校验,默认值是0xFDFC。默认情况下,前导码和结束码采用于0xFFFE和0xFDFC,由于数据帧中的通信类型、目标站号和源站号三个数据不能出现0xFFFE和0xFDFC,而数据长度、数据类型 、据正文和校验码采用的是ASIC编码,因此不会再现0xFFFE和0xFDFC。对于通信类型及站号较小的系统,通信类型、目标站号和源站号三个数据也可以采用ASIC编码方式,这样将不必考虑与前导码和结束码冲突的现象。2.8.2 端口映射 对于端口映射,可以根据不同的需要,分成微型、小型、中型、大型、巨型以及扩展型等各种不同的类型,分配不同数量的端口和不同存储大小的存储单元。(1)微型名称数据类型IO口通信地址编码物理地址空间I0.0I7.71位输入IO口B0B63(0x3F)AD0AD7Q0.0Q7.71位输出IO口B64B127(0x7F)AD8AD15V0V1632位ADC输入端口C16C79AD16AD79PWM0PWM1632位PWM或DAC输出端口C80C143AD80AD143T0T1632位定时器存储器C144C207AD144AD207ST0ST1632位状态存储器C208C271AD208AD271(2)小型名称数据类型IO口通信地址编码物理地址空间I0.0I32.71位输入IO口B0B255(0xFF)AD0AD31Q0.0Q32.71位输出IO口B256B512(0x1FF)AD32AD63V0V3232位ADC输入端口C64C191AD64AD191PWM0PWM3232位PWM或DAC输出端口C1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 集安市2025-2026学年九年级下学期语文月考模拟试卷
- 电脑知识基础培训的理由
- 高考经验课件
- 电脑知识培训学堂课程课件
- 高考定义题型课件
- 电脑常用知识培训课件
- 电脑办公知识培训内容课件
- 电脑做课件的应用程序
- 电网运维专业知识培训课件
- padi考试题及答案
- 电池火灾安全知识培训课件
- 2025年CAD机械制图考试题库及答案
- 云南省澜沧拉祜族自治县2025年上半年事业单位公开招聘教师岗试题含答案分析
- 2025工会基础知识考试题库及参考答案
- 养老护理员基础照护试题(含参考答案)
- 教师职业技能提升培训教程
- 2025年安徽省宿州市辅警协警笔试笔试测试卷(含答案)
- 2025年医院财务科招聘考试题目(附答案)
- 高血压病例汇报
- 六年级上册语文1-8单元习作范文
- 第10课 公共场所言行文明 第1课时(课件)2025-2026学年道德与法治三年级上册统编版
评论
0/150
提交评论