盒子
盒子
文章目录
  1. 1.环境搭建
  2. 2. 组态
  3. 3. 内存映射和输入输出
  4. 4. 编程
  5. 5. FFB
  6. 6. 仿真和调试
  7. 7. 一个例子
  • To Be Continue
    1. By TheSeven
  • 施耐德plc开发速成——21天从入门到炸掉核电厂[0]

    上周乌克兰的电力系统被 BlackEnergy ,算是给大家上了生动的一课,工控安全是个近几年就要成型的点,catch it and crash it.

    来到cncert这边的实验室之后,开始接触工控安全,我是负责施耐德系列的渗透测试工作。
    做安全研究渗透测试的话,起码要能摸清一个独立的plc的组态和正常运作,所以我一开始做的就是独自组态一款施耐德plc,并为其编程。

    关于组态(Configure) 其实大白话说就是适配,设置。

    plc的编程和我们使用高级语音是完全不同的,甚至跟汇编语言的写法也是相去甚远,他是使用硬件语言的开发模式,如果计算机组成原理学的不错,设计过流水线CPU,熟悉verilog这种HDL语言的同学入门会非常快。

    尽量精简地总结下施耐德plc编程的流程和坑点。

    1.环境搭建

    1.1 施耐德plc编程软件是unity pro xl,这个网上可以直接down到iso镜像,注意一点,如果你的系统是win8及以上版本,需要下载v8或者以上的unity pro版本,安装过程照常,不过要在安装完成后,运行安装镜像里的windows8文件夹下的UPWin8.exe文件。这样才能正常启动。

    之后就是激活过程,激活一般使用转移权限介质来激活,激活文件 UnityProXL7.0 KEY(密码12345).DPD.DPD) ,之后去网上down PrvDisk 这个软件,推荐用2.02版,因为这个不用序列号,其他版本也是可以的,无序列号使用30天,反正咱们只用一次。之后把DPD文件用这个软件加载到虚拟磁盘里,密码是12345,之后在unity pro 的激活引导界面选择转移权限介质,之后选择那个虚拟磁盘的盘符就Ok了。

    1.2 之后就是plc的硬件了,额。。这个东西还是比较贵的,自己买不现实,我在这边的实验室资源比较丰富,施耐德的设备四五台。我这次用的是Quantum系列的plc。

    2. 组态

    就是配置,首先把硬件在插槽里插好,我这次用的设备是这样的:
    Quantum

    在unity pro里新建项目,按照上图选择对应的cpu,多少槽的机架随便选,够用就行,之后双击左侧本地总线,按照上图的型号和顺序添加新设备。

    完成后组态基本完成。

    3. 内存映射和输入输出

    写过cpu或者操作系统的哥们儿会经常接触内存映射,我们的cpu外部接入设备时,要将其地址映射到自己的内存空间。一开始接触plc时也是觉得输入输出是个坑点,不知道咋输入输出,这里就是要用到外接设备的地址在内存中的映射。

    我们外接了四个设备:

    DDI 离散量输入模块;
    DDO 离散量输出模块;
    ACI 模拟量输入模块;
    ACO 模拟量输出模块;
    

    其中离散量的意思就是开关量,我们对于开关,按钮这样的输入输出就是在这里,模拟量就是连续的电压,电流等信号量,模拟信号是幅度随时间连续变化的信号,就是模拟电路的信号。

    再看地址映射,这些设备上都有用于外接的触点,而这些触点的值(也就是电流大小或有无)是映射在我们的内存中的。

    双击本地总线中的该设备,在配置选项卡中,有其参数:
    ddi
    其映射缺省是按位 %I-1X , 开始地址为1, 结束是32。
    plc中的内存表示是 %I, %Q, %M, %S 等等这种形式,也就是说,DDI的1号触点对应的内存时%I1。

    其实上面的表述是不准确的,我们查看帮助手册,unity pro的帮助手册就是一本最好的入门教程,完全中文。直接在unity pro 的帮助菜单中打开。
    下图为拓扑寻址的说明:
    xunzhi
    除了上面的参数外,还可以在最后加一位.x,x表示第几位二进制位,按位寻址为0。

    4. 编程

    4.1 编程语言通常有
    plclang
    最长使用的还是LD,也就是梯形图。语法不废话,自行搜索。

    4.2 在编程中使用的变量,可以直接使用内存位置,也可使用自定义的变量名,但是需要提前声明,声明在这里:
    plcvar
    比如声明基本类型的变量(具体类型有哪些自行google)
    basevar
    不写地址也是可以的,它会得到一块随机的内存,只为了程序中临时使用。

    代码在程序-> 任务 -> xxx -> 段 中建立。

    5. FFB

    FFB是一些功能块,跟函数方法差不多,右键FFB输入助手插入

    6. 仿真和调试

    写完之后当然不能直接up到真实的plc上,本地仿真调试。
    首先切换到仿真模式,在plc菜单下,工具栏里也有,之后连接,上传,RUN。这样仿真就跑起来了。

    可以使用调试菜单下设置断点调试。

    查看变量和内存的话,在左侧找到动态数据表,新建数据表就可以动态看到变量和内存了。并且还可以修改或者强制修改等模拟开关打开关闭。

    仿真结束后plc里的强制位是不会复原的,在plc菜单下的初始化可以重置plc的内存。

    7. 一个例子

    这是个我写的十字路口交通灯的控制程序:交通灯控制

    导入.zef文件即可获得整个完整工程。该工程使用Quantum系列cpu。

    To Be Continue

    By TheSeven