PLC程序密码破解方法,并总结了详细的解密过程
PLC程序解密,密码破解方法步骤分析,有关plc的解决方法,在进行plc编程的过程中,有时需要plc解密的一些操作,这里说一说plc的解密方法,并总结了详细的解密过程,有需要的朋友参考下。
PLC解密方法
1、使用串口调试器。
2、设置好有关参数。
设置串口:COM1,波特率:9600,数据位:7,校验:E偶,停止位:1
输入:输入EHX,显示:显示ASC
确定三菱PLC型号。根据PLC型号选择在串口调试程序的 文本 中输入对应字符串。
PLC型号 对应字符串
FX2 /STX0700808/ETX6A
FX2N /STX0300808/ETX66
FX2_EPROM /STX0800808/ETX6B
FXON/FXOX /STX0800808/ETX6B
FX1N/FX1X /STX0800808/ETX6B
3、发送后在接收框中显示的字符串就是plc的密码。
如果看不出来的话,将这些字符串拷贝到 HEX格式 中。发送一次看看。(发送前记得先断开PLC)
建议你自己设置一个密码,然后用这个方法读取一次看看,以后就知道是怎么回事了。
密码字符:0-9,A-F。
A系列:
发送:A2 07 00 FF 02 05 AE 00 08 C3
接收:0B 00 FF 02 00 AA 77 55 BB EF CD AB A4 00
密码:ABCDEF
发送:A2 07 00 FF 02 05 AE 00 08 C3
接收:0B 00 FF 02 00 AA 77 55 BB C1 B1 A1 A4
密码:A1B1C1
分析:密码为返回字符中BB至A4之间的字符,以每2字符为单位,从右往左读出。
FX系列:
返回:34 31 34 32 34 33 34 34 34 35 34 36 34 31 34 32
密码:ABCDEFAB
分析:接收到的是ASC码,对应的字符为 4 1 4 2 4 3 4 4 4 5 4 6 4 1 4 2,以每2字符为单位组合,即
41 42 43 44 45 46 41 42,
再译为对应的字符即为 ABCDEFAB.
1、在发送字符栏输入下面的字符串后点发送;
02 30 38 30 30 38 30 38 03 36 42
3、返回一串16进制的ASCII码,30H为数字0,31H为数字1,以此类推;
例:02 30 38 30 30 38 30 38 03 36 42
( 37ms )
/STX4236353433323130/ETX41
密码是:B6543210 《42=B》
以上就是PLC解密方法及解密过程的全部内容,希望对大家有所帮助。
TypeScript 中的整形和浮点数类型都是 number,这点和 JavaScript 是一样的,比如:十进制、二进制、八进制和十六进制的类型都是 number。
let decAge: number = 22; let hexAge: number = 0x0016; let binaryAge: number = 0b10110; let octalAge: number = 0o026; // 以上变量使用 (number).toString(10) 转换为十进制都为 22 复制代码
可使用 (number).toString(进制) 将数字转换为任意进制的类型。
字符串 → string
和 JavaScript 一样,字符串的值使用单引号或者双引号包裹:
let myName: string = "编程三昧"; let myHomepage: string = `example.com/${myName}`; 复制代码
数组
TypeScript 中定义数组的方式有两种。
第一种是元素类型后面接上 [],表示由此类型元素组成的一个数组:
let arr: number[] = [1, 2, 3, 4]; // 如果在数组中加入其他元素会报错 复制代码
第二种是使用数组泛型定义数组:
let arr1: any[] = [1, "2", 3, "4"]; // 这个数组中可以假如任意类型的元素 复制代码
元组 Tuple
元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。
let arr2:[number, string, number] = [1,"2",3]; // 若果写成 [1,2,3] 会报错 复制代码
元素是严格规定了数组的长度和每个位置的元素类型,并且在赋值时需要严格对应,否则会报错。
枚举
enum类型是对JavaScript标准数据类型的一个补充。像C#等其它语言一样,使用枚举类型可以为一组数值赋予友好的名字。
enum Color {Red, Green, Blue} let c: Color = Color.Green; 复制代码
默认情况下,从0开始为元素编号。你也可以手动地指定成员的数值。例如,我们将上面的例子改成从 1开始编号:
enum Color {Red = 1, Green, Blue} let c: Color = Color.Green; 复制代码
或者,全部都采用手动赋值:
enum Color {Red = 1, Green = 2, Blue = 4} let c: Color = Color.Green; 复制代码
枚举类型提供的一个便利是你可以由枚举的值得到它的名字。例如,我们知道数值为2,但是不确定它映射到Color里的哪个名字,我们可以查找相应的名字:
enum Color {Red = 1, Green, Blue} let colorName: string = Color[2]; console.log(colorName); // 显示'Green'因为上面代码里它的值是2
上一节,我们已经把gitlab、jenkins、harbor、k8s都已经搭建好了,这一节我们来编写jenkins的pipline将我们的服务通过jenkins完整的发布到k8s中。
2、部署中间件
将mysql、redis、es等部署到k8s之外 , 模拟用作线上独立环境(至于线上你想把某些中间件部署到k8s内部这个自行处理,本次重点是如何将go-zero开发的微服务部署到k8s集群内部),这里我就直接使用项目下的docker-compose-env.yaml了,把所有依赖的第三方中间件环境直接安装在srv-data.com(192.168.1.181)这台服务器,前提是这台服务器已经安装好docker、docker-compose。
登陆到 192.168.1.181
$ mkdir data && cd data && vim docker-compose.yml$ docker-compose up -d$ docker-compose ps #查看确认
3、独立配置
将每个服务的配置都独立出来,统一放在一个git仓库,这样只给一个人线上仓库的权限,如果线上配置有变直接修改这个仓库的文件,在jenkins做cd的时候,会先拉取代码再拉取对应服务的配置自动构建,具体可以看后面的pipline。
【问】为什么不用配置中心?
1)修改db、redis等需要重启服务,但是有一些配置又不需要重启服务,运维又要去记,记混了比较容易造成线上事故
2)方便回滚。我们发新版本到线上,并且又改了新版本配置。这时候线上用户反馈有问题,线上需要快速回滚的话,如果我们使用将文件构建到镜像中,直接使用k8s一行命令就可以将上一个版本代码加配置直接回滚回来。如果使用了配置中心,回滚了代码,还要将上个版本的配置去配置中心改回来,很麻烦。
PLC编程语言入门,常用指令集汇总分享
一、西门子PLC编程语言
PLC的编程语言包括以下五种:梯形图语言(LD)、指令表语言(IL)、功能模块图语言(FBD)、顺序功能流程图语言(SFC)及结构化文本语言(ST)。不同型号的PLC编程软件对以上五种编程语言的支持种类是不同的,早期的PLC仅仅支持梯形图编程语言和指令表编程语言。目前的PLC对梯形图(LD)、指令表(STL)、功能模块图(FBD)编程语言都以支持。比如,SIMATIC STEP7 MicroWIN V3.2。
(1)梯形图
在西门子PLC实际编程使用情况中中,梯形图语言是PLC程序设计中最常用的编程语言。它是与继电器线路类似的一种编程语言。由于电气设计人员对继电器控制较为熟悉,因此,梯形图编程语言得到了广泛的欢迎和应用。
梯形图编程语言的特点是:与电气操作原理图相对应,具有直观性和对应性;与原有继电器控制相一致,电气设计人员易于掌握。梯形图编程语言与原有的继电器控制的不同点是,梯形图中的能流不是实际意义的电流,内部的继电器也不是实际存在的继电器,应用时,需要与原有继电器控制的概念区别对待。
(2)指令表
松下PLC编程
指令表编程语言是与汇编语言类似的一种助记符编程语言,和汇编语言一样由操作码和操作数组成。在无计算机的情况下,适合采用PLC手持编程器对用户程序进行编制。同时,指令表编程语言与梯形图编程语言图一一对应,在PLC编程软件下可以相互转换。
指令表表编程语言的特点是:采用助记符来表示操作功能,具有容易记忆,便于掌握;在手持编程器的键盘上采用助记符表示,便于操作,可在无计算机的场合进行编程设计;与梯形图有一一对应关系。其特点与梯形图语言基本一致。
(3)功能模块图语言(FBD)
功能模块图语言是与数字逻辑电路类似的一种PLC编程语言。采用功能模块图的形式来表示模块所具有的功能,不同的功能模块有不同的功能。
功能模块图编程语言的特点:功能模块图程序设计语言的特点是:以功能模块为单位,分析理解控制方案简单容易;功能模块是用图形的形式表达功能,直观性强,对于具有数字逻辑电路基础的设计人员很容易掌握的编程;对规模大、控制逻辑关系复杂的控制系统,由于功能模块图能够清楚表达功能关系,使编程调试时间大大减少。
(4) 顺序功能流程图语言(SFC)
顺序功能流程图语言是为了满足顺序逻辑控制而设计的编程语言。编程时将顺序流程动作的过程分成步和转换条件,根据转移条件对控制系统的功能流程顺序进行分配,一步一步的按照顺序动作。每一步代表一个控制功能任务,用方框表示。在方框内含有用于完成相应控制功能任务的梯形图逻辑。这种编程语言使程序结构清晰,易于阅读及维护,大大减轻编程的工作量,缩短编程和调试时间。用于系统的规模校大,程序关系较复杂的场合。
顺序功能流程图编程语言的特点:以功能为主线,按照功能流程的顺序分配,条理清楚,便于对用户程序理解;避免梯形图或其他语言不能顺序动作的缺陷,同时也避免了用梯形图语言对顺序动作编程时,由于机械互锁造成用户程序结构复杂、难以理解的缺陷;用户程序扫描时间也大大缩短。
(5)结构化文本语言(ST)
结构化文本语言是用结构化的描述文本来描述程序的一种编程语言。它是类似于高级语言的一种编程语言。在大中型的PLC系统中,常采用结构化文本来描述控制系统中各个变量的关系。主要用于其他编程语言较难实现的用户程序编制。
结构化文本编程语言采用计算机的描述方式来描述系统中各种变量之间的各种运算关系,完成所需的功能或操作。大多数PLC制造商采用的结构化文本编程语言与BASIC语言、PASCAL语言或C语言等高级语言相类似,但为了应用方便,在语句的表达方法及语句的种类等方面都进行了简化。
结构化文本编程语言的特点:采用高级语言进行编程,可以完成较复杂的控制运算;需要有一定的计算机高级语言的知识和编程技巧,对工程设计人员要求较高。直观性和操作性较差。
在PLC控制系统设计中,要求设计人员不但对PLC的硬件性能了解外,也要了解PLC对编程语言支持的种类。
二、西门子PLC指令表功能汇总
指令( 英文全称意思 ) :指令含义
1、LD ( Load 装载 ) :动合触点
2、LDN ( Load Not 不装载 ) : 动断触点
3、A ( And 与 动合) : 用于动合触点串联
4、AN ( And Not 与 动断 ) :用于动断触点串联
5、O ( Or 或 动合 ) :用于动合触点并联
6、ON ( Or Not 或 动断 ) : 用于动断触点并联
7、= ( Out 输出 ) : 用于线圈输出
8、OLD ( Or Lode): 块或
9、ALD ( And Lode): 块与
10、LPS ( Logic Push ) :逻辑入栈
11、LRD ( Logic Read ) :逻辑读栈
12、LPP ( Logic Pop ) :逻辑出栈
13、NOT ( not 并非 ) :非
14、NOP ( No Operation Performed ) : 无操作
15、AENO ( And ENO ) :指令盒输出端ENO相与
16、S ( Set 放置 ) : 置1
17、R ( Reset 重置,清零 ) :清零
18、P ( Positive) :上升沿
19、N ( Negative) :下降沿
20、TON ( On_Delay Timer ) :接通延时定时器21、TONR ( Retentive On_Delay Timer ) : 有记忆接通延时定时器
22、TOF ( Off_ Delay Timer ) :断开延时定时器
23、CTU ( Count Up ) : 增计数器
24、CTD ( Count Down ) : 减计数器
25、CTUD ( Count Up/ Count Down ) :增减计数器
26、ADD ( add 加 ) : 加注意
//ADD_I (_ I 表示整数)
ADD_DI( DI表示双字节整数)
ADD-R (R 表示实数)
它们都是加运算只是数的大小不同。
27、SUB ( Subtract 减去,减少) :减
28、MUL ( Multiply ) : 乘
29、DIV ( Divide ) : 除
30、SQRT ( Square root ) : 求平方根
31、LN ( Napierian Logarithm 自然对数 ) : 求自然对数
32、EXP ( Exponential 指数的 ) : 求指数
33、INC_B ( Increment 增加 ) : 增1
//其中_B代表数据类型 还有W(字节)、DW双字后面几个都是这样的。34、DEC_B ( Decrement 减少 ) : 减1
35、WAND_B ( Word and 与命令 ) :逻辑与
36、WOR_B ( Word or 或命令) : 逻辑或
37、WXOR_B ( Word exclusive or 异或命令) :逻辑异或
38、INV_B ( Inverse 相反 ) : 取反
39、MOV _B ( Move 移动 ) : 数据传送
40、BLKMOV_B ( Block Move 块移动) :数据块传送
41、SWAP ( Swap 交换 ) : 字节交换
42、FILL ( Fill 填充 ) : 字填充
43、ROL_B ( Rotate Left 循环 向左) :循环左移位
44、ROR_B ( Rotate Right 循环 向右) : 循环右移位
45、SHL_B ( Shift Right 移动向左) :左移动
46、SHR_B ( Shift Right 移动向右 ) : 右移动
47、SHRB ( Shift buffer 移动缓存) :寄存器移位
48、STOP ( Stop 停止 ) : 暂停
49、END /MEND ( End /Mend ) : 条件/无条件结束
50、WDR ( Watch dog reset ) : 看门狗复位
51、JMP ( Jump 跳) :跳转
52、LBL ( Label 位置 ) : 跳转标号
53、FOR ( For 循环 ) : 循环
54、NEXT ( Next 再下去) :循环结束
55、SBR ( Subprogram Regulating子程序控制 ) : 子程序调用
56、SBR_T ( Subprogram Regulating Take ) : 带参数子程序调用
57、SCR ( Sequence Control 顺序控制 ) : 步开始
58、SCRT ( Sequence Control Transfer 顺序控制转移 ) : 步转移
59、SCRE ( Sequence Control End 顺序控制结束 ) : 步结束
60、AD_T_TBL ( Add data to table 添加数据到表格中) : 填数据表
61、FIFO ( First in First out 先进先出 ) : 先进先出
62、LIFO ( Last in First out 后进先出 ) :后进先出
63、TBL_FIND ( Table Find 表格查找 ) : 表查找
64、BCD_I ( Binary Coded Decimal _I 二进制编码的十进制 ) :BCD 码转整数
65、I_BCD ( I_ Binary Coded DecimaL ) :整数转BCD码
66、B_I ( Bit to int ) :字节转整数
67、I_B ( int to bit ) :整数转字节
68、DI_I ( Double int to int ) :双整数转整数
69、I_DI ( int to double int ) :整数转双整数
70、ROUND ( Round 取整 ) : 实数转双整数
71、TRUNC ( Trunc 截取 ) :转换32位实数整数部分(舍去小数取整)
72、DI_I (double int to int ) :双整数转实数
73、ENCO ( Encode 编码) : 编码
74、DECO ( Decode 译码) :译码
75、SEG ( Segment decoder分断译码器 ) : 七段显示译码器
76、ATH ( ASCII码 turn hex ) : ASCII码转16进制
77、HTA ( Hexadecimal to ascii) : 16进制转ASCII码
78、ITA ( // int to ascii) : 整数转ASCII码
79、DTA ( // double int to ascii ) : 双整转ASCII码
80、RTA ( // real to ascii) : 实数转ASCII码
81、ATCH (//attach ) : 中断连接
82、DTCH ( Depatch ) : 中断分离
83、HDEF ( High speed counter definition ) : 高速计数器定义
84、HSC ( High Speed Counter 高速计数器 ) :启动高速计数器
85、PLS ( Pulse 脉冲 ) :脉冲输出
86、READ_ RTC ( Read real time clock 读实时时钟 ) :读实时时钟
87、SET_RTC ( Set real time clock ) : 写实时时钟
88、XMT ( Transmitter ) : 自由发送
89、RCV ( Receive 接收 ) : 自由接收
90、NETR ( Net read 网络读 ) : 网络读
91、NETW ( Net write 网络写 ) : 网络写
92、GET_ADDR ( Get address 获取地址 ) : 获取口地址
93、SET_ADDR ( Set address 设置地址 ) : 设定口地址
94、PID ( Proportional Integral Differential 比例、积分、微分 ) :比例积分微分调节器。
如有不妥,欢迎指正!
相关问答
如何从PLC中提取程序?
从PLC中提取程序需要经过以下步骤:1.确定PLC型号和品牌:不同的PLC品牌和型号使用不同的软件和方法来提取程序。确定PLC型号和品牌后,查找相应的软件和文档。2...
如何获取PLC的编程软件?
科技引领生活,爱科技的小青年带你在科技的海洋里无限遨游……PLC编程软件是工程师与硬件之间的联系纽带,熟练使用编程软件更是工程师们工作的必备技能。对于PL...
怎样从plc中拷出程序?
plc程序拷出的方法1、在编程软件STEP7V5.5中打开想要导出的块,可以是FB、FC、DB等。例如:用户需要导出FC1,则双击FC1,打开此功能。2、在打开的FC1界面的菜...
plc可以把高字节内容提取出来吗?
PLC可以把高字节内容提取出来。一般而言,在PLC中,通过字转换字节指令,可以将一个字数据的高位字节和低位字节分别提取出来,然后存储到不同的字节数据中。具体...
python如何接收plc的信号?
Python可以通过PLC的通信接口来接收PLC的信号。PLC通常具有多种通信接口,例如串口、I2C、SPI等,这些接口可以通过编程语言如Python进行访问。以下是一些获取P...
信捷XC2-16R-E的PLC里别人写好的程序要怎么拷贝出来?
PLC如果没有设置密码的话,用电脑上的信捷编程软件下载。然后再上传到信捷PLC里就行。前提上传和下载需用到编程线缆,PLC要保持通电状态。PLC如果没有设置密...
欧姆龙plc中取反指令怎么写?
具体的指令格式如下:XORW0.0,#FFFFh,W1.0其中,W0.0是需要取反的寄存器地址,#FFFFh是一个16进制的数值,表示全1的二进制数,W1.0是输出寄存器地址,表示...
plc索引的使用和理解?
PLC索引是用于识别和管理PLC程序中数据和地址的一种技术。索引可以在编程中用于访问和操作数组、表格和其他由连续数据组成的数据结构。使用索引可以简化编程...
plc编程方框p是什么?
plc(P)是指边沿检测脉冲指令。指令作用:LDP(取脉冲上升沿)是上升沿检测运算开始指令,LDF(取脉冲下降沿)是下降沿脉冲运算开始指令,ANDP(与脉冲上升沿...plc(...
plc中负数怎么取出来?
在PLC(可编程逻辑控制器)中,负数的表示方式取决于使用的数据类型。常见的数据类型包括整数(Integer)、浮点数(Float)等。对于整数类型,负数通常使用补码...