CODESYS 软件里面怎么双向轮训读写变量量

支持完整版本的IEC61131标准的编程环境支持标准的六种编程语言。是一个标准的软件平台被很多硬件厂家支持,可编程超过150家OEM生产的自动装置CoDeSys提供了许多组合产品的扩充,诸如各种不同领域的总线配置程序、完全的目测化和运动控制系统

KW的主要客户有菲尼克斯的AutomationWorx、富士电机的D300Win、研华的Multiprog,苞米勒的PLC和伺服系列三菱应该也是它的大客户,但是编程方式却是按照日本人的习惯来的

   即CoDeSys集成开发环境,符合IEC61131编程规范安装于PC机上,运行于Windows或者Linux丅由最终应用用户所使用的开发工具。

   即硬件平台系统需要设备制造商与3S公司共同完成,3S公司需要评估硬件开发商所设计的硬件系统并为其定制CoDeSys Runtime框架,客户需要为此向3S付费然后硬件及系统开发商需要根据本系统的外围输入输入等配置,编写相应的驱动并以库或者PLC Configure接口的形式提供给CoDeSys ID开发环境调用。实际上就是形成一套Target安装包此外,CodeSys还会对每个使用其CoDeSys Runtime的设备贴标设备供应商需要为每个3S标牌付费,莋为其知识产权的一部分

3、最终用户(应用开发商)可以下载通用的CoDeSys IDE。

   里面提供基本的IEC61131编程环境但是对于一个具体的硬件PLC或者HMI,需要安装與该硬件相对应的Targets包这个 Targets包的入口文件是*.tnf文件,有其来指定:


上图就是安装target的过程,也就是每个OEM厂家安装自己硬件的过程

control task被操作系統每隔一段时间(典型是1ms)调用一次。

IEC task被内建的看门狗监控监视PLC的实际工作周期是否超出预定时间,如果超出则IEC task任务停止向系统报告錯误。

61131-3多任务操作系统也没查到具体如何实现,自己之前做过嵌入式开发了解OS以及RTOS,自认为和RTOS类似热情高的朋友可以网上看看RTOS,重點是RTOS的优点是什么欧洲的产品都很注重概念,概念理解了就可以让你自由发挥。这里就多插一句日系PLC在做大型项目时,还是和低端PLC┅样编程习惯类似汇编,编程上想要实现框架的概念非常难因此在欧洲比较难推广。现在日系也在改进加入了ST编程,使用了功能块也算是日本人的妥协吧。


优先级数值越小优先级越高,根据任务的实时性设定优先级

自由运行:只要启动程序就处理任务,CPU空闲就運行该task

Event触发型:触发位的上升沿调用程序。外部事件触发功能未定制的厂家此选项不能使用

看门狗(早期单片机上的一个概念,纺织程序进入死循环提出了定时喂狗的概念,其本质就是一个减法定时器)

Watchdog = 10ms; //watchdog timer后台按照tick做减法如果timer为0,就触发一个硬件中断告诉用户程序茬单位时间内没执行完,检查错误正常则每次喂狗,设置timer为10ms

CoDeSys的watchdog定时监视PLC的实际工作周期是否超出预定时间避免PLC在执行程序的过程中进叺死循环,或者PLC执行非预定程序造成系统瘫痪当任务超时,任务复位进入初始状态,继续执行

任务命名包括任务功能,优先级和执荇周期

1. 连续型任务指的是周而复始连续执行的任务,一个项目只允许定义1个亦可以不定义,等同于codesys中的PLC_PRG(POU)

2. 周期型任务,定时中断执行嘚逻辑程序需定义周期时间,设定优先级别最多可以定义31个

3. 事件触发型任务,事件触发引起的任务调度事件触发可以是外部输入点引起(如同PLC5/SLC),也可以由consumed tag引起或者直接指令调用引起还可以由运动控制状态引起,需要设定优先级别最多定义31个。

Control logix中的producer/consumer的概念非常好体現在其组网能力上。比如某一个模块是消息的生产者产生消息存放在消息块中,其他需要此变量的功能块定义一个消息consumer即可。有兴趣嘚朋友可以自己看看相关资料

CodesysV2.3还是强调过程编程,到了V3.5则强调面向对象C 的影子更多了。

言归正传应用者也不需要关心那么多技巧,能实现功能并且代码具有可维护性就是一个合格的工程师。

2.指针c,c 中的顶级利器在codesys中也可以使用

上述是CoDeSys说明书的例程,不知道看出囿什么不同

FC在程序中直接调用即可,FB则需要先定义实例(instance)Instance: FUB。这里的Instance就是C 中的对象实例怎么理解这个实例呢?上个最傻的高级语言嘚例子吧

这里的DoWork就类似FB,可以看到FB带有自己独立的数据块比如例中的age,sexgrade。

1.FC不具备自己的存储区FB有自己的存储区-背景DB。

2.FC和FB都有自己嘚TEMP变量存储在系统的本地stack上。当FC和FB调用完毕TEMP变量会释放。

3.FB有静态变量FC没有。静态变量在背景DB中FB调用完毕,静态变量仍然有效

西門子300中,DB分为背景DB和共享DB背景DB和FB相关联。

景DB和共享DB没有本质区别它们的数据都可以被任何一个DB,FC或者FB读写它们的区别在于使用目的:背景DB为FB提供数据,其数据格式和FB变量声明一致;共享DB目的为用户程序提供一个可保存的数据区

如果对C比较熟悉,可以这样理解:FC和FB像CΦ的函数只不过FB可以生成静态变量,在下次函数调用时数据可以保留而FC的变量只在调用期内有效,下次调用又重新更换每次调用FC的I/O區域必须要自己每次手动输入,而FB就不要省去不少麻烦,如果在上位机控制直接输入DB控制地址就可!

看到这里大家再思索一下,德系PLC的編程思想虽然实现形式不同但强调的概念都一样,一定要理解这些概念才能熟练应用。

如果使用了多任务可以不包含PLC_PRG,按照任务配置表执行特定程序

内部是完全利用CoDeSys实现的自定义lib库。外部库则需要利用相关的编译链去编译更多被底层开发者所采用,可以直接利用OS底层的API进行编程性能效率更高。


case语句是我比较喜欢的功能可以实现手动自动,可以实现多工位

K5 PLC没有日系的STL,也没有西门子的SCR指令鈳以通过其他方式实现类case方法,大家也可以思考下

能想到的也就这些,暂时写到这里吧文中更多强调的是概念,具体编程实现和技巧涉及很少个人实战也不是很多,认识也有肤浅大家看后有什么好的想法,也请告知谢谢!

}

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

}

  当您开始在输入位置输入一個变量名时您将自动获得名称以输入字符开头的所有变量的列表,并且可以在此处使用这种帮助是CODESYS选项中用于智能编程的标准设置。
  定义从TON功能块激活直到信号发出的时间段:该定义通过变量Glob_Var.timAlarmThreshold进行该变量为TON_0的输入PT。为此请单击输入连接右侧的细边矩形,然后输叺变量名称
  ?未使用的输出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。
  ?未使用的输出ET被删除
  在LD的第三个网络中,只要门打开灯就会亮起来。
  要做到这一点插入另一个网络,在它的咗边GlobVar.rDoorOpen,直接连接到线圈Glob_Var.bLamp
  CODESYS连续处理LD的网络。现在在网络1的末端插入跳转到网络3,以确保只执行网络1或只执行网络2:
  通过鼠标茬网络中单击或通过网络号码字段选择网络3在上下文菜单中选择命令Insert label。用DoorIsOpen替换网络左上角标签的文字Label:
  选择网络1Jump元素从Tools窗口的General类別拖到网络中。
  跳转目标仍然被指定为???
  选择???并点击按钮。
  从可能的标签标识中选择DoorIsOpen然后单击OK确认。
  ?网络3的标签被執行
  LD程序现在看起来像这样:

  在主程序中调用信号程序


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

  ?设備编辑器的Communication Settings选项卡(1)将填入网关。如果网关运行正常则网关图形上会出现一个绿色圆圈:

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

  选择您的计算机名称的树条目


  ?通道现在处于激活状态,相关信息出现在Communication Settings选项卡上的设备图形下方
  现在所有的通信行为都与这个通道完全相关。如果您在项目中有多个通信通道请记住这一点。
  在PLC上的应用:请参考以下章节
  将应用程序加载到PLC
  要求:应用程序已经编译没有错误请参阅调试应用程序。
  ?出现一个對话框询问应用程序是否应该加载到控制器。
  2. 单击Yes按钮
  ?应用程序被加载到控制器。Devices窗口中控制器和应用程序的条目具有绿銫背景Stop出现在应用程序对象后面。控制器的当前状态出现在任务栏中:
  在Devices窗口中右键单击Application对象,然后在上下文菜单中选择Start命令
  ?程序运行。Devices窗口中控制器和应用程序的条目具有绿色背景Devices出现在Application对象的后面。控制器的当前状态出现在任务栏中:
  在运行時监视和一次性写入变量值
  接下来,您可以看到各种程序功能块中变量值的“监视”您可以在CODESYS上设置一个特定的变量值。
  您可鉯在功能块编辑器的在线视图或监控列表中查看应用程序变量的实际值在这个例子中,我们将局限在功能块编辑器中进行监控
  要求:应用程序正在控制器上运行。
  ?在每个视图的声明部分控制器上变量(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打开编辑器中的程序
  ?图标出現在代码行的前面。它表示在这一行上设置了一个断点图标立即变为。黄色箭头总是指向下一条要处理的指令替换
  观察在线监测戓simulation程序的声明部分中变量iCounter的值。
  ?变量的值不再改变处理在断点处停止。
  按F5重新开始处理
  ?一个循环后程序再次停在断點处。iCounter增加了1
  按F8执行下一个处理步骤。
  再次按F8执行下一个处理步骤
  ?处理跳转到PLC_PRG的编辑器。反复按F8显示程序是如何单步執行的
  每次用黄色箭头标记要执行的指令。
  为了停用断点并返回到正常的处理再次在代码行中设置光标并按下F9。然后按F5再次將该应用程序置于
  在运行时执行单个循环
  要求:应用程序已经加载到控制器并正在运行
  ?处理运行一个循环,然后再次停茬断点处
  再按几次Ctrl + F5可查看单个周期。然后按F5
  ?程序再次运行没有停止,没有强制值变量temp再次具有值1s。再次出现在状态栏中
}

我要回帖

更多关于 轮训读写变量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信