精华帖由版主、管理员共同评选出的高质量技术帖,供广大网友更近一步参考学习,友好交流!精华帖作者会获得额外20~50枚兑奖西币哦!
有几台离网RGV的主驱动电机,没有采用我提议的低压直流伺服系统,机械那边还是选了380v sew电机,4kw变频电机.主要变扭的点在于前级供电方式的选择,比如选72v 100ah的动力电池,再逆变器到三相380v,再进G120吗.整个动力系统先直流逆变,再整流,再逆变输出到电机. 中间的能量耗损,发热,72v 100ah也不够4kw动力系统用多久啊, 且咨询了一家逆变器厂家4kw电机推荐逆变器要8kw,价格1w以上,逆变器体积重量巨大.有没有更合适的方案?1.西家或者第三方有没有直接基于72v dc的变频器系统?或者整流/逆变分离, dc/dc的整流单元?这个是最好的.2.pm240有一款1ac 就能做到4kw的功率单元,是不是更合适我这个应用.至少逆变器体积小3.啥也不管,干就完事了,就按机械的想法逆变到380v就完事了,体积价格什么的我也不操心.
各位前辈你们好,我现场碰到一个问题,设备是堆垛机的Z轴货叉,由PLC1500 FB284块,配合CU320控制单元控制的SEW异步伺服电机,1024 HTL A/B速度编码器加绝对值位置编码器的双闭环系统。想在发生急停类报警时用CU320控制单元DI点关联P849做到OFF3停车。CU320上的DI点的24V电源由PLC输出模块Q点输出,发生报警时我们通过程序把Q点24V输出电源断掉,我们的程序在发生报警时同样会断掉FB284块的Enable。现在碰到的问题就是如果发生报警的话即使断掉OFF3电源,如果速度设置的快一些电机不会急停,会完全变成失控状态滑行四五秒或者到极限才能停下来,只有把速度值降到某个阈值以下比如60%才可以做到急停,如果设成65%就无法刹住。 而且在实验时发现如果在Starter 上DI点关联成P849后第一次按下急停设备是可以刹住的,但是把设备复位第二次按下急停又不起效果了,如果把DI点关联P845 进行OFF2即使高速也可以正常刹车,但是由于OFF2刹车过于暴力有的现场不太适合。我们在G120上使用过没碰到此问题,目前只在S120上发现此问题,目前我们的解决办法就是刹车采用OFF2或者进行降速处理,前辈们帮我分析下问题出在哪里呢目前情况:无论以OFF1刹车还是DI点关联P849进行OFF3刹车,只要FB284块的Over V速度比例设置快一点点,哪怕设备刚起步速度很慢情况下就触发报警或者急停,设备还是会滑行很远,R46.0或者R46.3都有反应,R46.2无反应。如果DI点关联P845 OFF2刹车可以在任何速度下停止R46.2反应正常。调整编码器设置,修改程序不断使能等均无作用
30kW的西门子S120变频器,带两台电机拖动台车行走,台车属于短时工作制设备,动作频率很低,但是未加装进线电抗器,启动瞬间,整流模块烧坏了,加装进线电抗器有必要么?
TIA Package Manager是一款新型应用程序,专门设计用于简化西门子TIA Portal库的下载和管理。它具有高级搜索过滤器、实时结果显示和兼容性检查功能,可实现全局库、TIA插件和示例项目的快速安装和管理。该工具显著减少了PLC编程所需的时间和工作量。概述应用程序ID 标题LSKI SIMATIC运动学集成器 LDrvSafe SINAMICS驱动器的安全库 LGF SIMATIC PLC通用功能 LLnCtrl 线路运动控制 LCalcMC 运动轮廓细节计算 LKinAddon 运动学附加组件 LKinLang 运动学语言 LAxisCtrl 轴控制 - 标准应用 LProdReg 产品注册 LConSMC SIMATIC卷绕机和张力控制 LPallPatt 码垛模式生成器 LKinCtrl 运动学控制 LCamHdl 运行时凸**创建 LKinMCtrl 运动学手动控制 LBC 基本控制库 (LBC) LCommSuite (Formerly Libraries_Comm_Controller) SIMATIC Communication Suite (Libraries for Communication for SIMATIC Controllers) LAcycCom Acyclic Data Exchange LHmiTemplateSuite HMI Template Suite LFlyingSawBasic_S7-1200G2 Flying Saw - FlyingSawBasic LHSCTO_S7-1200G2 Connect external encoder and measuring input via HSC and use with TOs Siemens.Sinamics.Democase TIA Add-In: Automated creation of SINAMICS democases Siemens.S120.MotorModuleChange SINAMICS S120 Motor Module Change TIA Portal Add-In Siemens.Lrwdb.Generator Generator of Library for Read and Write DB data LPD Libraries of PLC data types (LPD) LPD Libraries of PLC data types (LPD) LFS Flying Saw Advanced (LFS)
蒋 政一、Python与PLC的通讯二、Python的视觉处理2.1摄像头画面的获取2.2对画面的视觉处理关键词:上位机、通讯、画面获取、画面处理一、Python与PLC的通讯Python可作为PLC上位机的一种,与PLC进行通讯连接。Python的使用通过PyCharm软件来实现。在创建完文件后,我们便可以进行与PLC通讯,首先我们需要先下载一个叫做HslCommunication的软件包,具体操作为先打开终端,再输入代码pip install HslCommunication。在下载完成后,我们创建一个python项目,需要导入我们下载的软件包。这里我们使用了其中的两个类SiemensPLCS和 SiemensS7Net。SiemensPLCS是用于定义西门子 PLC 的不同型号的一个类,SiemensS7Net借助 S7 协议实现与西门子 PLC 的通信。你可以用它来连接 PLC、读取和写入数据。做完这些工作后我们便进行通讯。代码如上,创建一个 SiemensS7Net 对象 plc,指定要连接的 PLC 型号为 S200 Smart,并设置其 IP 地址为 192.168.0.88(此地址为PLC的地址)。调用 ConnectServer() 方法尝试连接到 PLC,该方法返回一个包含连接结果信息的对象,通过访问其 IsSuccess 属性判断连接是否成功,并将结果打印输出,如果连接成功,则会打印True,反之则是False。ReadBool的作用便是读取PLC中布尔变量的值,WriteBool的作用就是对PLC中的布尔变量进行写入。同理可以用其他的Read和Write指令来进行其他数据类型数据的写入和读取。如图所示。二、Python的视觉处理2.1摄像头画面的获取同与PLC的通讯一样,Python的视觉处理也需要下载额外的软件包进行辅助。这里需要下载cv2软件包。下载完之后导入软件包,便可以进行我们对摄像头画面的获取了。我们先用cv2.VideoCapture程序来定义摄像头设备,一般来说电脑自带的摄像头为第0号设备,这里使用的摄像头为外接摄像头,所以为第1号设备,因此编号为1。接下来就是camera.read指令,该指令会返回两个数据,第一个数据ret为结果判断值,若获取成功,则会返回Ture,反之则是False。而第二个返回值frame则是摄像头捕获的帧画面数据。Imshow指令为显示图片数据,其中参数的‘camera’为窗口的名字,waitKey指令为等待指令,在后面括号中填入1则是程序会等待1毫秒,这样在画面显示1毫秒后就会关闭,我们再通过while循环来重复执行,这样我们就获取了一个实时变化的摄像头画面。我们也可以通过代码对摄像头的帧画面进行保存。通过imread指令可以实现把frame突然以指定名称保存起来。2.2对画面的视觉处理我们以识别棋盘上的棋子为例。这里采用的方法是先进行形状检测,通过识别出图片里面的圆形,在根据色域区分出黑子和白子。在圆形检测上,我们选用霍夫圆的检测函数:HoughCircles(image, method, dp, minDist, circles=None, param1=None, param2=None, minRadius=None, maxRadius=None)接下来对这个函数的各个参数进行解释,请看下面这张表。那么清楚各个函数的作用之后,我们便可以根据实际情况进行调参,来识别出我们想要的圆。为了方便后续操作,我们要对结果进行取整,避免小数的干扰:如此一来,我们便得到了存有圆心坐标和圆半径的一个集合。接下来就是查看我们的效果。我们使用循环遍历各个圆信息,根据得到信息在原图上进行绘画查看。这里介绍下circle函数,是一个用于画圆的参数,其第一个参数img为画圆的图片,(i[0],i[1])为圆心的x与y坐标,i[2]为画圆的半径,(0,0,255)为画圆线的颜色,2为线的宽度。我们可以看下效果。可以看到,所有的棋子都已被识别出来,接下来需要做到的是区分棋盘上的棋子和黑白棋子。我们需要确定棋盘在图片上的像素范围。我们这边可以使用鼠标事件,绑定到窗口,这样我们便可以通过鼠标点击来获取图片上某个点的坐标。这样我们便获取了棋盘的坐标范围。那么接下来我们便对黑白的颜色进行区分,这里我们先将图片转化成hsv图像,并通过代码获取某个特定点的hsv数值。区别黑色和白色最明显的是v亮度,我们判断亮度在150以下的为黑子,大于的为白子。由此我们便可以把代码修改为:我们将黑子用红圈圈出,白子用蓝圈圈出,效果展示:这样我们就实现了我们的目标。
有一台轨道车,被机械设计成了双驱,轮式驱动,长度3米.双驱动都是sew电机标配的堡盟ttl编码器,拟采用g120闭环控制.一个跑速度环,1个跑扭矩限幅.本身没有使用过G120的扭矩控制模式.双轴都用profinet给定速度,但是跑扭矩的从动轴比速度环的主动轴这个速度略快,主动轴通过模拟量输出扭矩给从动变频器.这样的方式是否最合理.另外车是跑定位控制的,需要在工位间频繁加减速做定位控制,这样的方式是否有弊端.
1. 前言这也是24年春节之前的事了,我一同学在国产一知名DCS品牌工作,接了个改造项目,其中有一个是DCS作主站和另一个台S7-300PLC通讯,技术协议签的是用ProfiBus-DP通讯,于是我找了找S7-300 PLC的样本,就找到了一个CP342-5模块,之后也专门从西门子官方论坛里面搜索了相关资料,也使用搜索引擎找了一些文档,文档中的处理过程都挺简单的,于是信心满满的推荐了这个模块,下面就是做这次通讯的详细过程了。由于工厂管理比较严格,进厂调试的时候不准带手机,笔记本也需要开出入证,所以现场的图片就没有了,只有部分截图。另外也吐槽一下,由于化工厂生产特点吧,污水处理厂不能长时间停机,下面的处理过程基本上就是协调工厂生产,临时停车几分钟处理,如果事情不顺利,那就得赶紧恢复原来的状态,赶紧生产。2. 系统简介改造项目是一个化工厂的污水处理系统。该系统有两套为一套污水和二套污水,分别使用了一套S7-300 PLC控制的,上位机是WinCC画面,一套污水就在控制室里面,使用的CP5611板走的MPI通讯,二套污水距离比较远,使用的其中一套污水本次要换成DCS控制,使用的光纤转以太网通讯到控制室。此次改造是一套污水的PLC整体换成DCS控制,但还要把二套污水的所有远程数据都传到DCS系统呢,后面就不再使用WinCC系统了。3. 硬件组态CP342-5模块到了之后,我先在PLC里面把模块最好,详细的组态就如文档里面那样,插入模块,插入新的DP网络设置DP地址和波特率,这个波特率根据DCS工程师的要求,选的9.6K操作模式选择DP 从站,下面的Test,commissioning,routing这个复选框是勾选的其他的都是默认设置,然后就是程序的编写,这个程序是后来截图的,程序编写是正确的。4. 连接硬件本来以为这是个比较简单的事情,以前300PLC硬件组态也做过,没想到又学到了。现场控制室和PLC距离有100多米吧,当时也没有开证明,我自己的电脑没有带进去,而且也没有编程电缆,所以就用现场的上位机做的硬件组态,组态完成后想着先安装硬件,再下载程序,因为在我印象中,新的以太网模块在PLC STOP模式,没有组态的时候,也是能下载程序的。于是就到现场准备,一能停机就断电安装模块,安装完成后,上电,没有看模块状态,直接跑着到控制室下载程序,下载的时候一扫网络,咦,怎么找不到,检查通讯接口设置、CPU插槽设置是正确的,再扫还是没有,一头冷汗接着就出来了,感觉不对啊,就赶紧有跑到PLC柜的地方,一看CPU在STOP模式,手动把运行开关播到STOP再拨到RUN,还是不行,而且以太网模块直接处于罢工状态,插着网线,但是接口指示灯直接不亮,怪不得找不到CPU,再断电重新上电还是不行。没办法只好先断电把模块先拆下来,然后上电PLC运行正常后,再跑回去下载硬件组态,这次比较顺利能够扫到下载,下载之后再跑过去,断电把模块安装上,上电运行正常了。5. 难点出现DP网络的连接,也是使用的原来以太网光纤里面备用的光纤,然后两端增加的DP光电转换模块,光纤已经测试好是通的,转换模块他们也用过好多次。硬件连接好就已经到了11点左右了,于是赶紧测试一下网络,DCS那边组态好之后,一试不妙,BUSF灯一直是闪烁的,网络不通,我这边检查硬件组态和程序,没有发现明显问题,又检查了光纤和转换器到两侧PLC的接线,看着光电转换模块的发送指示灯在闪,分析硬件网络是通的。由于设备恢复了运行,不能马上再次停止,也到了饭点了,就出去吃饭。吃饭的时候,打电话问了问模块代理商的工程师,然后也用风驰卡给西门子工程师打了电话问了问,发的文档也是西门子论坛里面的文档,饭后下午开始折腾,由于不能停机,先从DCS这边检查,调整网络波特率、调整组态的IO顺序,几番检查光纤、接线和光电模块的拨码设置,始终不行。如上图,在调整发送接受字节大小的时候,使用模块的诊断工具发现一个现象,下载程序之后,如果两端组态的数据大小不一致的时候,诊断记录里面能够判断出来主站和从站组态的字节数量,图上是DCS组态的8个字节,PLC我改成10个字节,这样分析,PLC和DCS之间的DP通讯应该是通的,但是不知道为啥就是不能建立数据交换,从下面的诊断内容看,感觉像是模块有哪里设置不正确,但都是根据文档配置的,也没有找到问题所在,折腾到了天黑,最终也没有弄好,只能先作罢改天再弄。6. 柳暗花明回到家继续查文档的同时也在想别的办法,由于现场不能随时停机,不好下载硬件测试,想着不行借套PLC,把模块拆下来放到DCS旁边进行通讯测试,找到问题测试通讯正常之后,再进行安装,打电话问了一下,还好朋友那有,在等快递的同事,继续搜索相关的文档查看。搜索文档的时候发现了一篇论文,上图的内容至少CP 342-5的现象是和现场情况一直,就是说的数据通讯能够建立起来,不清楚是有数据交换还是没有数据交换,但是这也总算找到一个疑点,到时候现场可以进行测试,再看其他的文档,再也找不到可疑的地方。在我找资料看的时候,DCS工程师也从他们公司的资料库里面找到了一篇文档,在模块设置的操作模式选项卡里面图片上这么说的,突然感觉可能就是这个原因,在我找到的其他资料里面,这个选项默认是勾选上的。心里也有种感觉,可能就是这里的原因,有种柳暗花明的感觉了。7. 大功告成还是等借的PLC到了之后,把CPU带到现场,把CPU的电源线、DP线等都准备好,做好模块拆下来离线测试的准备工作之后。联系生产上进行协调停产,先把硬件配置里面的“The module is an active node on the PROFIBUS subnet”这个复选框给取消勾选,然后也把波特率改成了文档上建议的500K,先进行下载测试通讯是否能够成功,如果不行,再马上把模块拆下来离线测试好,再上线。停了之后,马上下载硬件,等PLC启动的时候,观察着DP转换模块上的发送和接收指示灯快速的闪烁了起来,我和那个工程师真是和夺冠似的欢呼起来,终于行了,也不用拆模块再进行测试了。然后修改发送和接收的数据长度为项目上需要的长度,并分别对数据进行了校对,都是正确的,一直悬着的心终于能够放下来了。到了这里改造项目感觉算是完成了一半了。这次下载硬件虽然改了两个地方,一个是波特率一个就是从站下面的那个复选框,分析起来应这个复选框勾选的可能性还是比较大的。8. 分析总结8.1. 关于操作模式在官方的文档上有这么说的:DP Master 方式下:CP342-5除了作为网络中的 PROFIBUS 主站之外,也可用于S7编程、FDL 连接和连接人机界面。DP delaytime 参数一般不需设定,除非您采用 FDL 连接时,要与 DP 的I、O 点刷新时间相一致,才根据PROFIBUS 网络性能进行调整;DP Slave 方式下:CP342-5除了作为网络中的从站之外,如果选择了 The module is an active node on the PROFIBUS subnet 选择框,那么 CP 342-5 也可用于 S7 编程、FDL 连接和连接人机界面,否则CP342-5只能作为从站使用;在STEP7 帮助里面关于这个复选项的介绍是这样的DP 从站模式/选项测试、调试、路由(Test, Commissioning, Routing)(功能名称取决于 CP 类型)-选项启用时: DP 从站主动例如,如果想要经常通过此接口使用调试和测试期间所需的 PG 功能,则选中此复选框。 这也会选择DP 从站主动CP 模式。 (换言之,PROFIBUS 上的令牌传递中会涉及到该接口)。然后便可实现以下功能(功能名称取决于 CP 类型):- 编程(例如下载)- 测试(状态/修改)- S7 路由(I 从站作为网关)- S5 兼容通信(SEND/RECEIVE 接口)- S7 通信(仅适用于服务器模式并在没有通信块的一端组态连接;组态在伙伴设备上进行)注意: 在此模式中,不能组态使用通信块进行数据交换的 S7 连接这样会延长令牌循环时间。 在对时间要求严格的应用环境中,以及在不需要 S7 路由和客户端功能进行通信的情况下,请不要激活此选项。- 选项禁用时: DP 从站被动如果未选中测试、调试、路由(Test, Commissioning, Routing) 复选框,则会设置DP 从站被动CP 模式(换言之,PROFIBUS 上的令牌传递中会涉及到该接口)。在从站模式,这个选项勾选上的区别就是DP从站是主动模式还是被动模式,如果是西门子的PLC之间通讯的话,不管主动还是被动模式都是可以的,和第三方通讯,可能还得看第三方主站的兼容性怎么样了8.2. 其他选择在使用这个模块通讯不上的时候,我也在想当时选这个模块是不是选错了,还有没有别的硬件可选,后来想到如果使用DP/DP COUPLE模块用起来可能会更简单一些,这个模块就是专门连接两个Profibus-DP 主站网络,以便在这两个主站网络之间进行数据通讯。模块本身就是做从站,组态感觉也更简单一些。由于CP 342-5通讯调用的是FC1 和 FC2,不是在硬件里面组态对应的IO字节,DCS工程师看了和他们以前做通讯组态方式不一样,一直在怀疑我组态的不对。然后又搜了一下,DP/DP COUPLER模块还比CP342-5便宜不少,感觉这次真的有点选错了.....8.3. 个人总结综合的思考了一下,虽然从05年工作一开始就接触的300/400PLC,到了18年去新项目之后,再接触的都是1200/1500系列的PLC了,对300的反而有点生疏,而且现在都是Profinet,DP通讯很少了,再加上我主要是做维保工作,组态调试做的少,选型做的也少,在处理的过程中也出现了不少的失误。再加上现场条件限制,如果有停机时间,PLC可以随意的启停,也许一天的试错过程也能找到问题所在,不过最终总算弄好了,其中的失误也不算很大,毕竟有的问题西门子官方的客服也没想到是这种问题。在使用CP342-5的时候发现这个模块的最大优点是通过FC1/FC2可以在线修改收发的数据量大小,而不用进行硬件组态,CP342-5的硬件组态参数好像看着也能通过 FC 4 “DP_CTRL”这个块进行修改,这个块在帮助上说的能实现的功能有:可以使用下列作业类型: 周期/非周期全局控制;删除较早的诊断数据;设置当前DP模式;设置PLC/CP STOP的DP模式;周期性地读取输入/输出数据;设置DP从站的操作模式。还是由于不敢随便测试,怕测试的过程中再给搞的停产了,业主又会发牢骚。这个只是猜测能够实现
500kW66V变频器,现场供电电源电压只有600V多一点,因为输出电压和频率存在的正相关的关系,输出频率是否只能在600/660*50=45.45Hz以下运行,虽然变频器有自动稳压功能,能够补偿一些输出电压的有效值,但是这么低的电压会不会对控制有什么其他影响?
今天测试一个传感器时,突发奇想这个PLC电源的输入电压的极限到底是多少呢。正好手里有一台可调电源。测试过程及结果如下: 配置:ST20+AE04 将电源接入PLC电源,向下调整输入电压,当电压值到达17.08V时,AE04内部发出啸叫声,并亮红灯,S_ITR变红。电压向上调整大于17.09V时,恢复正常。S_ITR同时正常显示。当电压调整到16V时,CPU内部发出啸叫声,红灯亮起,同时掉通讯。当电压恢复至16.21V时,CPU亮绿灯,恢复正常。下限临界时工作电流为166mA,24V正常供电时工作电流为132mA。上限电压未做测试,根据内部电路丝印36A的TVS,可依此判定,上限不大于36V。手册中ST20输入电压为20.4V-28.8V,大约为典型值24V的±20%。此值为稳定工作电压值。总结: 在上述配置情况下,AE04的下限临界电压值为17.08V,CPU的下限临界电压值为16V。上限临界值,考虑器件安全未做测试。 输入电压上限值测试-------------------------------------------------------------------------------------------------------看到大家还是很想看上限测试的,也是需要满足一下自己好奇心和欲望。就在充分的准备的前提下,做了上限值测试。 首先,需要对电路进行充分的了解,依据电路板实物绘制了电路原理图。(原理图相关另开贴,点击此处跳转)根据绘制的原理图,大致的解了电源电路结构。ST20型电源板相对简单一些。滤波电容耐压值35V,TVS型号为MM7未查到相关参数,盲猜为36V,IO板分支供电电路MP2467DN电源芯片的电压输入为6VVin36V,上述两个参数,充分说明了输入电压极限破坏电压在36V及以上。 开始测试: 为确保测试时的意外,将AE04拆下,防止其额外损坏。ST20接入可调电源,从17V开始向上调整,同时测量PLC的电压输出L/M值,电源输出总是小于输入电压2V左右,这个可能与限流输出有关,只是猜测。然后直接给PLC输入端28.8V手册最大值电压,观察一会之后正常无异样,接着慢慢调整电压至30V暂停,连接编程软件,看程序无异常。观察一会之后,将输入电压值调整到32V,也是可调电源的最大输出值,观察无异常,此时电流69mA,24V输入时电流83mA,电压升高电流会随之变小。 总结: 此次测试为空载状态进行测试的,只对PLC的输入电压进行了测试,未对AE04进行测试。电压输入32V时能够正常工作,并且无异常。因可调电源最高输出限制,只能测试到32V,但已经有一定借鉴作用了。从手册最高电压28.8V,推测其极限不稳定或损坏电压应该是在最高工作电压做10%以上的冗余的。根据下限16V计算,下限为典型电压值24V的-30%,那么上限同为+30%即为31.2V,符合推测。 在查1EWX开关管资料时,意外的在论坛里找到了有关1EWX用4141代换的帖子,ST20电源板开关管1EWX电路板处也有MOS管安装位置,如果损坏,应该也可以安装修得。1EWX猜测应该是具备过流关断功能的检流保护的,没有相关资料只是猜测而已。 测试ST20型号后缀:0AA1声明:本次测试因其测试时间较短,没有做长时间测试,因此只代表本次测试结果。
驱动器设置的时专家模式,转速控制无编码器,电机参数输入,抱闸打开时间100ms,抱闸关闭时间850ms,加减速都是1S,然后电机静态学习,学习完之后手动输入上升下降,采集TRACE。如上图所示,给电机使能后进行向下运动,电机转矩先向下然后向上,实际升降装置是有下坠的,然后又达到设置的转速80.这是向上运动的TRACE图,速度也是80然后我把1755无编码器的转换速度从原先的100改为50,把1475从原先的0%改为跟随P2930,P2930设置为90.进行下降测试,发现下坠没有了如图,设置转速为80,向下运动。初始状态有转矩的话,电机会有一段时间速度为0,如果1475设置默认为0%(0%是电机的励磁电流),那么速度响应会很快。但是跟随很好,速度超了一点点立马就在80左右了,不会有超到300的现象。如上两个图所示,这是我跑的自动速度,精确定位的。当速度从0开始加时,实际速度与设定速度相差很大,虽然时间很短。但是跟随行很差,2930我设置的是90,1755设置的是50.然后我下降一米多时,电机失速了就自由落体没控制住,请问我到底时哪个参数没设置对。
本人在公司内部部署了一台双3090 24G服务器,运行DeepSeek R1 32B,基于Dify加载了公司内部的知识库,同时,将一个S7-1200PLC接入公司网络,通过西门子提供通信库的LHTTP执行post请求,将PLC的实时状态数据发送至知识库系统,实现用户通过Agent与DeepSeek进行自然语言人机交互,可以查询PLC用户中变量对应的数据,并进行推理并给出辅助建议,例如倾斜度过大,温度过高,压力过大等相关处理措施,还有诸多不完善,请大家多指正。用到的PLC通信库:PLC应急PLC内Post程序执行效果,是GIF动画格式,论坛不支持上传,我放到附件里,大家下载,论坛里多截几个图给大家看看好像附件超过2M上传不了,见谅!有兄弟需要详细流程,这个服务器那边比较啰嗦,PLC程序直接分享给大家,如果有兴趣可以相互探讨这个所谓的《智人之上》的智慧的具体应用,本人镇江明润信息科技有限公司 华文博 ***********(****),通过网盘分享的文件:DeepSeekTest.zap19链接: https://pan.baidu.com/s/1xyCtMGHQVrcSOlSisTLb_A 提取码: mrit--来自百度网盘超级会员v9的分享加入语音交互之后的视频,见网盘链接:https://pan.baidu.com/s/1kiwIxlmXW5iDmZHHPDeUJg?pwd=mrit 提取码:mrit 复制这段内容后打开百度网盘手机App,操作更方便哦
打开SIMATIC Manager时提示cannot find language resource file\\DLL
官网下载的Number_of_1例程,在使用中字节统计Bit位统计时,出现了点问题,当输入字节为0时,输出会随机输出。通过对程序的观察,在程序段2增加了一个将#OUT置0的一段程序后解决了问题。不知道大家用过个程序吗?有这个问题,与大家共同探讨。Count_Byte.pdf这个是原程序这是修改后的。
S200伺服固件升级提示要插入50M内存卡,我自己在网上买了1个别的牌子的,结果不识别。是必须要西门子1500PLC的专用内存卡吗?50M内存卡价格挺贵的
请教大家一个问题,西在通讯映射地址里没有P2280这个参数选择嘛,是不是哪里需要修改权限才能选择呢?谢谢
1、子程序和功能块的块接口、STATIC和TEMP处不能命名为stop(大小写都报错)。如图:2、系统库没有加密。调用系统库后,可以看到系统库内的程序。关于软件的其他问题欢迎大家补充。
声明:本文全文由AI助手DeepSeek生成,未做任何修改。问题为:西门子S7-1200/1500的FB管脚不分配实参有什么实际用途?在FB外部对未分配实参的管脚在IDB中对应的变量进行写操作和分配实参在本质上是否相同?(由于技术原因,联网搜索暂不可用)在西门子S7-1200/1500 PLC编程中,“FB(功能块)的管脚不分配实参”与“通过IDB(实例数据块)直接操作未分配实参对应的变量”在功能实现上看似相似,但存在本质区别。以下从技术实现、数据流控制和工程实践角度进行详细分析:---### **一、FB管脚不分配实参的实际用途**#### 1. **输入参数(Input)未分配** - **默认值机制**: 若FB接口中为Input参数定义了默认值(如 `SpeedSetpoint : REAL := 100.0`),未分配实参时将自动使用该默认值。 **用途**:简化调用过程,适用于参数值相对固定的场景(如标准设备的默认配置)。 - **运行时动态保留**: 若未定义默认值,PLC会保留IDB中该参数的**上一次调用值**(需注意初始化问题)。 **用途**:实现隐式状态保持(如电机控制中的“上次速度设定值”)。#### 2. **输出参数(Output)未分配** - **数据丢弃但存储**: 未分配Output参数时,FB的计算结果会写入IDB中的对应变量,但不会传递到外部。 **用途**: - 调试时临时屏蔽非关键输出; - 多实例调用时选择性获取数据(如同时控制10个阀门,仅监控其中3个状态)。#### 3. **输入输出参数(InOut)未分配** - **强制关联外部变量**: InOut参数必须指向物理地址或全局变量,未分配实参将导致编译错误。 **例外**:通过间接寻址(如指针)绕过限制,但需谨慎处理地址安全。---### **二、外部操作IDB变量 vs 分配实参的本质区别**#### 1. **数据流控制方式** **操作方式** **分配实参** **直接写IDB变量** ----------------------------------------------------------------------------------------- **接口规范性** 通过FB接口显式传递数据 绕过接口直接操作内部存储 **数据封装性** 高(符合面向对象设计原则) 低(破坏封装,暴露实现细节) **运行时安全性** 编译器进行类型和范围检查 无编译保护,依赖人工确保正确性 **代码可维护性** 易追踪数据来源和用途 隐式修改,增加调试难度 #### 2. **典型场景对比**- **场景1:修改电机目标速度** - **分配实参**: ```scl #MotorCtrl(SpeedSetpoint := 150.0); // 通过接口规范修改 ``` - **直接写IDB**: ```scl MotorCtrl_DB.SpeedSetpoint := 150.0; // 绕过接口直接修改 ``` - **区别**: 前者通过FB接口确保参数有效性(如自动进行范围检查),后者可能因直接写入非法值导致意外行为。- **场景2:读取电机实际转速** - **分配实参**: ```scl #MotorCtrl(ActualSpeed = rMotorSpeed); // 通过接口获取 ``` - **直接读IDB**: ```scl rMotorSpeed := MotorCtrl_DB.ActualSpeed; // 直接访问存储区 ``` - **区别**: 前者在FB执行完成后更新输出值,后者可能读取到中间状态值(如FB未完成计算时)。---### **三、技术实现差异**#### 1. **编译与运行时行为**- **分配实参**: - 编译器生成参数传递代码(如MOV指令),确保数据类型匹配; - 运行时严格遵循FB调用顺序,参数值在调用时传入/传出。- **直接操作IDB**: - 编译器仅处理地址引用,无类型或逻辑检查; - 可在任意时刻修改IDB变量,可能破坏FB内部状态机。#### 2. **数据一致性示例**```scl// FB定义FB_PID_ControllerVAR_INPUT Setpoint : REAL; // 未分配实参时使用IDB存储值END_VARVAR_OUTPUT Output : REAL;END_VAR// 调用1:通过接口修改Setpoint#PID1(Setpoint := 100.0);// 调用2:直接写IDBPID1_DB.Setpoint := 200.0;// 问题:若FB内部在扫描周期中多次使用Setpoint,直接写IDB可能导致计算过程中值突变```---### **四、工程实践建议**#### 1. **优先使用分配实参的情况** - **关键参数控制**:如安全联锁条件、设备启停信号; - **需类型检查的场景**:如浮点数范围验证、枚举类型匹配; - **多工程师协作项目**:通过接口明确数据流向,减少误操作。#### 2. **谨慎使用直接操作IDB的情况** - **调试临时修改**:快速测试时临时覆盖某个参数,但需在正式版本中恢复规范调用; - **遗留系统维护**:无法修改FB接口时,通过IDB修补逻辑; - **高性能需求**:极端优化场景下绕过接口开销(需严格测试)。#### 3. **安全增强措施** - **写保护**:对关键IDB变量设置访问权限(如HMI写保护); - **影子寄存器**:修改前先写入临时区域,确认后原子切换; - **校验机制**:添加CRC或范围检查,防止非法值注入。---### **五、总结**- **未分配实参的FB管脚**: 通过IDB存储默认值或保持状态,适用于简化调用和隐式参数传递,但需注意初始化和数据残留问题。- **直接操作IDB变量**: 绕过接口实现灵活控制,但破坏封装性,增加维护风险,应作为特殊场景的补充手段。- **本质差异**: - **数据流规范性**:分配实参符合模块化设计原则,直接操作IDB属于底层hack; - **系统安全性**:前者受编译器保护,后者依赖人工确保正确性。合理选择两种方式,可在灵活性与安全性之间取得平衡。对于关键控制系统,建议严格通过接口传递参数;对于快速原型开发或特殊优化场景,可审慎使用直接IDB操作。大家看过后,有什么想法?原来说“内事不决问百度,外事不决问谷歌”,现在看问问DeepSeek也很不错。
白骨精是名著《西游记》里的人物,生性狡滑,是要害人的,据说“吃一口唐僧肉就能长生不老”的说法,就是出自它口,为什么说好处“长生不老”,当然是因为这么说才能打动人心,自古就是“清酒红人面,黄金动人心”,要是说“吃一口唐僧肉就能长个大毒瘤”肯定就没有人再会去惦记唐长老了,这也是《西游记》里宣传战线上一个影响深远的重大“发明”,也可见舆论工作的重要性。pascal语言之父、编程泰斗、发明“结构化程序设计”理论的祖师爷Niklaus Wirth,凭借一个公式于1984年获得“图灵奖”,“算法+数据结构=程序”(Algorithm +Data Structures=Programs)真正的新概念的发明提出,改变了人们的思维模式,对后世产生了深远且巨大的影响。白骨精是擅变的,是会让情况变复杂的,是蛊惑人心的,是不易分辨的。PLC程序中的“白骨精”又在哪儿?以上图中的简图为例,程序设计中的低级的“白骨精”存在于三个地方,数据、接口、FB/FC内部的实现。数据要支持变化,传闻江湖的“数据驱动编程”是尽量编写处理数据的固定代码,支持数据的变化,就像是“白骨精”,任它再变化,它也是妖精,前面发的主贴DI信号采取了数组方式,正应此点;数据是依赖接口的,接口就像是一道门,有固定的尺寸要求,数据不匹配的话,你就不能通过,接口不是凭空而来,接口是由FB/FC外部的数据决定的;你要通过什么样的数据,我就开什么样的门;FB/FC内部的实现又是由接口决定的,你放进来什么样的数据,我就采取什么样的措施。既然”白骨精“要变化,我们就要有定力、有眼力,不要受其影响,又要分辨是非。变化不可避免,孙猴子用金箍棒在地上画了个圈,让长老不要出来,可是长老不听话,终是惹下是非,想起一张漫画,开始孩子坐在小车里哭闹不止,奶奶手里的线球扔在地上,正站在那里无计可施;后面就是奶奶坐进了小车,安心的织毛衣,而调皮的小孩正在小车外面高兴的玩耍,于是,天下太平。与其让长老画地为牢,不如让”白骨精“坐进圈里。把”白骨精“放在哪里?放在FB/FC内部?不妥,钻进肚子内,则成了心腹大患,岂止是要吃肉,恐怕连骨头都嚼碎了;放在接口?也不妥,拦腰而束,如那江面上的铁链横锁,上下都被其掣肘;还是放在”数据“里比较让人放心。《西游记》中白骨精变化了三次,三这个数字很神奇,总是有很多说法和它紧密相连,如三生有幸,事不过三,酒过三巡,三心二意,三五成行,说三道四;这里我们就不说三了,我们直接道四;四也是神奇的数字,神奇在哪里,心理学家研究发现,说是人一次只能记住四项事物,神奇吧?是不是也可以不要脸地”发明“一下新”理论“规定一下FB/FC的管脚数量,最多不得超过4个?或者可以放点水,给它加减两个的余地,最多不得超过6个?!六六大顺嘛,吉利。在固定住管脚个数之后,那么人就只能多动点心思去好好组织数据形式了。前人说,数据比编程逻辑更容易驾驭,那么为了让代码更简洁些,不如让数据更复杂些,谁让这是个数据为王的时代呢。面对上图中这么多的管脚,就问你怕不怕?即然这么多东西都是必需的,降管脚数量,就得派得力干将出马了,下面有请PLC Data Type及其一众小弟结构化数据类型出场。传说洪武大帝大杀功臣时,太子朱标极力阻拦,洪武大怒,找来一根长满剌儿的荆棘条,让太子握住,太子说这扎手啊老爹,老朱是个狠人儿,听罢一把握住,顺势用力一撸,然后就剩下一根光棍儿,递给太子说,儿啊,你爹不是想杀人,你爹这是在给你去剌儿啊。前面的主贴里的接口设计使用了array[*] of,原本是直接FB中input下使用array的,后面因为传值副本的原因,改为了FC,FC会不会感谢我没把它干掉?至于FB的input、output为什么不支持array[*] of,相信有些人暂时还没完全弄明白,简单地很,过年你要请客,在家里准备吃饭的房间,你准备了一个十人间,可忽啦啦地来了二十个吃饭的人,咋办? FB的实例数据块(背景数据块)要为接口参数开辟存储空间,需要你告诉它开辟多大的空间,而array[*] of 则是个未知数,这空间怎么开辟?FB/FC的接口要尽量简洁,数量呢要损之又损,把它搞得像西施一样,恰恰好。FB/FC的内部实现呢,通常不会经常性的修改,如果需要添加/减少数据数量,还需要修改接口和实现的话,那真的是个大灾难;毕竟,把修改接口和内部实现的权限开放给最终用户,是件风险极高的事情,而这也有违封装的初衷。年前无雪,大年初三的,却下了雨,可惜又雨太小,实在是浪不起来,只好在这里敲打一番,写写小作文,聊作消遣。
数控铣802D系统的多舛维修:1、 设备是一台二十年的老数控铣,一开始报警PROFIBUS-DP主轴380500,我想想把主轴编码器屏蔽器后,机床正常工作。(其实实际没屏蔽掉,无法简单屏蔽掉,需修改PLC程序)2、 机床开始报警400015和400000报警PROFIBUS-DPI/0错误、因为两驱动上的数码显示均无,怀疑是电源模块坏,更换后故障依旧。3、 插拔DP插头,互换插头,电缆线更换故障依旧。4、 检查I/O板内有红灯,更换I/O板后报警变了。5、 报警25202,重新检查DP头ON和OFF位置对不对,发现I/O板位置拨的位置在ON不对6、 位置全对后,又把主轴和Y轴驱动DP头互换,报警消除。7、 这事使能送电后,报警700018驱动未就绪,和急停报警3000,又检查是在更换电源模块时电源模块上的X171和X172插头接反了,把X171的短接线接到X172的故障报警点上,故使能一直无法送上。8、 这时高兴这次应该好了吧。9、在机床加工时一会儿主轴报警25201伺服故障,和主轴的21612和380500,这次更换主轴驱动。10、 更换主轴驱动后,机床主轴又报,700018驱动未就绪,25000,25201,21612,3000,380500。11、主轴编码器更换后机床彻底正常。工作总结:在工作中需严谨、仔细,若更换备件需做好标记,以免后续维修有无尽的麻烦。 维修中没有捷径。写的不好,不喜勿喷,谢谢大家。祝大家春节愉快,万事如意,阖家欢乐,新的一年工作顺利,多赚人民币!
我打算用PLCopen规则写一个HMI(faceplate)+PLC +V90(EPOS)。为什么EPOS编程相对于工艺对象编程而言,不是那么被普通用户接受?让我们先看看“工艺对象-运动控制”有哪些优点:1,按照PLCopen组织的规则编写子功能,如MC_Power,MC_Reset……,MC(motion control),所有的PLC厂家集成的运动功能都按照这个规范,只是西门子把这个叫做“TO”(technology object 工艺对象)这是MC功能状态机,各个子功能的流转顺序。看看1200集成的MC功能有哪些:你就说,它是不是按照PLCopen组织的规则编写的吧? So2,按照这个规则编写的程序会带来哪些好处呢?无论有多少个轴,它有统一的组态界面三下五除二地组态好之后,它有统一的调试面板和诊断面板这个调试面板相当友好,能快速检查接线、方向、速度等,而EPOS功能块目前是没有这个调试面板的:也许TIA portal V21之后会有调试面板,但与其寄希望于别人,不如自己动手。我心目中理想的程序应该是模块化(可复用)、PLC逻辑与面板集成。后面这一项目前只看到labview做到了,并且刚推出就做到了。SiVarc((SIMATIC WinCC Visualization Architect)也在走这种路线,据说是在大众和宝马生产线上使用,我也安装体验了一把,怎么评价它呢,邯郸学步。(太长,容下回分解。下一回我讲讲SiVarc为什么体验很差)
一般来说博图程序是只能升级,无法降级的,但通过一些特殊的方式还是可以将部分功能块进行降级处理的,下面介绍一下具体操作:如果功能块是SCL语言编写的,则可以直接右击功能块选择-从块生成源,这里导出的源文件可以直接在低版本软件中打开,DB块操作与这个是一样的,都可以通过源文件来操作。如果使用的是梯形图,这个是无法直接导出源文件的,目前可操作的方式可以通过特殊方式将块导出为XML文件,目前我所了解的方式有两种:一。通过高级语言如C#;使用OPENNESS接口,可以将块进行导出操作,这里导出的格式就是XML文件。导出XML文件后需要手动对xml文件进行一些简单修改,需要以文本方式打开XML文件,然后找到第三行的Engineering version=V19 / 这段语句,这里的V19就是当前博图的软件版本,根据需求可自行修改版本。修改完成后同样使用openness操作低版本博图然后将xml文件导入到项目中。二。通过博图自带的版本控制接口功能。首先需要新增工作区,新增后打开工作区,首先需要组态一下工作区,设置一下文件存放路径,设置完成后可将需要导出程序块从项目区域拖入到工作区,这时会弹出导出提示,根据提示操作即可,最终XML文件存放路径就在工作区路径/PLC名称/程序块文件夹中,这里与的一种方式一样需要修改XML文件。修改完成后使用低版本博图一样创建版本控制接口,组态版本控制区设置好工作区的路径,将修改好的XML文件复制到低版本博图的工作区,打开博图选择刷新一下工作路径就可以看到修改好的XML文件,将文件拖拽到需要导入的PLC/程序块下,至此操作就可以全部完成。总体来说还是使用方案二来操作比较方便,这种方式可以导出所有的块。需要注意的是导入时还需要考虑低版本博图是否存在该功能块,有些功能只在高版本中可用,这时导入时可能会报错。
IF Stoer_Quittierung THEN #Fehler := FALSE; END_IF; IF #Analog.Adresse 0 AND (#Analog.Faktor 0.0) THEN #Puffer := WORD_TO_INT((PEEK_WORD(area:=16#01,dbNumber:=0,byteOffset:=#Analog.Adresse))); IF (( #Puffer 30000 ) OR ( #Puffer -1728 )) THEN // -1728 = 3 mA IF SteuerspannungEIN THEN #Fehler := TRUE; END_IF; #AnalogWert_einlesen := 999.0; ELSE #Analog.Mittelwert := #Analog.Mittelwert *(1 - #Analog.Wertung) +(1 / #Analog.Faktor * DINT_TO_REAL(#Puffer) + #Analog.Offset) * #Analog.Wertung; #AnalogWert_einlesen := #Analog.Mittelwert; END_IF; ELSE #AnalogWert_einlesen := 0.0; END_IF;
今天下载了S7-200 SMART V3系统手册,看到CPU输出端子接线图,发现示意图有错误!P1039 表格A-32以及P1040 表格A-34 CPU输出端子的电源线的接法明显有问题,希望后续能修订一下。在此,提醒同行注意一下。
李 先 念一、Trace轨迹二、库文件2.1PLC库文件2.2HMI(Human-Macine Interface)库文件(HMI画面)2.3库文件的导入与导出关键词:Trace轨迹、库文件、HMI库文件,库文件导入与导出一、Trace轨迹使用Trace轨迹可以更加直观的了解到PLC中的变量的变化。硬件要求:S7-1200(固件版本V4.0及以上),最多装载2个TRACE配置,且单个配置最多可组态16个信号;S7-1500(固态版本V2.8及以上),最少装载4个TRACE配置(取决于CPU类型),且单个配置最多可组态16个信号。例如在观察水箱中液位的变化时,以Real型的液位为对象,操作如下:先添加Trace轨迹可在“采样”中更改记录的频率和时长在触发器中选择需要的触发模式,更改后切换至示意图(右上角)进行调试 立即记录:激活记录后,立即开始记录变量触发:激活记录后,仅当满足触发条件后才开始记录无触发器监视:激活记录后,立即开始记录,且不会停止,只有触发停止记录时才会停止。曲线Y轴的最大和最小值默认为0,更改到适宜区间才能观察到曲线变化。其它曲线颜色、X轴单位等设置可根据需要修改将轨迹安装到设备上,并激活记录随着时间变化,Trace曲线将显示变量的变化,如图所示若图像为多个间断的点,如图所示,则可能为所设记录频率值过小二、库文件2.1PLC库文件使用库文件可以避免重复编写相同代码,也更便于维护,提高开发效率。库分为“项目库”和“全局库”两种,均有“类型”和“模板副本”两种存储类型库的类型:支持FB、FC块、UDT(User-Defined Data Types,用户自定义数据类型)以及与HMI(Human Machine Interface,触摸屏,人机交互界面)相关的元素以项目库为例:对于PLC(Programmable Logic Controller,可编程逻辑控制器,一种工业控制设备)库文件,我们可将FB块、FC块等选中后拖拽到项目库的类型中,新建成库,新建的库为已发行版本,若要进行修改,需将库文件在项目中打开并点击“编辑类型”,修改后发布版本。在项目库中,可以通过更新库,将项目库中的内容传递至全局库中,也可以直接拖拽到全局库中(将全局库传递至项目库时也是如此)库的模板副本:可以接受块、PLC变量表、Trace轨迹等元素以全局库为例:我们可以首先在全局库中创建一个库,然后将我们需要的FB块、FC块、DB块等选中后拖拽到我们所创建库的模板副本中,并保存库文件即可 在全局库中,可以直接拖拽模板副本到项目库中(将项目库传递至全局库时也是直接拖拽)2.2HMI(Human-Macine Interface)库文件(HMI画面)HMI库文件侧重于界面设计相关的元素,用于创建美观、易用的操作界面,方便操作人员使用,下面以起保停程序的HMI面板进行示例绘制出所需要的画面并将其拖拽到我们想要存储的地方,对于全局库,要注意进行保存HMI库文件的传递与PLC库文件一致在调用HMI库文件时需要将项目中的变量一一关联到画面中的元件上,并且只能调用整个画面,不太方便,我们可以将部分画面上的元素创建成库,并在库中建立相应组态硬件要求:精简屏不支持下述功能,部分版本过低不支持PROFlenergy的精智屏也不支持下述功能。下述案例所用HMI型号:TP700 Comfort,订货号:6AV2 124-0GC01-0AX0,版本为:16.0.0.0(该型号屏幕版本需在14.0.0.0及以上)首先定义相关UDT、FC块、DB块,并将其传递至项目库中,选中所需要元素并创建面板 在该库视图的建立变量连接:添加类别,并将数据类型选为用户自定义的数据如图所示分别对每个对象设置相应的事件、动画等,如:组态完成后发布版本即可,点击“库视图”退出或进入该界面,点击“可视化”退出该界面在调用时,将相应的FC、DB、UDT等传递至项目中,并在并设置接口,设置好HMI_Tag后,连接该实例所需要的变量(UDT) 2.3库文件的导入与导出库的导出:选择全局库中要导出的库,将其另存即可库的导入:打开全局库,选中要导入的库进行保存即可导入库时,“以只读方式打开”默认勾选,需要取消勾选,方可对导入的库进行修改
在TIA V17编程环境中(CPU 1513-1 PN),调用TSEND_C以TCP协议向TCP Server发送字符串:abded1234,TCP Server接收到的字符串多了一个问号:?avded1234.TSEND_C 指令的 DATA DB为非优化string类型数据截图如下:请教大家如何解决这个问题?谢谢
本文所提及的触点仅为常开触点、常闭触点,至于沿指令,比较指令等不在讨论之列,“软实现”指的是用程序代码实现,特此声明。如上图中网络3内容,此种格式在PLC编程中实属常见,但是在日常维护中是否会出现下列情况:1、需要删除/添加某触点(改变控制条件);2、某触点的类型需要改变(改变触点类型);这些需求在实际项目的维护中是真实存在的,如开关触点暂时没有安装到位,但是又需要调试程序,当然你可能会说,我可以直接用线短接代替实际的开关触点元件,当然可以,但是,这些活你愿意跑来跑去不辞辛劳地干吗?我不是做维护的,对于维护中的具体需求认识不全面,在此如果有搞维护的朋友,可以指点一下维护中还有哪些具体的类似应用。又有,如果某外部开关触点损坏,例如热继电器的开关点,正常情况下接入PLC输入回路的硬件是常闭继电输出触点,在PLC程序中编程使用是常开触点NO,此时如果热继的常闭继电输出触点损坏,在没有备用配件的情况下,在不能停机的情况下,在不使用电脑连接PLC改程序的情况下,需要使用热继的常开继电输出触点来临时替换原来使用的常闭继电输出触点,你又当如何操作才能完成任务?这是否又是阿汤哥眼中的不可能完成的任务?答案是否定的,这是可以完成的任务。为快速说明设计原理,我使用了图1中的简单触点串联来作举例,我还故意使用了M,没有用I,本意是使用DB中的中间层缓存的,当然也有对应的并联结构,擅长自恋抬杠的“翘空”大师之流可以暂时先闭上嘴忍一下,等我讲完再开喷。为方便说明,我在上图的块引脚中额外显性引出了三个管脚,iw_conditions,iw_types,iw_used,三个变量类型都是word,当然也可以根据具体需要设置成byte,dword,或者array,原本引脚只有一个,即上图中的ioArr_condGroup,其实应该是ioUdt_condGroup,类型是UDT而不是Array,我就不改了,给大师之流留下点口实。上图中的iw_conditions使用的word类型,最多可以容纳16个触点,iw_types同样是word类型,对应配置16个触点的使用类型,即NC/NO,iw_used配置哪些触点是被使用了的。这样通过HMI/SCADA调节对应的iw_types,就可以改变使用的触点类型,满足特情需要;通过调节对应的iw_used就可以实现某触点的临时投入/切除,助力前期调试和后期维护,而且是软实现”,不用通过实际硬件实现,如连接短接线,转动转换开关,旋钮开关等。至于信号的监控,可以在块的输出引脚,使用AT/SLICE引出对应的位状态,使用AT时要格外注意大端小端的问题,免得映射不匹配,管脚名称就使用真实DI的标签名称。至于iw_conditions使用DB中的中间层,摆脱程序算法对实际DI的直接绝对依赖,当然,这需要先提前“映射”一下,这也是大师所不齿的。关于调节参数,一定要做好权限管理,这两个功能虽然好用,但也是把双刃剑。有空的话,下一篇小作文可能会写修改DI的功能,即PLC本体DI硬件损坏的应对策略,虽然很早就有人写过了。最后,分享一下实际代码,为方便理解,上面贴出的代码是细节版,但清晰易懂,但是代码写得太多,不是最好的,最好的代码很少,但是不易阅读和理解,在此就不贴了。《盐铁论》里说,“富在术数,不在劳身;利在势局,不在力耕。”,这里我给改一下,益在代码,不在劳身;利在思想,不在耗力。最好的代码在于“术数”......最后,提前祝广大朋友新年快乐!!!
欢迎您来到西门子数字化工业支持中心网站!我们使用cookies来确保您能最好地使用我们的网站,进行网站分析并根据您的兴趣定制内容。我们有时会与第三方共享cookie数据。继续浏览本网站,即表示您同意我们使用cookies。您亦可以参考西门子数据隐私政策以了解更多相关信息。