自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 ST维护难?那是因为你少了这3个习惯

干工控 9 年,接过不少烂摊子,我见过最夸张的一个程序——一个 FB 里面塞了 3000 多行,且没有任何注释,变量名基本全是缩写。遇到复杂的逻辑问题,打个断点,一步一步执行,看变量值的变化过程,比肉眼追代码靠谱得多。这种写法,调试的时候简直是灾难。当然写的人还挺无辜,因为很多代码都是后期长出来,维护出来的,又舍不得重构,最后只能在屎上雕花。这是CASE语句的天然优势,当然也有很多人讨厌,10,20这样的流程步写法,这一点见仁见智了。很多人觉得"我自己写的代码,我肯定记得",结果三个月后再看,自己都懵了。

2026-06-04 22:43:53 222

原创 【ST+梯形图混用实战:什么时候用什么,一张表说清楚】

混用的前提是两种语言都得会。你只会梯形图,那遇到配方管理就只能硬着头皮用梯形图堆;你只会 ST,那简单的启停逻辑也非要用 ST 写,维护的人看着头疼。两种语言都掌握,才能在合适的场景选合适的工具,这才是真正的工程思维。当然还要补充一点的是,如果你已经不是单打独斗的工程师,是已经有丰富开发经验的中高工,或者电气主管,在这个问题上可能更要慎重一点。从目前我观察到的趋势来看,新人对 ST 的接受程度更高,混用编程需要的门槛很高,比较难实现团队的标准化。

2026-06-03 21:03:07 356

原创 2.4.2 常量的定义与使用

增强代码的稳定性:常量的值是固定的,一旦定义,不能再修改。内存分配:常量在编译时就已经确定了值,而变量的内存是在程序运行时动态分配的。与变量不同,常量的值在程序开始运行时就已经确定,并且在后续的执行过程中不能被修改。使用常量替代硬编码的值:尤其在PLC控制程序中,避免直接硬编码某些值,改用常量可以让后期维护时修改更为方便。字符串常量(STRING):虽然ST语言并不常用字符串常量,但可以使用字符串常量来表示固定的文本数据。常量不可修改:常量在程序执行期间的值是固定的,不能被修改。// 错误:类型不匹配。

2025-02-16 18:23:48 1665

原创 2.4.1 变量的声明与作用域

/ 声明一个REAL类型的变量,初始值为25.0。// 声明一个BOOL类型的变量,未赋初始值。(8)配置变量(Configuration Variables)(5)输入输出变量(In-Out Variables)(2)全局变量(Global Variables)(4)输出变量(Output Variables)(7)静态变量(Static Variables)(1)局部变量(Local Variables)(3)输入变量(Input Variables)

2025-02-12 21:39:26 1372

原创 2.3.3 数据类型的转换与强制类型转换

在ST(Structured Text)语言中,数据类型的转换是将一种数据类型转换为另一种数据类型的过程。例如,将DINT类型的4000000000转换为INT类型时,会超出INT的取值范围(-32768到32767)。将16位无符号整数转换为32位无符号整数(例如,65535 → 65535)。将8位无符号整数转换为16位无符号整数(例如,255 → 255)。将整数转换为浮点数,保留小数部分(例如,100 → 100.0)。将浮点数转换为整数,丢弃小数部分(例如,100.5 → 100)。

2025-02-06 22:20:40 1665

原创 2.3.2 复合数据类型

ST(Structured Text)语言支持多种复合数据类型,包括数组(ARRAY)、结构体(STRUCT)、枚举(ENUM)和联合体(UNION)等。ST语言的复合数据类型(如数组、结构体、枚举、联合体、指针和引用)为复杂数据结构的组织和管理提供了强大的支持。联合体大小:由于realValue和dintValue都是4字节,因此联合体DataUnion的内存空间大小为4字节。// 定义一个DataUnion类型的变量。// 通过指针修改value的值。// 设置状态为运行。// 修改value的值。

2025-02-05 23:42:05 1298

原创 2.3.1 基本数据类型

ST(Structured Text)语言支持多种基本数据类型,用于定义变量、常量以及函数参数等。这些数据类型涵盖了布尔值、整数、浮点数、字符和字符串等常见类型。ST语言的基本数据类型涵盖了布尔值、整数、浮点数、字符、字符串、时间等多种类型,能够满足工业自动化编程中的各种需求。通过合理选择数据类型,可以提高程序的效率和可读性。注意:CHAR类型并非所有的编程软件都支持,例如在Codesys中是没有Char类型的。

2025-01-29 10:26:02 1188

原创 附录A:驼峰命名法变量前缀表

如所定义变量为常量,则在其最前端加上前缀小写字母“c”。常量(Constant)UNICODE字符串。

2025-01-25 13:27:58 316

原创 2.2.3 代码格式与风格指南

编写清晰、规范的代码是提高代码可读性、可维护性和团队协作效率的关键。虽然好多人说工控行业都是一帮电工,没有什么素质,这完全是误解,任何程序所在的行业,都需要个人保证其代码风格能够很好与团队进行协作,在过去一台设备一个人写的多,往往不注意这些,这也导致了设备交接困难,成了后来接手工程师永远的痛,但是时代在发展,如今多人协作使得代码的规范性越来越成为如今的工控开发行业的共识。通过统一的命名规范、清晰的缩进与对齐、合理的注释和模块化设计,再加上对工艺的了解,就能够编写出高质量的ST代码。

2025-01-25 13:26:24 1043

原创 汇川CodeSysPLC教程04-1 基础变量定义

变量,就是你程序里用来存储数据的容器。你可以把它看作是一个装得下不同数据的小盒子,而且这个盒子会有一个名字。你可以随时往里装数据,或者从里取出数据。(* 变量 Temperature 存了一个温度值 25 *)在这个例子中,就是变量,25是它存储的数据。(* 温度变成了 30 *)

2024-11-28 20:08:34 2834

原创 【汇川CodeSysPLC教程 03-4资源使用表】

资源使用表,它用来显示该工程对这一个PLC内存的分配和使用情况。

2024-11-19 22:31:54 2928

原创 【汇川CodeSysPLC教程 03-3-13全局变量列表】

特性保持(Retain)持久化(Persistent)掉电后保持是是重启后保持是是程序更新后保持否(会丢失)是(不会丢失)典型场景计数器、状态数据,在短期保留重要数据用户设置、系统配置,长期保存重要数据。

2024-11-17 15:59:59 3276

原创 汇川CodeSysPLC教程 03-3-6程序组织单元

大家好,我是阿凡工控分享,在了解完基本的组态配置后,我们需要了解一些基本的应用设置,这些是我们实际工程中不可缺少的部分,本期我将以作为工程设置的第三章的开篇。

2024-09-01 10:27:51 1979

原创 低成本学习CodeSys的几种方法

有粉丝朋友问我,如何低成本学习CodeSys的相关内容。本期就介绍下集中低成本学习的方法。

2024-08-04 15:30:14 1214

原创 汇川CodeSysPLC教程03-2-6 ModBus TCP

ModBus TCP是一种基于TCP/IP协议的工业网络通信协议,常用于工业自动化和控制系统。它是ModBus协议的一个变种,ModBus协议最初由Modicon(现在是施耐德电气的一部分)在1979年开发。基于TCP/IP:ModBus TCP使用以太网和TCP/IP协议进行通信,这使得它能够在现有的以太网络基础设施上运行,具有高传输速度和广泛的兼容性。客户端-服务器模型:ModBus TCP采用客户端-服务器模型。客户端发送请求,服务器处理请求并返回响应。

2024-07-27 14:46:22 3676

原创 汇川CodeSysPLC教程03-2-14 与HMI通信

PLC与HMI连接采用何种连接方式,通常是参考双方支持哪些接口。PLC(可编程逻辑控制器)与HMI(人机界面)之间的通讯方式主要有以下几种:串行通讯(Serial Communication):以太网通讯(Ethernet Communication):现场总线通讯(Fieldbus Communication):无线通讯(Wireless Communication):光纤通讯(Fiber Optic Communication):这些通讯方式各有优缺点,具体选择取决于应用场景、通讯距离、数据传输速率以及

2024-07-09 21:59:18 4738

原创 汇川CodeSysPLC教程 Modbus变量编址

汇川HMI的专用协议使用不同功能码:在访问SM时,使用0x31 ,0x35,0x3f (在访问位变量的命令的基础上加了0x30);在访问SD时,使用0x33,0x36,0x40 (在访问寄存器变量的命令的基础上加了0x30)。汇川PLC的Word型寄存器的起始地址为偶数Byte地址;DWord型寄存器的起始地址为偶数Word地址对齐,其索引号呈2倍关系,这样方便地址的计算。线圈:位变量,只有两种状态0和1。汇川PLC中包含Q区及SM区等变量。寄存器:16位(字)变量,本PLC中包含M区及SD区等变量。

2024-07-08 22:54:42 6483

原创 汇川CodeSysPLC教程03-2-10 如何组态

大家好,我是阿凡工控分享,本期我们将调整教程的顺序,和粉丝朋友们讨论后,后续我将优先出绿旗标注的部分,便于小白水平的你循序渐进,其他水平的朋友有些需求可能要稍后了,如果有问题请见谅,另外关于粉丝朋友的催更,本人真是心有余而力不足,最近项目紧张,连着几天干了个通宵,所以更新这部分可能做不到那么快,请见谅。

2024-06-30 15:19:14 4450

原创 汇川CodeSys PLC教程 03-2-5EtherNet

以太网的本质是提供一种标准化的、可靠的、可扩展的网络通信方法,使得各种设备能够互联互通,进行数据交换。它通过定义物理层和数据链路层的规范,实现了广泛的兼容性和互操作性,是现代局域网的基础技术。

2024-06-17 23:51:56 4774

原创 IPV4和IPV6的区别在哪里

IPv4和IPv6是两种不同版本的互联网协议,它们在多个方面存在显著的区别,包括地址格式、地址空间、配置方式和功能特性等。

2024-06-16 22:10:32 997

原创 星型、环型、总线型和网状型拓扑结构是什么意思?

拓扑结构(Topology)是指对象在保持某些基本性质不变的情况下,不考虑距离和角度等几何细节的形状和空间关系。换句话说,拓扑结构研究的是物体在连续变形(如拉伸、压缩、扭曲等)下保持不变的性质。这一点不太好理解,我们需要通过一些举例来理解。想象你有一块橡皮泥,不管你怎么拉伸、压缩、扭曲,只要你不撕裂或粘合新的部分,它的基本性质就没有改变。拓扑学关注的是这种“橡皮泥”在变形过程中保持不变的性质。

2024-06-16 14:56:19 2304

原创 什么是局域网?

局域网(Local Area Network,简称LAN)是一种计算机网络,覆盖较小的地理范围,如一个办公室、一幢建筑或一个校园。局域网通常用于连接同一地点内的计算机和设备,以便它们可以共享资源(如文件、打印机、互联网连接)和进行通信。在家庭中,局域网常用于连接电脑、手机、平板、智能电视和其他智能设备,以共享互联网连接和本地资源。在企业中,局域网则用于连接员工的电脑、服务器、打印机和其他网络设备,以支持内部通信和业务运营。

2024-06-16 14:43:25 860

原创 怎么学习汇川Codesys PLC教程?

各位好,我在B站和抖音上都有发布视频的,搜索我的名称“阿凡工控分享”即可。在CSDN上发表文章也是想把我的一点见解和经验分享出来,进一步的方便大家进行学习。

2024-06-12 22:10:24 1702

原创 汇川CodeSysPLC教程03-2-4 RS485

RS485是一种用于串行通信的标准,通常用于工业自动化和远距离数据传输。它在电气工程和计算机科学领域中广泛应用。双向通信:RS485支持双向通信,即可以在一条线路上同时发送和接收数据,这使其在多点通信系统中非常有效。多点连接:RS485允许多达32个设备连接在同一条总线上,这对于需要多个设备互相通信的系统非常有用。长距离传输:RS485的通信距离可以达到1200米(4000英尺),这使其在需要远距离数据传输的场景中非常有用。差分信号传输:RS485使用差分信号传输,即通过两根线(A和B)传输信号。

2024-06-09 21:28:01 3870

原创 汇川CodeSysPLC教程03-2-3 Modbus ASCII

前面我们提到,在Modbus出现的早期变体当中,其中有一个就是ModBus ASCII,相比较于RTU的2进制传输,ASCII使用的是文本传输,整个数据包都是可打印字符。如何理解所谓的文本传输呢?首先我们需要理解什么是ASCII?LRC 校验是一种简单但有效的错误检测方法,通过累加消息中的每个字节并计算其补码,可以检测出在传输过程中发生的错误。Modbus ASCII 协议使用 LRC 校验来确保数据的完整性和可靠性。

2024-06-09 12:07:51 2594

原创 DataGridView取消默认选中行

DataGridView在添加数据后会默认选中第 一个单元格或者第一行,我就想取消它的默认选中行。在DataGridView绑定数据之后加上了ClearSelection()。这样一来,不论是启动窗体之后还是重新更新数据,都不会有默认选中行了。//加载表格生成后,放在最后面。代码就是这几个,只要放对地方,其中任意一个都能实现取消选中的效果。

2023-02-11 13:30:25 3336

原创 winform程序窗体设计器隐藏问题

在删除项目工程无用的nuget组件时,系统提示丢失掉了某程序集的引用,删除时没有在意,一般删库的过程中,系统会自动编译把问题消除掉,但是发现窗体设计器没有了,C#窗体只显示类的标记。

2023-01-13 17:18:40 700

原创 西门子分布式IO的通道映射是怎么建立的

PLC变量是如何与地址映射起来的?我们在地址总览中可以看到系统默认分配的地址现在我们需要查看其中某一个分布IO模块的地址选择GoTo跳转到模块的组态画面图示可以看到输入输出地址,在这里可以自由编辑地址,输入输出不必相同,同时如果出现地址冲突的问题,系统会自动提示。模块的地址更改的时候,这里会产生一个问题,那就是已经和模块建立映射关系的变量是不是需要进行重新绑定呢?难道需要一个个绑定映射么?实际上,当进行更改的时候,系统会自动弹出提示! 选项1 如..

2022-05-25 15:19:53 8116

原创 Modbus字节序说明

最近做ModBus TCP方面的测试有点多,尽管对于ModBus协议算是比较了解了,也经常知道字节传输序列的不同对工程师带来了很多不必要的麻烦,这不是一个技术难题,仅仅只是过去各家各户开发遗留下来的标准统一问题,所以这里写下这篇文章作为备忘。在Modbus通信中,目前我们主要有16bit(AB)、32bit(AB CD)和最新的64bit(AB CD EF GH)三种数据长度。每个字母代表一个字节。针对16bit传输,只存在正序(AB)或反序(BA)两种方式,也就所谓的正序先传高位,以及反序先传低位,为

2021-09-16 22:04:42 10878

原创 Python: 如何判断Excel文件是否被人打开

Python: 如何判断远程服务器上Excel文件是否被人打开.这篇博文,提供了一个非常好的思路来判定一个Excel文件是否被打开,判断是否有“~$”开头的同名文件在同级目录下存在:比如test.xlsx被打开后会存在~$test.xlsx文件,如果没被打开则没有该文件。接下里我们只需要使用os.path.exists('xxx.xls‘)方法来判定其返回值即可。以下是代码实现:#判定文件是否打开 def fileIsOpen(self,filename): filepath

2021-09-16 10:32:30 2458 1

原创 解读PropertyHelper

解读PropertyHelper文章目录前文正文PropertyHelper代码作用详细解读后文前文最近感兴趣的一个项目中,需要通过C#来实现一个上位机,网上的参考资料中,有关于仓库温控系统这样的实例可以参考借鉴。虽然该实例教程号称从0开始,但实际来看,在前期交代项目中使用的公共类库上,对这些类库的解释与说明基本上回避了诸如反射,特性等C#中比较难理解,也是中高阶的语法。作为一个小白,我看到这觉得非常难受,因为不喜欢这种看不懂的感觉,而且后续的代码只要依赖了这些公共类库代码的部分都有可能看不懂,这实在

2021-08-15 19:20:16 762 1

转载 AttributeUsage特性和特性标识符

AttributeUsage特性除了可以定制自己的特性来注释常用的C#类型外,您可以用AttributeUsage特性来定义您想怎样使用这些特性。AttributeUsage特性采用如下的调用惯例:1 [AttributeUsage(2 3 Validon,4 5 AllowMultiple=allowmultiple,6 7 Inherited=inherited8 9 )] 您可以非常容易地区别出哪些是定位参数,哪些是命名参数。强烈建议您在记录您的特性时采用这种格式,以便不必通

2021-07-25 11:50:42 533

原创 社区版Pycharm如何使用Flask

社区版Pycharm如何使用Flask众所周知,社区版Pycharm不自带Flask项目,以下介绍如何建立一个Flask框架DemoPycharm版本如图操作1. 安装Flask解释器2. 新建默认文件夹新建一个pure python project,并添加两个默认文件夹PS:名字一定不要打错,我之前因为templates少写了一个后缀s,抛了异常其中Static是存储你的静态内容,templates是保存一些网页模板使用的3. 创建测试程序新建一个py,写入以下程序```p

2021-07-04 11:07:44 10852 1

原创 2021-06-20

Python中最常见括号()、[]、{}的区别https://www.cnblogs.com/wushujun/p/11328455.html

2021-06-20 11:14:38 171

原创 2021-06-20

pycharm怎么改快捷键1.在pycharm中选择File–>Settings。2.在弹出的对话框左侧选择keymap,选择后在右侧就可以设置对应类型的快捷键。3.点开右侧中的一个选项,可以看到原有的快捷键。4.如果想添加快捷键,则在相应的选择项右键,选择Add Keyboard Shortcut。5.然后在弹出的对话框输入你想设置的快捷键。由于一般是英文的,要快速检索的话,尝试用英文检索,这样效率高一点,比如我习惯使用F5进行运行测试。直接输入Run进行检索就好了。...

2021-06-20 11:01:27 216

原创 S7-PLCSIM Advanced V3.0下载仿真失败

解决了S7-PLCSIM Advanced V3.0无法启动虚拟网口的问题后,新建一个虚拟PLC实例,实例状态为黄色打开博图,新建项目进行下载,发现报错在网上查阅相关问题后,有人勾选以下图中两项来解决不能仿真的问题。按照上图所示,尝试后还是无法下载成功,并且下载失败后,虚拟的PLC直接断开了无法搜索到...

2021-03-30 10:56:12 11822 5

原创 S7-PLCSIM Advanced V3.0无法启动虚拟网口的问题

点击切换虚拟网口,PC会跳出网卡无法驱动的提示,提示采用cmd指令“net start npf”来启动网口。显示该项服务无效,尝试启用帮助,仍然显示服务名无效。于是乎,在网上搜索相关的问题,在基于PLCSIM-Advanced搭建ModbusTCP通信仿真环境一文中提到了安装需要先安装WinPcap。想到自己自己对于安装WinPcap没有印象,于是猜测很有可能没有安装该项程序。(事实是安装S7-PLCSIM Advanced V3.0是并没有提示我安装WinPcap)那么重新安装即可。但是没有想.

2021-03-28 21:29:48 29889 2

原创 解决添加图片资源无法在Resource引用问题

Resource添加图片资源,在代码引用时发现property下无该图片资源,可以通过image下的import重新导入即可。image属性可为任一控件属性来添加图片。

2021-03-21 11:13:07 953

原创 添加MetroFrameWork后工具框无框架控件

添加引用后,如需要使用控件还需要在Toolbox中添加对应的dll方可显示。

2021-03-17 12:00:13 597

原创 上位机UI设计——嵌入式窗口切换

前文做过HMI的人都习惯了系统自带了窗口或者画面切换,C#中需要开发者自己去写这样一个逻辑,本文大致介绍一种思路来实现这种功能。分析所谓窗口切换其实就是将当前画面清空,然后重新绘制一幅实现好的窗口,那么要首先实现的就是原有窗体的擦除,然后重新导入绘制好的新窗体。实现首先我们新建一个panel用来加载新窗体,进行窗体的切换然后根据该panel大小建立两个同等大小的窗体form2与form3窗体切换的功能由按钮button2与button3来实现,首先我们需要写好切换窗体额方法 void

2021-03-16 16:07:41 2023 1

Codesys RTE安装说明

Codesys RTE安装说明

2024-08-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除