产品展示
PRODUCT DISPLAY
技术支持您现在的位置:首页 > 技术支持 > 西门子自动化工业与技术研发

西门子自动化工业与技术研发

  • 发布日期:2021-04-17      浏览次数:487
    • 西门子工控机电源厂商去年对他们的电源模块做了升级,但随后在某现场出现了一系列的故障,工控机的电源连续损坏,因此,我们紧急赴现场进行了检测。

              我们在现场了解到,IPC的电源损坏的部件是其内部前端的保险管,由于该保险管被烧坏,导致电源模块无法正常供电(图1)。 

      这就意味着,现场可能出现过大电流。而且我们了解到,现场经常是头一天晚上下班后,工人将现场主回路直接断电,此时,工控机均处于开机状态。而第二天早上,工人直接将主回路的电源合闸后,工控机直接上电,但此时就发现有的工控机不能工作了,再检查时就发现是工控机的电源烧坏。

              除此之外,该设备的每个控制柜旁边都装有一个空调,该空调在启动瞬间也会产生一定的高压脉冲干扰。同时,该空调本身还有一个控制开关,该开关在开闭过程中,也会产生高压脉冲干扰

       经过换算,在空开闭合瞬间的高频干扰电压幅值为4000V左右,而压缩机启动瞬间幅值的干扰信号幅值大概为1500V左右。

              至此,我们大致得出结论,应该是现场出现过较大的冲击电流,导致设备电源损坏。

              之后,我们又进行了大量的测试,主要是针对现场的情况进行检测,以及对电源防护措施进行了一系列的对比测试,这里就不再详细叙述了。当然,我们也针对电源模块本身的内部设计是否存在隐患,与电源厂家进行了沟通。厂家经过检测,判断现场出现大电流导致设备损坏的可能性比较大。

              根据上述情况,我们在现场提出了一些建议:

      1.       现场加强设备上电、断电的规范管理,要求现场为控制柜供电的总电源不得带负载上电、断电。

      2.       修改工控机的BIOS,将“状态保持模式”参数项修改为“DISABLE”,即上电后,不能直接开机,而是通过IPC前部的开关按钮进行开机操作。

      3.       在IPC的电源前增加浪涌等保护设备,保证供电电源质量。

              之后,经过一段时间的观察,现场没有再出现过电源烧坏的情况。这个Case拿出来跟大家分享,一方面是提醒我们的工控机用户在使用西门子IPC的过程中需要注意的一些问题,另外也是提醒广大的工程师,注意工业现场的用电规范,否则有可能导致我们的设备出现一些意想不到的情况。 

      1.3存储器32位地址指针

              32位地址指针用于I、Q、M、L、数据块等存储器中位、字节、字及双字的寻址,32位的地址指针使用一个双字表示,第0位~第2位作为寻址操作的位地址,第3位~第18位作为寻址操作的字节地址,第19位~第31位没有定义,32位地址指针的格式如下:

              访问时需要使用地址存储器标识符及32位地址指针,地址寻址表示格式为:

      地址存储器标识符 [32位地址指针],例如指针存储于LD20中,装载M存储器一个字节表示为:

      2.jpg

              前面介绍的存储器16位指针,特定用于T、C、程序块的寻址,使用一个INT格式的值表示,每次值加1,指向的对象地址加1,例如,T1、T2,其中的“1”、“2”就是指针的直接变化(好像没有说明白!)。32地址指针使用一个DINT格式的值表示,指向的是I、Q、M、L、数据块等存储器中位,每次值加1,指向的地址区位的号加1,区别就是在这里。一个字节是8个位,如果指向的是字节每次就要加8的倍数,例如地址MB[LD20],LD20值为0,则表示MB0,LD20值为8,则表示MB1,如果指向的是字每次就要加16的倍数,以此类推。

              如果将32位指针按照16位指针的方式使用就会出问题,例如MB[LD20],LD值为10,指向地址为MB1.2,程序编译没有问题(语法正确),下载下去造成CPU停机,原因就是地址长度错误。在第三部分介绍定时器循环调用的示例程序中,TRIG1和TRIG2就是使用32指针迭代的,例如 A  M [LD20],每次LD值加1,由于显示的问题别屏蔽了,所以程序量还有有一点的。前面也提到了优化的问题,16位和32指针由于使用方法不同,不能简单地合并。

              32位指针也可以使用另外一种形式表示,就是使用P#X.Y,P表示指针,#表示特定符号,X表示字节地址,Y表示位地址,P#X.Y可以与DINT格式的值相互转换,DINT值=X*8+Y,

              例如P#2.0转换DINT格式为16,P#3.1转换DINT格式为25。在指针寻址时可以使用指针的格式也可以使用DINT格式进行运算。使用32位地址指针寻址参考下面的示例程序:

            OPN   DB     1            //打开DB1。

            OPN   DI     3            //打开DB3,最多可以同时打开两个DB块。

       

            L     4                   //装载4到累加器1中。

            SLD   3                   //累加器1中数值左移3位,在程序中经常见到,

                                        左移3位就是将原值乘以8

            T     MD    20            //将逻辑操作结果传送到MD20中,MD20包含地址指针为P#4.0。

            L     P#20.0              //将地址指针P#20.0装载到MD24中。

            T     MD    24

       

            L     320                 //320就是P#40.0装载到MD28中。

            T     MD    28

       

            L     DBW [MD 20]         //装载DB1.DBW4。

            L     DBW [MD 24]         //装载DB1.DBW20。

            +I                                                              //相加

            L     DIW [MD 28]         //装载DB3.DBW40。

            -I                        //相减。 

            T     DIW    2            //将运算结果传送到DB3.DBW2中。

              使用32位地址指针寻址数据块地址时,数据块必须先打开,然后才能寻址,数据块寻址方法参考下面的示例程序,如果直接使用指令对完整数据格式地址(例如地址DB1.DBB[MD100])进行间接寻址被视为非法。

              使用LOOP 指令与32位地址指针可以进行循环操作(这是固定的操作模式,在程序中一看到LOOP指令就要想到地址的迭代),假设一个编程应用:一个INT变量(MW2)与一个数组(假设存储于DB1中,包含100个元素为INT的数组)存储的值相比较,如果数值相同,指出个相同数值存储在DB块中的位置(数组中的位置)。使用通常的编程方法,需要逐个进行比较,程序量比较大,如果实际需要与1000个数值比较,将占用大量的存储空间,使用LOOP指令与地址指针相结合可以轻松解决上述问题,参考下面的示例程序:

              L     0                    //初始化MW100和MD4。

            T     MW   100

            T     MD     4

            OPN   DB     1             //打开DB1。

            L     100                  //循环操作的次数,100次。   

      next:  T     MW   100             //将循环100次装载到MW100中,固定格式。                                                                           

            L     MW     2             //                                  进行比较的数值存储于MW2。

            L     DBW [MD 4]           //与DB块中存储的值进行比较,开始地址为DBW0。

            ==I                                                               //如果数值相等跳到m1。

            JC    m1

            L     MD     4             //将地址指针加2(每个相邻的INT地址相差2)。

            L     P#2.0

            +D   

            T     MD     4

            L     MW   100             //次数减1,跳回next,如果MW100等于0,跳出

      LOOP  next                   //循环操作LOOP指令,LOOP指令固定格式。

      m1:   FP    M     10.0             //如果数值相等,记录MD4指针的位置,转换

      为数组的位置((地址值/P#2.0)+1)值并存储

      于MD8中。

            JCN   m2                     //为0跳转到m2。  

            L     MD     4

            L     P#2.0

            /D   

            +     1

            T     MD     8

              m2:   NOP   0  

       

       

              地址的循环操作只是减少了程序量,CPU扫描时间不会减少。

       

      1.4存储器32位地址指针-S7-1500的处理方式

              与16位指针的处理方式是一样的,还是使用数组进行循环迭代。上面的应用如果在S7-1500中编写则非常方便,示例程序参考图11。

              使用变量“START_COMP”作为开始信号,如果比较值“COMP_Value”与数组的元素“A.B["INDEX"]”不相等(INDEX缺省为0),则变量“INDEX”加1,如果大于等于100,则将“INDEX”清0,然后复位开始信号“START_COMP”;如果比较值“COMP_Value”与数组中的元素“A.B["INDEX"]”相等,则将变量“INDEX”中的值传送到结果“RESULT”中,然后将“INDEX”清0并复位开始信号“START_COMP”。

              程序比较简单,使用LAD即可编程程序,对编程人员的要求不高,如果使用SCL编写程序可能更加简单

    联系方式
    • 电话

    • 传真

    在线客服