酷德网

Kx-m3酷自造发布!
查看: 844|回复: 1

2.0 你的第一个CODESYS程序(转载)

[复制链接]
  • TA的每日心情
    奋斗
    2017-12-16 07:07
  • 签到天数: 30 天

    [LV.5]常住居民I

    发表于 2018-4-10 14:18:01 | 显示全部楼层 |阅读模式
      在CFC编辑器中创建冷却控制的主程序
      您现在将在默认创建的主程序块PLC_PRG中描述应用程序的主要功能:如果实际温度高于温度设定值加上滞后,压缩机将被激活并开始冷却。
      如果实际温度低于设定值减去滞后,则关闭压缩机。
      为了在实现语言CFC中描述此功能,请执行以下步骤:
      1. 在设备树中双击PLC_PRG。
      ⇒CFC编辑器将打开PLC_PRG选项卡。声明编辑器以文本或表格形式出现在图形编辑器的上方。右边是Tools窗口。
      在Tools窗口中单击Input,然后用鼠标将其拖动到CFC编辑器中插入它。
      单击CFC编辑器中的元素,然后单击打开输入助手。从Variables类别中,选择Application ‣ Glob_Var下的变量rTempActual。用这种方法你可以在这里引用全局变量rTempActual。
      与3.一样,使用全局变量rTempSet创建另一个输入。
      再创建一个输入,然后点击三个问号???并将其替换为名称rHysteresis。
      ⇒因为这不是已知变量的名称,所以出现Auto Declare对话框。该名称已被填入到对话框中。
      使用Data typeREAL和Initialization值1填充Declare变量对话框中的字段。单击OK按钮。
      ⇒变量rHysteresis出现在声明编辑器中。
      现在再插入一个功能块:单击工具窗口中的Box元素,并用鼠标将其拖动到CFC编辑器中。
      ⇒功能块出现在CFC编辑器中。
      使用ADD替换???。
      ⇒( )ADD功能块由标准库提供。它将连接到它的所有输入进行相加。
      将Glob_Var.rTempSet输入连接到ADD功能块。为此,请单击输入的输出连接器,并将其拖动到ADD功能块的上部输入。
      同样,将输入rHysteresis连接到ADD功能块的下部输入。
      ⇒两个输入rHysteresis和rTempSet现在由ADD添加。
      如果您希望在编辑器中移动元素,请单击元素中或框架上的空白区域,以便选择该元素(红色边框,红色阴影)。按住鼠标并将元素拖动到所需的位置。
      在ADD功能块的右侧创建另一个功能块。它的功能是比较Glob_Var.rTempActual和Glob_Var.rTempSet + rHysteresis之和。赋予功能块GT(大于)的功能。
      ⇒GT功能块也来自Standard库,工作原理如下:IF (upper input > lower input) THEN output
      将输入Glob_Var_rTempActual连接到GT功能块的上部输入端。
      将ADD功能块的输出连接到GT功能块的下部输入。
      现在根据输入条件(Set - Reset)在GT功能块的右侧创建一个功能块,以启动或停止冷却压缩机。在字段???中输入名称SR。使用Enter键关闭功能块(SR_0)上方打开的输入字段。
      ⇒打开Declare variables对话框。
      声明名称为SR_0和数据类型为SR的变量。单击OK按钮。
      ⇒Standard库中定义的SR功能块用于在GT功能块的输出端定义THEN。出现输入SET1和RESET。
      将GT功能块右侧的输出连接器连接到SR_0功能块的SET1输入。
      ⇒SR可以将一个布尔变量从FALSE设置为TRUE,然后再返回。如果输入SET1的条件满足,则布尔变量设置为TRUE。如果满足RESET条件,变量将重新复位。我们例子中的布尔(全局)变量是bCompressor。
      创建一个元素Output并将其分配给全局变量Glob_Var.Compressor。在Glob_Var.Compressor和SR的输出连接器Q1之间画一条连线。
      现在指定压缩机应该再次关闭的状态,即SR功能块的RESET输入接收到一个TRUE信号。
      要做到这一点,你要制定与上述相反的条件。
      使用功能块SUB(减)和LT(小于)来做到这一点。
      最后创建下面的CFC图表:


      在梯形图编辑器中创建信号管理的程序块
      在另一个程序块中,您现在将执行警报蜂鸣器的信号管理与打开和关闭灯泡。适合用梯形图(LD)语言实现。
      在单独网络中处理以下信号:
      * 如果压缩机由于温度过高而运行时间过长,则通过连续的声音信号引起注意。
      * 如果门打开时间过长,则通过间歇信号引起注意。
      * 只要门打开,灯就亮。
      在设备树的Application下方,使用Ladder Diagram (LD)实现语言创建一个类型为Program的POU对象。名称为Signals。
      ⇒Signals对象出现在PLC_PRG下面的设备树中。在梯形图编辑器打开Signals选项卡。声明编辑器出现在上部,Tools窗口出现在右侧。LD包含一个空网络。
      在网络中创建一个程序,当压缩机运行时间过长而没有达到温度设定值时,会发出声音信号。为此,插入一个定时器功能块TON。它在指定的时间之后才将布尔TRUE信号切换为TRUE:在Tools窗口中的Function blocks下选择一个TON,并用鼠标将其拖入空网络,然后拖到出现的矩形Start here处。当字段变为绿色时释放鼠标按钮。
      ⇒功能块显示为带有输入和输出的矩形,并自动给出实例名称TON_0。上面的输入默认已经显示为功能块上游的触点。
      注意
      如果要阅读功能块的在线帮助,请将光标放在功能块的“TON”字符串中,然后按F1键。
      编程时,只要冷却压缩机开始运行,功能块就会被激活:为此,请在功能块Glob_Var.Compressor的上部输入处命名触点。您已经在GVL Glob_Var中定义了这个布尔变量。
      注意
      当您开始在输入位置输入一个变量名时,您将自动获得名称以输入字符开头的所有变量的列表,并且可以在此处使用。这种帮助是CODESYS选项中用于智能编程的标准设置。
      插入要激活的信号。为此,从工具类别Ladder elements拖动一个Coil到TON功能块的输出端Q. 将线圈命名为Glob_Var.bSignal。
      定义从TON功能块激活直到信号发出的时间段:该定义通过变量Glob_Var.timAlarmThreshold进行,该变量为TON_0的输入PT。为此,请单击输入连接右侧的细边矩形,然后输入变量名称。
      点击TON功能块并在上下文菜单中选择Remove unused FB call parameters命令。
      ⇒未使用的输出ET被删除。
      在LD的第二个网络中,编程使得如果门打开时间过长,会间歇发出信号。
      在“编辑器”窗口中单击第一个网络下面的地方,然后在上下文菜单中选择Insert network命令。
      ⇒显示编号为2的空白网络。
      与在第一个网络中一样,实现一个TON功能块,用于时间控制激活信号,这次由输入IN的全局变量Glob_Var.rDoorOpen触发。在输入PT,添加全局变量GlobVar.timDoorOpenThreshold。
      另外,在该网络的TON功能块的输出端Q上,从Util库中添加一个BLINK功能块,并命名为Blink_0。
      BLINK对转发Q的信号进行计时,并因此对GlobVar.bSignal进行计时。
      在两个触点后面插入一个coil元素,并为其分配全局变量lob_Var.bSignal。
      为此,声明局部变量timSignalTime:TIME:= T#1S;,并在输入TIMELOW和TIMEHIGH处插入此变量;因此循环时间对于TRUE为1秒,对于FALSE为1秒。
      单击TON功能块并在上下文菜单中选择Remove unused FB call parameters命令。
      ⇒未使用的输出ET被删除。
      在LD的第三个网络中,只要门打开,灯就会亮起来。
      要做到这一点,插入另一个网络,在它的左边,GlobVar.rDoorOpen,直接连接到线圈Glob_Var.bLamp。
      CODESYS连续处理LD的网络。现在,在网络1的末端插入跳转到网络3,以确保只执行网络1或只执行网络2:
      通过鼠标在网络中单击或通过网络号码字段选择网络3。在上下文菜单中选择命令Insert label。用DoorIsOpen替换网络左上角标签的文字Label:
      选择网络1。Jump元素从Tools窗口的General类别拖到网络中。
      把它放在出现的矩形Add output or jump here这里。
      ⇒出现跳转元素。
      跳转目标仍然被指定为???。
      选择???并点击按钮
      从可能的标签标识中选择DoorIsOpen,然后单击OK确认。
      ⇒网络3的标签被执行。
      LD程序现在看起来像这样:



      在主程序中调用信号程序
      在我们的程序示例中,主程序PLC_PRG应该调用Signals程序进行信号处理。
      在设备树中双击PLC_PRG。
      ⇒在编辑器中打开PLC_PRG程序。
      将一个function block元素从Tools视图拖到PLC_PRG的编辑器中。
      使用输入助手,从Function block calls类别中添加功能块调用Signals程序。
      创建一个用于模拟的ST程序块
      由于本示例项目中的应用程序与实际的传感器和执行器没有关联,现在您还必须编写一个用于模拟温度上升和下降的程序。这将允许您在线模式下监控冰箱控制器的操作。
      您可以使用结构化文本创建模拟程序。
      程序升高温度,直到主程序PLC_PRG确定已经超过温度设定值并激活冷却压缩机。
      然后模拟程序再次降低温度,直到主程序再次停用压缩机。
      在Application下,插入一个Program类型和实现语言ST的POU,并命名为Simulation。
      在ST编辑器中实现以下代码:

      PROGRAM Simulation
      VAR
      T1: TON;                            //The temperature is decreased on a time delay, when the comepressor has been activated
      P_Cooling: TIME:=T#500MS;
      xReduceTemp: BOOL;                  //Signal for dereasing the temperature
      T2: TON;                            //The temperature is increased on a time delay, when the compressor has been activated
      P_Environment: TIME:=T#2S;          //Delay time when the door is closed
      P_EnvironmentDoorOpen: TIME:=T#1S;  //Delay time when the door is open
      xRaiseTemp: BOOL;                   //Signal for increasing the temperature
      timTemp: TIME;                      //Delay time
      iCounter: INT;
      END_VAR
      iCounter := iCounter+1;     // No function, just for demonstration purposes.
      // After the compressor has been activated due to TempActual being too high, the temperature decreases.
      // The temperature is decremented by 0.1°C per cycle after a delay of P_Cooling
      IF Glob_VAR.bCompressor THEN
      T1(IN:= Glob_Var.bCompressor, PT:= P_Cooling, Q=>xReduceTemp);
      IF xReduceTemp THEN
      Glob_Var.rTempActual := Glob_Var.rTempActual-0.1;
      T1(IN:=FALSE);
      END_IF
      END_IF
      //If the door is open, the warming occurs faster; SEL selects P_EnvironmentDoorOpen
      timTemp:=SEL(Glob_Var.rDoorOpen, P_Environment, P_EnvironmentDoorOpen);
      //If the compressor is not in operation, then the cooling chamber becomes warmer.
      //The  temperature is incremented by 0.1°C per cycle after a delay of tTemp
      T2(IN:= TRUE, PT:= timTemp, Q=>xRaiseTemp);
      IF xRaiseTemp THEN
      Glob_Var.rTempActual := Glob_Var.rTempActual + 0.1;
      T2(IN:=FALSE);
      END_IF

      注意
      为了方便操作和监控整个控制程序,推荐使用可视化。使用CODESYS Visualization创建的可视化文件安装在本教程的已完成示例项目中,该示例项目随标准CODESYS安装(Projects目录)一起提供。您可以将此项目加载到控制器,并启动它以查看它与可视化一起工作。在启动时,Live_Visu启动会显示冰箱的图示,该冰箱可以在不需要进行任何输入的情况下再现模拟程序的操作。但是,只要用鼠标点击on/off开关,就可以实现门的打开和关闭,并且可以调节旋转控制器针上预设的温度。我们不会在本教程中实现可视化的创建。计划在CODESYS Visualization联机帮助的上下文中提供一个合适的教程。
      任务配置中将要执行的程序的规范
      预设的任务配置包含主程序PLC_PRG的调用。对于我们的示例项目,您还必须添加对Simulation程序的调用。
      在设备树中,使用鼠标将Simulation条目拖到Task Configuration下的MainTask上。
      ⇒仿真功能块插入到任务配置中。
      如果您希望查看任务配置,请双击MainTask条目打开编辑器。
      ⇒在编辑器的下半部分的表格中,您将看到由任务调用的POU:PLC_PRG(默认插入)和Simulation。任务的调用类型是以20毫秒为间隔的Cyclic。在在线模式下,任务每个周期执行一次这两个功能块。
      定义与PLC通讯的“活动应用程序”
      应用程序Application的名称在Devices窗口中以粗体显示。这意味着这个应用程序被设置为“活动应用程序”。与控制器的通信指向这个应用程序。
      在Application上单击鼠标右键,然后在上下文菜单中选择Set Active Application命令。
      ⇒应用程序应用程序现在在“设备”视图中以粗体显示。
      调试应用程序
      在输入代码的过程中,CODESYS会立即通过相关文本下方的红色波浪线警告您有语法错误。按F11检查整个应用程序的语法,检查结果显示在消息窗口中。如有必要,使用View ‣ Messages命令打开消息窗口。然后,您可以选择一条消息并使用F4键跳转到代码中的相应位置。
      之后您只能将一个无错的应用程序加载到控制器。
      建立与PLC的连接:为此,请参阅以下部分:
      启动网关服务器和PLC
      启动网关服务器:
      程序GatewaySysTray与CODESYS一起标准安装。您可以通过此程序与网关服务器进行通信。
      网关服务器在系统启动时作为服务自动启动。检查Windows任务栏是否包含程序图标。如果网关服务器没有运行,图标如下所示:。在这种情况下,您可以通过单击图标打开“网关”菜单,然后选择Start Gateway命令。
      启动PLC:
      程序CODESYSControlSysTray也作为CODESYS标准安装的一部分。您可以通过此程序与CODESYS控制服务进行通信。从CODESYS V3.5 SP2开始,控制服务不再自动启动。这是为了防止未经授权的访问。按如下方式启动PLC:在Windows任务栏中单击,打开PLC菜单,然后选择命令Start PLC。
      如果PLC正在运行,图标变为。启动时出现的对话框表示已启动的PLC允许编程访问。请务必遵守上述安全说明!
      在第一次通信配置期间:添加网关
      双击设备视图中的Device条目 (CODESYS Control Win V3)。
      ⇒出现Device对话框的Communication Settings选项卡。
      注意
      如果这是您首次使用CODESYSV3进行的通信配置,则现在必须定义本地网关服务器。如果您已经定义了网关服务器,它将显示在Communication选项卡上。在这种情况下,您现在可以继续设置通信通道的步骤。
      网关服务器随CODESYS安装提供。
      选择命令Gateway ‣ Add Gateway。
      ⇒出现Gateway对话框。



      在输入字段Name中输入网关的symbolic name。
      在Drivers列表中选择TCP/IP条目。
      双击IP-Address行的右列并在输入字段中输入localhost。
      单击OK按钮。
      ⇒设备编辑器的Communication Settings选项卡(1)将填入网关。如果网关运行正常,则网关图形上会出现一个绿色圆圈:



      设置通讯通道
      现在定义设备的通信通道,然后通过您设置的网关使用该通道。为此,双击设备树中的Device条目,打开设备编辑器的Communication Settings选项卡。
      单击Scan network按钮,在本地网络中搜索所有可用的设备。
      ⇒出现Select device对话框(1),并列出可以与之建立连接的所有设备。



      选择您的计算机名称的树条目。
      单击OK。
      ⇒通道现在处于激活状态,相关信息出现在Communication Settings选项卡上的设备图形下方。
      注意
      现在所有的通信行为都与这个通道完全相关。如果您在项目中有多个通信通道,请记住这一点。
      在PLC上的应用:请参考以下章节
      将应用程序加载到PLC
      要求:应用程序已经编译没有错误。请参阅调试应用程序。
      1. 选择Online ‣ Login命令。
      ⇒出现一个对话框,询问应用程序是否应该加载到控制器。
      2. 单击Yes按钮。
      ⇒应用程序被加载到控制器。Devices窗口中控制器和应用程序的条目具有绿色背景。Stop出现在应用程序对象后面。控制器的当前状态出现在任务栏中:
      启动应用程序
      如果您已经按照本教程的要求操作,现在可以使用PLC Device(CODESYS Control Win V3)上的Application。
      在Devices窗口中右键单击Application对象,然后在上下文菜单中选择Start命令。
      ⇒程序运行。Devices窗口中控制器和应用程序的条目具有绿色背景。Devices出现在Application对象的后面。控制器的当前状态出现在任务栏中:
      在运行时监视和一次性写入变量值
      接下来,您可以看到各种程序功能块中变量值的“监视”,您可以在CODESYS上设置一个特定的变量值。
      您可以在功能块编辑器的在线视图或监控列表中查看应用程序变量的实际值。在这个例子中,我们将局限在功能块编辑器中进行监控。
      要求:应用程序正在控制器上运行。
      双击设备树中的PLC_PRG,Signals,Simulation和Glob_Var对象,打开编辑器的在线视图。
      ⇒在每个视图的声明部分,控制器上变量(1)的实际值出现在Value列(3)的表达式表格中(参见图示)。



      实现部分中的监视取决于实现语言:对于非布尔变量,值始终位于标识符右侧的矩形字段中。在ST编辑器中,这也适用于布尔变量。我们称之为“内联监视”。在图形编辑器中,布尔变量的值由输出连接线的颜色显示:黑色表示FALSE,蓝色表示TRUE:


      观察各个功能块中变量值的变化。例如,您可以在GVL Glob_Var中看到rTempActual和Compressor的值是如何由于模拟程序的处理而改变的。
      控制器上一次性设置变量值:
      光标放在在GVL Glob_Var的在线视图中。
      要设置新的设定值,请双击表达式rTempSet旁边的Prepared value(2)列。
      ⇒输入栏打开。
      输入值9并离开输入栏。
      要选定打开的门,请在表达式rDoorOpen旁边的Prepared value字段中单击一次。将输入值TRUE。再次单击3次将再次看到准备好的值切换到FALSE,然后返回到空,然后返回TRUE。
      要将准备好的值TRUE只写入一次,请按Ctrl + F7。
      ⇒这两个值分别被传送到Value栏(3)。变量rDoorOpen现在不再改变它的值,温度设定值现在是9度。变量timTemp变为1s,因为冰箱门现在处于“打开”状态,Simulation加热应该比之前(2s)快。
      设置断点并在运行时单步执行
      “调试”:出于故障排除的目的,您希望检查代码中某些点的变量值。您可以为执行定义断点并单步执行指令。
      要求:应用程序已经加载到控制器并正在运行。
      双击Simulation打开编辑器中的程序。
      将光标置于代码行iCounter:= iCounter + 1;并按F9
      ⇒图标出现在代码行的前面。它表示在这一行上设置了一个断点。图标立即变为。黄色箭头总是指向下一条要处理的指令。替换
      出现在任务栏。
      观察在线监测或simulation程序的声明部分中变量iCounter的值。
      ⇒变量的值不再改变。处理在断点处停止。
      按F5重新开始处理。
      ⇒一个循环后程序再次停在断点处。iCounter增加了1。
      按F8执行下一个处理步骤。
      ⇒RETURN在iCounter:= iCounter + 1;指令行的最后以黄色突出显示。
      再次按F8执行下一个处理步骤。
      ⇒处理跳转到PLC_PRG的编辑器。反复按F8显示程序是如何单步执行的。
      每次用黄色箭头标记要执行的指令。
      为了停用断点并返回到正常的处理,再次在代码行中设置光标并按下F9。然后按F5再次将该应用程序置于
      模式下。
      在运行时执行单个循环
      要求:应用程序已经加载到控制器并正在运行。
      如上所述,单步执行仿真程序中的iCounter:= iCounter + 1行。
      按Ctrl + F5或选择Debug ‣ Single Cycle以执行单个循环。
      ⇒处理运行一个循环,然后再次停在断点处。
      iCounter增加了1。
      再按几次Ctrl + F5可查看单个周期。然后按F5
      ⇒程序再次运行,没有停止,没有强制值。变量temp再次具有值1s。再次出现在状态栏中。
    回复

    使用道具 举报

  • TA的每日心情

    2018-11-26 11:35
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2018-5-6 13:12:26 | 显示全部楼层
    看不懂,这是用2.0版本的软件吗
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

    本版积分规则

    
    顶部qrcode底部
    关注酷德网订阅号,获取更多资讯!

    QQ|小黑屋|手机版|Archiver|酷德论坛 ( 苏ICP备16065247号 )|网站地图

    GMT+8, 2018-12-16 06:29 , Processed in 0.277974 second(s), 21 queries , MemCache On.

    酷德网

    © 2001-2013 Hicodesys. 技术支持 by 酷德网

    快速回复 返回顶部 返回列表