1、SoMachine软件介绍和编程培训ConfidentialPropertyofSchneiderElectric王兆宇2018-5-12Page2ConfidentialPropertyofSchneiderElectric|1SoMachine软件简介软件简介2SoMachine软件编程入门培训软件编程入门培训3SoMachine典型编程举例典型编程举例-HSC4SoMachine典型编程举例典型编程举例-PTO5SoMachine典型编程举例典型编程举例-Modbus6SoMachine典型编程举例典型编程举例-CANopen7SoMachine在线编译、诊断在线编译、诊断SoMachi
2、nePage3ConfidentialPropertyofSchneiderElectric|ConfidentialPropertyofSchneiderElectricSoMachineV4.3编程软件编程软件V12007V22009V32011V4.12014u友好的友好的软件界面件界面u丰富的丰富的编程程语言言u灵活的配置方案灵活的配置方案u详实的在的在线帮助帮助V4.1SP12015V4.22016V4.32017V4.3SP22018ConfidentialPropertyofSchneiderElectricSoMachineV4.2/V4.3自定义安装自定义安装Windows7
3、SP1专业版32位/64位Windows8.1专业版32位/64位Windows10专业版32位/64位PC推荐配置CPU-IntelCorei7内存-8G硬盘-15G空闲空间SoMachine4.2/4.3软件下载:请关注微信号SoMachine然后在首页中下载SoMachine4.1授权在4.2/3中有效SoMachine具有具有强大的大的设备集成能力集成能力简化机器的工程阶段实现完整的机器设备程序,通过:1项目文件目文件1次下次下载1根根编程程电缆TVDA文档和项目文件可以重复使用在相同机器上,大量节省设计时间。注:TVDA:TestedValidatedDocumentedArchit
4、ecturePage6ConfidentialPropertyofSchneiderElectric|高级集成设备元件本体集成在SoMachine编程软件中,方便使用SoMachine兼容FDT/DTM使用FDT/DTM的好处:所有集成设备的一致性基于统一的标准,开放第三方产品的接入Page7ConfidentialPropertyofSchneiderElectric|通通过拖放来配置你的拖放来配置你的设备从设备和模块目录本地集成减少操作次数驱动器是器是预配置好的配置好的网络配置已经预设值完成现场总线预配置完成配置好的IO映射能够简化项目的开始阶段自动加载库文件第一步快速而且简单:拖放编译下
5、载运行!SoMachine编程入门Page8ConfidentialPropertyofSchneiderElectric|SoMachine软件件如何启动SoMachine和更改编程软件的语言从窗口的开始菜从窗口的开始菜单选择SoMachineV4.2/4.3或者双或者双击桌面上的桌面上的SoMachineV4.2/4.3打开SoMachine软件SoMachine第一次打开后是英文版第一次打开后是英文版在系统设定-logicbuilderoption-Internationalsetting-选择中文,选择后点击OK然后退出SoMachine再重新进入就是中文界面了Page9Confide
6、ntialPropertyofSchneiderElectric|SoMachine软件启件启动介介绍SoMachine软件启动画面进入入SoMachineV4.2软件后件后在启在启动界面下共有四个界面下共有四个选项最近的项目-打开最近编辑过的项目连接控制器新建项目打开项目选择新建新建项目后目后SoMachine提供4个新建项目的方式,分别是:使用助手带模块空项目新建库Page10ConfidentialPropertyofSchneiderElectric|SoMachine软件件创建新的建新的项目目使用模板使用模板中的使用模板中的TVDA创建建项目目在在带模板模板选项下面,下面,选择机器机
7、器类型并填写型并填写项目名称目名称Page11ConfidentialPropertyofSchneiderElectric|SoMachine软件件创建新的建新的项目目使用空项目创建新项目使用空使用空项目目创建新的建新的项目,目,项目中的目中的PLC、触摸屏等硬件和程序需手、触摸屏等硬件和程序需手动添加添加Page12ConfidentialPropertyofSchneiderElectric|SoMachine软件件创建新的建新的库使用空项目创建新库使用空使用空项目目创建新的建新的库-库的名称和的名称和库的属性的属性Page13ConfidentialPropertyofSchneide
8、rElectric|SoMachine主主页面面编程程环境介境介绍主界面简介多选项卡导航器:设备树、应用程序树和工具树Page14ConfidentialPropertyofSchneiderElectric|SoMachine设备树硬件配置在在设备树下双下双击需要需要编辑的条目的条目例如需要设置高速计数器则双击counter,其它设置例如PTO,逻辑输入、输出、通讯等都使用同样的方法然后进行进一步设置,例如选择高速计数器的类型为HSCsimpleIO上的上的扩展:展:Catridge、COM_Bus和和IO_Bus,采用右,采用右键菜菜单,选择“添加添加设备”Page15Confidenti
9、alPropertyofSchneiderElectric|SoMachine应用程序用程序树编程的功能应用程序用程序树包含了包含了软件件编程核心的功能程核心的功能采用右采用右键菜菜单,选择“添加添加对象象”,可添加的,可添加的对象包括最常用的象包括最常用的POU、跟踪、可、跟踪、可视化、配方化、配方.然后然后选择添加程序添加程序组织单元元POU,在,在POU中中选择此此POU是程序、功能是程序、功能块还是函数是函数Page16ConfidentialPropertyofSchneiderElectric|SoMachine应用程序用程序树续任务的配置和POU的调用在任在任务配置中可配置中可创
10、建多个任建多个任务,MAST任任务在在创建建项目后自目后自动创建建选择某一任某一任务,例如,例如MAST任任务,双,双击进入任入任务配置界面,配置界面,设置任置任务优先先级(数(数值越小越高)和任越小越高)和任务的的类型,如果是循型,如果是循环的,的,则每隔一段每隔一段设置的置的“间隔隔”时间自自动执行。行。Page17ConfidentialPropertyofSchneiderElectric|SoMachine应用程序用程序树续任务的配置和POU的调用在任在任务配置中可配置中可设置置软件看件看门狗,看狗,看门狗的狗的报警警时间时间*“灵敏度灵敏度”在在“添加添加调用用”选择在任在任务中中
11、执行的程序行的程序组织单元元POU。Page18ConfidentialPropertyofSchneiderElectric|SoMachine工具工具树库文件的添加和配置施耐德提供大量的施耐德提供大量的库文件供最文件供最终用用户使用,有些使用,有些库在添加硬件在添加硬件时自自动添加,有些添加,有些库可以手可以手动添加添加在工具在工具树还有一个重要功能是工程有一个重要功能是工程设置置Page19ConfidentialPropertyofSchneiderElectric|SoMachine六种六种编程程语言一言一FBD/LD/IL/CFC/ST/SFC梯形图LD是基于图形的编程语言,梯形图
12、语言沿袭了继电器控制电路的形式,梯形图是在常用的继电器与接触器逻辑控制基础上简化了符号演变而来的,具有形象、直观、实用等特点,电气技术人员容易接受,是电气人员编程使用比较多的语言指令列表(IL)是一种类似汇编程序的IEC61131-3编程语言,适合熟练掌握机器语言的IT人员来使用,该语言支持基于累加器的编程。支持IEC61131-3操作符以及多输入/多输出、取反、注释、输出的设置/重置和无条件/有条件跳转。每个指令主要通过使用LD操作符将值载入累加器来发挥作用。此后会使用从累加器中获得的第一个参数执行操作。操作的结果可在累加器中使用Page20ConfidentialPropertyofSch
13、neiderElectric|SoMachine六种六种编程程语言二言二FBD/LD/IL/CFC/ST/SFCFBD功能块图是面向图形的编程语言,是一种类似于数字逻辑电路结构的编程语言,是一种使用布尔代数的图形逻辑符号来表示的控制逻辑,一些复杂的功能用指令框表示,适合于有数字电路基础的编程人员使用。功能块图用类似于与门、或门的框图来表示逻辑运算关系,方框的左侧为逻辑运算的输入变量,右侧为输出变量,输入、输出端的小圆圈表示“非”运算,方框用“导线”连在一起,信号自左向右连续功能图(CFC)语言是用图形方式连接程序库中以块的形式提供的各种功能,包括从简单的逻辑操作到复杂的功能块调用。编程时将这些
14、块放到图中并用线连接起来即可。功能块自由放置,调整图形元素,允许将功能块的输出反过来接到输入。Page21ConfidentialPropertyofSchneiderElectric|SoMachine六种六种编程程语言三言三FBD/LD/IL/CFC/ST/SFCST语言是定位给程序设计者使用的,它是一个与Pascal语言相类似的高级程序设计语言.程序包含了一些象DO-WHILE、REPEAT-UNTIL、FOR-TO-DO、IF-THEN-ELSE、CASE-OF的结构语句使用,方便用户编程,虽然不直观,但是编程方便,相比梯形图来说占用空间小,建议使用SoMachine软件的编程人员都要
15、掌握这种编程方法。SFC顺序功能图,也称为顺序功能流程图,是一种强大的描述控制程序的顺序行为特征的图形化语言,可对复杂的过程或操作由顶到底地进行辅助开发,特别适合用于有固定流程的工艺过程。SFC允许一个复杂的问题逐层地分解为步和较小的能够被详细分析的顺序。SFC本身不是一种独立的语言.一个用SFC编写的程序看上去就象一个方框图,这个方框图由程序块(梯阶)、步间的转换和发生这些转换时所依赖的条件组成。Page22ConfidentialPropertyofSchneiderElectric|SoMachine编程中的程中的变量声明量声明变量声明可通过以下方式声明一个变量:在软件目录的变量视图中在
16、POU的声明编辑器中-手动添加,常用通过自动声明对话框最常用在DUT编辑器中在GVL编辑器中-手动添加,常用变量声明的语法:AT:=;:=这部分根据需要填写,可以没有初始值。变量的数据类型VAR_INPUT、VAR_OUTPUT、VAR_IN_OUT、VAR_GLOBAL、VAR_TEMP、VAR_STAT、VAR_EXTERNAL、VAR_CONFIGPage23ConfidentialPropertyofSchneiderElectric|SoMachine编程中的程中的变量声明量声明变量声明变量数值的断电保持(剩余变量和保留持久性变量):前1000个%MW会自动持久保留,如果没有使用AT
17、指令与这些变量关联。它们的值在重新启动/热复位/冷复位后得到保留。在GVL编辑器中声明为VARGLOBALPERSISTENTRETAIN,即将变量m1声明为保留持久性变量Page24ConfidentialPropertyofSchneiderElectric|SoMachine的梯形的梯形图编程界面和常用指令程界面和常用指令梯形图的编程在FBD/LD/IL编辑器中,可选择梯形图编程时的所有元素包括:插入新的网络(即新的梯级)、常开、常闭、上升沿、下降沿触点、串联或并联触点、线圈、(置位线圈、复位线圈、取反线圈)、定时器(TON,TOFF,TP)、比较器可插入跳转或返回return可通过空功
18、能块调用库中或用户自己编写的功能块可插入分支通过视图可以将程序在FBD、IL或LD三种语言中切换推荐用户尽快熟悉和使用ST编程语言Page25ConfidentialPropertyofSchneiderElectric|SoMachine的常用指令的常用指令常用基本指令基本算术指令(由IEC1131-3标准规定)可用:ADD加、MUL-乘、SUB减、DIV除、MOD-取余数、MOVE赋值操作逻辑操作操作符可用(与IEC1131-3标准匹配):AND-与、OR-或、XOR异或、NOT-取反移位操作符SHL-用于操作数的逐位左移位的IEC操作符。erg:=SHL(in,n)in:将向左移位的操作
19、数;n:in向左进行移位的位数SHR-用于操作数的逐位左移位的IEC操作符ROL循环左移ROR-循环右移Page26ConfidentialPropertyofSchneiderElectric|SoMachine的常用指令的常用指令常用基本指令移位操作符SHR-用于操作数的逐位右移位的IEC操作符,左侧以0填充。erg:=SHR(in,n)in:将向右移位的操作数;n:in向左进行移位的位数ROL-循环左移用于对操作数进行向左逐位旋转的IEC操作符。允许的数据类型:BYTE、WORD、DWORD、LWORDin将n次向左进行1个位置的移位,而距离左侧最远的位将从右侧重新插入例:ROR-循环右
20、移Page27ConfidentialPropertyofSchneiderElectric|SoMachine的常用指令的常用指令常用基本指令选择操作符SEL-选择操作符还可以通过变量来执行。用于二进制选择的IEC选择操作符。G将决定是否把IN0或IN1分配到OUT。OUT:=SEL(G,IN0,IN1);则ifG=FALSE,OUT:=IN0;ifG=TRUEOUT:=IN1MAX-取两个值中的最大值MIN-取两个值中的最小值LIMIT-限制函数OUT:=LIMIT(Min,IN,Max)N(MAX(IN,Min),Max)Max是结果的上限,而Min是结果的下限。如果值IN超出上限Max
21、则LIMIT将返回Max。如果IN低于Min,则结果将为Min。IN和OUT可以是任何类型的变量。Page28ConfidentialPropertyofSchneiderElectric|SoMachine的常用指令的常用指令常用基本指令选择操作符MUX-选择操作符还可以通过变量来执行IEC选择操作符,用于多路复用操作。OUT:=MUX(K,IN0,.,INn)意味着:OUT:=INkIN0,.,INn和OUT可以是任何类型的变量。K必须是BYTE,WORD,DWORD,LWORD,SINT,USINT,INT,UINT,DINT,LINT,ULINT或UDINT。MUX用于从一组值中选择
22、第K个值。IN和OUT可以是任何类型的变量。Page29ConfidentialPropertyofSchneiderElectric|SoMachine的梯形的梯形图编程界面和常用指令程界面和常用指令常用基本指令比较操作符GTGT操作符是布尔操作符,当第一个操作数的值大于第二个操作数的值时,返回值TRUE。LTLT操作符是布尔操作符,当第一个操作数的值小于第二个操作数的值时,返回值TRUE。LELE操作符是布尔操作符,当第一个操作数的值小于或等于第二个操作数的值时,返回值TRUE。GE-GE操作符是布尔操作符,当第一个操作数的值大于或等于第二个操作数的值时,返回值TRUE。EQEQ操作符是布
23、尔操作符,当两个操作数相等时,返回值TRUE。NENE操作符是布尔操作符,当操作数不相等时,返回值TRUE。地址操作符ADR-ADR用于返回其参数的地址,以DWORD为数据类型。此地址可以分配给工程中的指针。-可以用内容操作符,传递指针指向的内容例如pt:=ADR(var_int1);var_int2:=pt;Page30ConfidentialPropertyofSchneiderElectric|SoMachine的梯形的梯形图编程界面和常用指令程界面和常用指令常用基本指令显式转换操作符BOOL_TO转换TO_BOOL转换整数类型之间的转换REAL_TO-/LREAL_TO转换TIME_T
24、O/TIME_OF_DAY转换DATE_TO/DT_TO转换STRING_TO转换TRUNC(浮点数转换为DINT)TRUNC_INTANY_NUM_TO_ANY_._TO转换。Page31ConfidentialPropertyofSchneiderElectric|SoMachine的梯形的梯形图编程界面和常用指令程界面和常用指令常用基本指令数学函数ABS-绝对值SQRT开根号LN自然对数LOG-返回以10为底数的数字的对数值。EXP-数字IEC操作符,用于返回指数函数SIN-用于返回角的正弦值。以弧度为单位,输出变量必须是REAL或LREAL类型。COS-余弦函数TAN-正切函数ASIN
25、反正弦ACOS反余弦ATAN反正切EXPT-用于使用一个变量对另一个变量求幂Page32ConfidentialPropertyofSchneiderElectric|SoMachine的在线仿真和调试技巧Page33ConfidentialPropertyofSchneiderElectric|SoMachine的在线仿真程序的在线仿真通过编译等选项查找程序的语法错误后,可使用仿真查找程序中可能存在的逻辑错误仿真功能可以在不连接到实际PLC进行软件的调试在“在线”菜单下勾选“仿真”然后在设备树选择在线的“codesys”然后登陆如果项目是最新的,要重新检查,点击:重新重新编译Page34Co
26、nfidentialPropertyofSchneiderElectric|SoMachine的在线仿真-续程序的在线仿真在弹出的对话框确认选择“Yes”选择登录到仿真PLC“W7CN10212000810”然后SoMachine提示仿真器没有程序,在对话框中选择“是”SoMachine将下载程序,程序下载后点击运行程序运行后在编程软件中显示“运行”Page35ConfidentialPropertyofSchneiderElectric|SoMachine的在线仿真-续程序的在线仿真程序运行后,先在准备值中设好需要的数据值,然后按CTRL+F7修改值如果需要更改变量的显示模式例如改为16进制
27、显示,“调试”-“显示模式”-“16进制”Page36ConfidentialPropertyofSchneiderElectric|SoMachine的在线仿真程序的变量监视程序运行后,可以在监视窗口添加要监视的变量,这样调整程序中的问题更方便Page37ConfidentialPropertyofSchneiderElectric|SoMachine的在线仿真程序的变量的交叉参数和查找当程序比较大,变量被多次读写和调用,这时可以使用交叉参考和程序搜索功能帮助查找问题直接按Ctrl+F,查找的结果在消息变量对话框中Page38ConfidentialPropertyofSchneiderEl
28、ectric|SoMachine的内部画面和功能块演示Page39ConfidentialPropertyofSchneiderElectric|SoMachine的内部画面首先创建一个CFC编程的POU,加入ATV320控制功能块,然后创建SoMachine内部画面Page40ConfidentialPropertyofSchneiderElectric|SoMachine的内部画面添加内部画面完成后,在内部画面中选择Frame加入Page41ConfidentialPropertyofSchneiderElectric|SoMachine的内部画面在内部画面中选择Control_ATV功能
29、块,然后在m_input中的.,在输入助手中关联POU中的功能块实例Page42ConfidentialPropertyofSchneiderElectric|SoMachine项目相关目相关练习编程基础练习1在SoMachine中新建TM241的项目。练习2打开一个IMC卡的TVDA项目,观察此TVDA项目的结构。练习3创建一个库文件,用于实现卷径的计算,卷径采用R=R0+2*h*m,其中R是实时卷径,R0是卷筒的直径、h为卷材的厚度,m为卷材的圈数。编程语言不限,要求编写实现此运算的功能块的编译库,并在新项目中添加并完成调用。Page43ConfidentialPropertyofSchn
30、eiderElectric|SoMachine的ST编程语言Page44ConfidentialPropertyofSchneiderElectric|SoMachine的的ST编程程语言言梯形图的编程结构文本是一种高级语言,如果你知道如何使用高级语言来编程,像:Basic、PACSAL或C,那么你会很轻松的掌握StructuredText(ST)编程;如果了解这些高级语言,你也会看到ST有着简单、标准的结构,程序运行高效、阅读程序简洁易懂等突出的优点。ST使用了高级语言的许多传统特性,包括:变量、操作符和控制流程语句。ST提供以下功能:数字量和模拟量I/O逻辑操作和逻辑比较表达式算术运算判断
31、语句循环语句功能块可选用的动态变量诊断工具Page45ConfidentialPropertyofSchneiderElectric|SoMachine的的ST编程程语言言编程基础表达式表达式是指返回变量评估值的结构。表达式由操作符和操作数组成。操作数可以是常量,变量,调用函数或其它表达式。赋值操作符通过一个表达式和一个值来给变量赋值。赋值语句包括位于左边的变量,赋值操作符“:=”,及后边需要计算的表达式。所有的语句,包括赋值语句,必须要以分号“;”结尾。注意“=”是比较两者是否相等!注释虽然注释经常被删掉,但它们是源代码中非常重要的一部分。它们解释了一部分代码,使程序更易读懂。注释帮助你或其
32、他人读你的程序,即使过去了很长时间。注释不被编译,因此不会影响程序的执行。注释应该用一对星号和小括号括起来“(*comment*)”或者在原有的程序加两个反斜杠“/”使原来的程序不起作用Page46ConfidentialPropertyofSchneiderElectric|SoMachine的的ST编程程语言言编程基础操作符优先级如果在一个表达式中使用几个操作符,就会出现优先级的问题(执行的顺序)。操作符按优先级的顺序来执行。在任何一个表达式中,首先执行最高级别的操作符,接着执行低一级的操作符,等等,直到执行完所有的操作符。具有相同级别的操作符按照书写顺序从左至右依次执行。Page47Co
33、nfidentialPropertyofSchneiderElectric|SoMachine的的ST编程程语言言编程基础SoMachine的数据类型SoMachine的数据类型分为两类:标准型和用户定义类型。标准型的数据类型BOOL、整数、REAL/LREAL、STRING、时间数据类型(TOD和DT)和某些标准型的扩展Page48ConfidentialPropertyofSchneiderElectric|数据数据类型型下限下限上限上限存存储器空器空间BYTE02558位WORD065,53516位DWORD04,294,967,29532位LWORD0264-164位SINT12812
34、78位USINT02558位INT32,76832,76716位UINT065,53516位DINT2,147,483,648 2,147,483,64732位UDINT04,294,967,29532位LINT263263-164位ULINT0264-164位REAL1.401e-453.403e+3832位LREAL2.2250738585072014e-3081.7976931348623158e+30864位TIME或或LTIME类型型举例例TIME1:=T#14ms;TIME1:=T#100S12ms;TIME1:=t#12h34m15s;LTIME1:=LTIME#1000d15h
35、23m12s34ms2us44nsDATE值可以内部方式可以内部方式处理理为DWORD值,包含从,包含从1970年年01月月01日日00:00时钟时间开始的开始的时间范范围,以秒,以秒为单位。位。例如:例如:DATE#1996-05-06d#1972-03-29TIME_OF_DAY值可以内部方式可以内部方式处理理为DWORD值,包含从,包含从00:00时钟时间开始的开始的时间范范围,以毫秒,以毫秒为单位。位。例如例如TIME_OF_DAY#15:36:30.123tod#00:00:00SoMachine的的ST编程程语言言数组和结构扩展的数据类型-数组支持将一维、两维或三维数组。在POU的
36、声明部分以及全局变量中定义数组。还可以使用隐式边界检查。:ARRAY.,.,.OF,其中,ll1,ll2,ll3标识字段范围的下限。ul1,ul2和ul3标识字段范围的上限。范围值必须为整数类型。例如声明一个扑克牌的二维数组:Card_game:ARRAY1.13,1.4OFINT;数组初始化举例:arr1:ARRAY1.5OFINT:=1,2,3,4,5;扩展的数据类型-结构在工厂生产产品的出厂信息包括了名字、批次、出厂日期等等数据,无法用一种数据类型进行描述,这时要用到结构体数据类型。TYPE:STRUCT.END_STRUCTEND_TYPE是在工程中识别的类型,并且可以用作标准数据类型
37、结构体允许嵌套但是不支持AT指令。多边形的结构定义示例:TYPEPolygonline:STRUCTStart:ARRAY1.2OFINT;Point1:ARRAY1.2OFINT;Point2:ARRAY1.2OFINT;Point3:ARRAY1.2OFINT;Point4:ARRAY1.2OFINT;End:ARRAY1.2OFINT;END_STRUCTPage49ConfidentialPropertyofSchneiderElectric|SoMachine的的ST编程程语言言枚举扩展的数据类型-枚举一个星期七天,一年只有十二个月,红绿灯有红、白、蓝三个颜色等等。串口校验方式:奇
38、偶、无。CANopen的状态:语法TYPE(,.,)|;END_TYPE类型的变量可以采用下列其中一个枚举值并且将以第一个枚举值进行初始化。这些值与整数兼容!如果枚举值未以声明中的特定值进行初始化,则计数将从0开始。初始化时,请确保初始值在组件行中增加。Page50ConfidentialPropertyofSchneiderElectric|INIT初始化0RESET_COMM复位通讯1RESET_APP复位应用2PRE_OPERATIONAL预处理3STOPPED停止4OPERATIONAL正常运行5UNKNOWN未知6NOT_AVAIL不可用7SoMachine的的ST编程程语言言编程
39、基础布尔逻辑操作布尔逻辑操作的操作数可以是BOOL、字节、字、双字或长双字等类型。Page51ConfidentialPropertyofSchneiderElectric|SoMachine的的ST编程程语言言编程基础布尔逻辑操作编程举例1在下面的电气图中DISilo1Up是常开触点,DoValveSilo2和DoValveSilo3是常闭触点,DoValveSilo1是线圈,使用ST语言进行编程。布尔逻辑操作编程例2在下面的电气图中MotorStart是电机启动按钮,MotorStop电机停止按钮,Motor_Thermal是电机的热保护常闭触点,MotorRun是线圈和它的常开触点,应如
40、何进行编程?Page52ConfidentialPropertyofSchneiderElectric|SoMachine的的ST编程程语言言编程基础基本算术运算SoMachine提供的基本运算包括加+、减-、乘*、除/和模除Mod。变量类型在算术运算中非常重要从下面的运算结果中可以看出变量类型对计算结果的影响,当res3为整型时,程序的编译将直接报错!。Page53ConfidentialPropertyofSchneiderElectric|SoMachine的的ST编程程语言言编程基础变量类型的隐式转换该类型的转换由编译器完成。编译器将表达式中低的数据类型转换成高的数据类型。如果有两种或
41、多个类型的变量参与运算,那么必须将它们转换成相同的类型以便执行运算。编译器会将USINT转为INT进行计算,如将VAR1_INT的变量类型设为USINT,编译会报错,提示不能转换。Page54ConfidentialPropertyofSchneiderElectric|SoMachine的的ST编程程语言言编程基础变量类型的显式转换隐式转换不允许从较大的类型为较小的类型(例如,从INT到BYTE或从DINT到WORD)。因此,必须使用显式交换才能执行特殊的类型转换。显式交换基本上可以在任何基本类型之间转换。显性数据类型转换也是数据类型转换问题。我们知道,表达式的左右两边要有相同的数据类型,但
42、还需注意上面编程的问题初看好像没什么问题,但是要注意有时两个INT的和会超过INT的范围(-32768到32767),这时程序就应修改为:比较指令高级编程语言ST允许比较操作的简单结构分支。比较的结果是真(TRUE)或假(FALSE)。比较操作作为一个逻辑条件用在IF,ELSE,WHILE和UNTIL语句中。Page55ConfidentialPropertyofSchneiderElectric|SoMachine的的ST编程程语言言编程基础比较指令:判断指令:用IF语句表示判断,这里还要用到比较操作。判断分三部分:简单IF语句IFELSE语句IFELSIF语句嵌套的IF。Page56Con
43、fidentialPropertyofSchneiderElectric|SoMachine的的ST编程程语言言编程基础判断指令:最简单的IF指令基本上,如果条件表达式的结果为TRUE就执行语句。如果条件表达式的结果是FALSE,程序就执行END_IF后面的语句。条件表达式可以是简单关联的语句或用运算符(and,or等)连接的复合语句Page57ConfidentialPropertyofSchneiderElectric|判断判断语法法描述描述IFTHENIFabTHEN1.比较Result:=1;1.条件为真执行ELSIFTHENELSIFacTHEN2.比较(可选),可以有多个Resul
44、t:=2;2.条件为真执行ELSEELSE前面IF语句都不满足(可选)Result:=3;3.条件为真执行END_IFEND_IF判断结束SoMachine的的ST编程程语言言SoMachine的的ST编程程语言言编程基础IF-ELSE指令它是简单IF语句的扩展。在IF结构中应该只有一个ELSE语句。当条件为true时执行THEN后面的代码,当条件为false时执行ELSE后面的程序IF-ELSIF-ELSE运用一个或多个ELSE_IF语句可以实现多个不同的条件,而不用多个简单的IF语句创建复杂的程序逻辑。处理器自上而下地执行判定。如果条件的结果为TRUE,那么就执行属于这个条件的指令和命令,
45、之后处理器就跳到判断语句的结尾(END_IF)。在程序的一次循环中,无论下一个条件是否为TRUE,只有上面属于第一个条件TRUE的语句被执行。如果IF或ELSIF条件都不为TRUE,那么就执行属于ELSE下的指令。Page58ConfidentialPropertyofSchneiderElectric|SoMachine的的ST编程程语言言编程基础嵌套的IF语句嵌套对于依赖其它条件的条件测试很有用处。一个嵌套的IF语句其优先级低于上一层的优先级,它的执行取决于上一层IF条件的结果。使用嵌套时必须注意每个IF要和END_IF相匹配,否则会导致错误的执行顺序。当if语句中的执行语句又是if语句时
46、则构成了if语句嵌套的情形。其一般形式可表示如下:if(表达式)if语句;或者为:if(表达式)if语句;elseif语句;在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。建议在每个嵌套的IF语句和它的执行语句中使用缩排。IF语句可以嵌套在你想要的深度,但是级数过多将占用非常多的内存,所以这嵌套最多应使用3级嵌套,如果超过三级嵌套,应重新改写程序!练习:请使用ST语言编写程序判断某一年是否是闰年,仿真设置不同的数值检查程序是否正确。Page59ConfidentialPropertyofSchneiderEle
47、ctric|SoMachine的的ST编程程语言言编程基础CASE语句在CASE语句中,控制变量与几个值作比较,如果表达式的结果与其中一个值相同,那么就执行相应的语句。如果表达式的结果与任何一个值都不相同,那么就执行象IF语句一样的ELSE分支。语句执行完后,继续执行END_CASE后的程序。CASE语句的语法:CASE语句以CASE开始,以END_CASE结束,并且各自单独占一行。在CASE和OF之间的变量必须是UINT类型。在CASE的子句中,只能使用正整数,不允许使用变量名或表达式。数字不能重叠使或在几个区域内使用。Page60ConfidentialPropertyofSchneide
48、rElectric|SoMachine的的ST编程程语言言编程基础循环语句-FOR指令语法循环次数已知时,可以用for语句实现循环结构。循环变量则从“初值”开始逐次增加到“终值INT_Var:INT;FOR:=TOBYDOEND_FOR;括号中的段为可选。注意:如果等于数据类型的最大限制值,例如变量的类型为SINT而终值设为127将导致无穷循环。Page61ConfidentialPropertyofSchneiderElectric|SoMachine的的ST编程程语言言编程基础循环语句-While指令当循环次数未知,只能根据某一条件来决定是否进行循环时,用while语句或repeat语句实
49、现循环要更方便。如果条件最初并为“假”,则不会执行循环。如果条件最初为“真”,在程序运行中变为“假”,则循环会终止。WHILEDOEND_WHILE;初始和当前布尔表达式必须在循环指令内的某些点设置值变为“假”。否则,循环将不会终止,导致无限、无穷循环条件。循环语句-Repeat指令用while语句可以实现当型循环,用repeat-until语句可以实现直到型循环。repeat-until语句的含义是:重复执行循环,直到指定的条件为真时为止。REPEATUNTILEND_REPEAT;只要返回“真”,就会反复执行如果已经在第一个UNTIL计算生成,则只会将执行一次。必须在循环指令内的某些点设置
50、值“真”。否则,循环将不会终止,导致无限、无穷循环条件。练习:请编写程序求m!+(m+1)!+(m+2)!之和,当m=7,20时的值分别是多少?Page62ConfidentialPropertyofSchneiderElectric|SoMachine的的ST编程程语言言编程基础循环语句-EXIT指令EXIT语句是当终止条件满足时,退出所有的循环语句。初始和当前布尔表达式必须在循环指令内的某些点设置值变为“假”。否则,循环将不会终止,导致无限、无穷循环条件。循环语句-Contiue指令continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环,FOR、WHILE和REPEAT循环