- 博客(52)
- 资源 (26)
- 收藏
- 关注
原创 冗余系统设计前提
并非所有设备都可以设置冗余,冗余系统的设计相比非冗余系统具有更严格的限制。符合以下条件的设备才是可行的:1、没有随机出现的未知数量的变量实例2、数据存储结构是固定的如果一台设备运行过程中会随机出现未知数量的某种变量的实例,或数据存储结构是自由的,就意味着无法对这些数据进行有效的同步,此时的冗余设备是不稳定的。且冗余设备的恢复无法实现。具体可以实现冗余的设备有:1、不保存变量的设备:RTU、单稳态继电器等都属于此类;2、组合逻辑模块:使用传统梯形图编程的PLC、按照组合逻辑方式开发
2020-11-16 09:16:52
37
原创 工业通信网络结构
工业通信网络结构工业通信网络包含所谓的工业现场总线、局域网、公网等概念。这些概念在物理环境下并不是界线分明的,是一种主观上的分类。在物理环境下,目前工业网络结构都是设备与双绞线之间的通信。可以互相通信的设备与双绞线的集合称为网络。当网络中含有工业生产、加工、安防设备时,此网络可以称为工业通信网络。工业通信网络与其它网络命名不是互斥关系,同一个网络可以有多种定义。网络结构是对设备通信逻辑的设计理念,目前已有的网络结构有多主结构(如:CANOpen)、一主多从结构(如:Modbus)、一从多主结构(如:
2020-11-10 12:04:23
35
原创 互联网发展终端和桌面的未来
对于像我们这一代的年经人而言,大数据、云技术貌似是未来科技发展的主流方向。然而,了解过计算机发展的历史后,这些所谓的“高科技”其实是计算机行业中最为古老的东西。事实上目前人类掌握的所有技术都是古老的技术,现代与过去的区别在于外观、名词、规模,共同点在于原理、结构、建设方式。分布式和集中式如何定义的?其实分布式和集中式是同一事物的两个方面。一般用于区分依赖互联网的网络应用和自由的单机应用。当我们看到一个应用的用户群的形态时,我们发现网络应用的用户分布于世界各地,单机应用的用户只能在一个位置。于是,基于此种
2020-10-18 11:43:40
79
原创 对一些关于编码格式方面的老生长谈做一个重新的思考
一个函数中源代码不超过30行这个建议的原始意义在于使一个函数能够在显示器上完全显示。而多数的显示器大约就只能显示30行源码。遵循这一建议后,我们将会发现一个问题,虽然单个函数的可读性提高了,但是代价是为了分散源码而不得不产生大量的一次性的函数。这些一次性的函数不光使程序整体变得凌乱,在IDE中还会占用掉大纲空间。总体上看,提高单个函数的可读性而使工程更混乱并不可取。最初提出此建议的人,在当时的历史背景下,他所看到的工程是结构简单、功能单一的程序,甚至于一个进程只是为了进行一个数学运算。然而软件技术发
2020-10-14 10:32:57
32
原创 工控机JVM启动参数堆大小的设置建议
由于工控机上的内存一般都不大,多为2G或4G,为了延长寿命,通常会把虚拟内存关掉,而操作系统会用掉一半的内存,那么能够给应用程序使用的内存就很小了。其实只运行一个JVM的情况下,JVM会适应操作系统而自动调整堆大小,所以正常2GB以上的内存即使安装64位Win10也没有问题。但是如果还需要使用多个其他的辅助程序的情况下,JVM浪费内存的毛病就可能会导致系统不正常。工控机经常会安装一些辅助程序,比如SQL Server社区版、内网穿透客户端、VPN客户端,这些应用都需要消耗一些内存,JVM随机浪费内存的情
2020-09-16 09:45:03
43
原创 浅谈公共框架、定制框架和无框架
正规的软件工程总是遵循某些框架,以便于防止员工更换导致项目无人接手。几乎所有的框架都无法从根本上解决代码变乱的问题。其原因在于自顶向下的设计模式无法适应无限变更的工程。但总是一种让它越来越乱的方法能让代码继续维护下去。当软件遵循公共框架的时候,反编译的代码就具有一定的技术价值,就产生了技术风险。一些小工程和不正规的团队的工程或特殊工程没有按公共框架来做,这些代码即便开源也不会有人问津。因为即使看得懂,也无法简单地利用。此外,还有无框架工程。为了各种目的,公司不允许工程师深入了解一个订单的需求,工
2020-08-19 10:29:26
87
原创 Python与JAVA仿三菱PLC的性能比较
测试背景是一款自动化软件平台上的逻辑模块性能对比。能够实现复杂逻辑的目前有结构化文本(指令表)和Python(Jython)两个。三菱指令的解释器是原创的,因为没有相关的Java支持。Python程序的解释器是Jython2.7.2。由于功能等级不同,三菱指令的编译时间较快,对程序的修改是无缝接入的。Jython的compile函数调用时间约5秒,但可以使用Python的高级功能。实际运行时不再编译,所以这个时间没有测。编译完成后运行几分钟后,对逻辑区的运行时间进行测量,排除内部IO区的干扰(例
2020-08-18 16:29:52
154
原创 带有点的IPv4输入框和带冒号的时:分:秒输入框的制作方法
固定格式文本框在Windows控制面板中的网络配置和系统时间设置中有出现过。但是MFC、JavaFX、SWT、HTML中都没有这种控件。假设这是一个系统控件,为什么又不让应用层使用呢?显然假设不合理,那么也就是说这种固定格式文本框并不是一个系统API提供的功能。固定格式文本框的本质是一个不可编辑的可见文本框和若干个透明背景的小文本框。文本框的背景颜色可以设置成透明,再把透明背景的文本框放到一个普通背景的但不可编辑的大文本框上,看起来就好像直接操作的是那个大文本框一样。当小文本框中输入了某个分隔符或字
2020-08-10 10:24:26
56
原创 延时函数名称sleep和delay的区别
延时函数的两种常用名称是sleep和delay。一般在上位机多见sleep,单片机常用delay。那么sleep和delay的意义有何区别?sleep意为睡眠,即线程挂起,由定时器重新唤醒线程。sleep作用期间,该线程不占用CPU资源。delay意为延迟,即线程等待,由线程自身进行循环查询,在设定时间之后退出循环。delay作用期间,该线程占用CPU资源。在上位机,delay常可以和sleep组合使用,即循环查询中调用sleep,降低CPU占用率。sleep是由系统内核、固件库或特殊功能寄存器
2020-08-03 10:41:01
537
原创 生产过程的几种模型
所谓生产过程,就是指一个产品从无到有的过程。产品是一个企业用以盈利的价值载体,产品的生产,目的在于产生额外的交换价值,而不在于产生新的使用价值。对于零件加工工厂,产品是指通过对原料进行切削和变形得到的零件;对于电子加工厂,产品是指利用电子元件和PCB板料、焊料制作而成的电路板;对于装配工厂,产品是指用零件、元件、电路板、耗材等组装而成的机构或机械;对于系统软件工厂,产品是用各种低级指令和固件库程序制作的操作系统软件;对于SDK工厂,产品是用操作系统API组装而成的基本模式和算法;对于平台工厂,产品是用S
2020-07-30 14:44:44
483
原创 Java11及更高版本的JavaFX配置
自Java 9开始,JDK增加了模块系统,把JavaFX分离了出来。不过即使分离出来,JavaFX也还是属于JDK的一个插件。这种插件有两种用法,一是在JDK外部安装,通过java命令导入,二是嵌入JDK中,把JDK扩展成自带JavaFX的版本。外部安装的方法需要使用以下格式启动JARjava -Dfile.encoding="UTF-8" --module-path "D:\lab\java\Library\lib\jar\openjfx-13.0.1_windows-x64_bin-sdk\j
2020-06-11 11:00:21
1804
原创 尽量不要更改运行中的py文件
Python有一个特点,就是程序文件是文本文件。它又和bat不同,bat的更改会实时影响脚本的运行,而py文件更改不会影响已经运行的Python进程。如果要刷新py文件的更改,就必须要重新加载这个py文件。作为子进程使用时,python可以方便地更改程序,而不需要编译,只需要在上级进程重启一下就行了。Python比较适合实现需要快速修改又有复杂逻辑的业务代码。使用Python时需要注意,如果修...
2020-05-06 11:26:06
299
原创 不要使用命令行新建explorer进程的方式打开文件夹或文件
打开windows后,系统默认启动一个explorer进程。然后还可以使用命令行启动新的explorer。命令行启动explorer一般用于打开网页或文件夹,也用于以默认程序打开文件。但是新建explorer打开文件夹或文件时,这个进程不会自动退出,也不能在父进程强制关闭。多次操作后,一些低配的电脑就会卡死。explorer用于打开网页时,测试用的浏览器为360浏览器时,退出浏览器后半分钟,e...
2020-04-27 11:29:29
298
原创 用Java实现简单的上位机三菱PLC
上位机已经有丰富的编程语言,所以不再需要完整的PLC功能。提供梯形图的指令是用于快速配置的。package pers.laserpen.util.automation.plcEmulator;import java.util.*;import java.util.Map.Entry;import java.util.concurrent.ConcurrentHashMap;impo...
2020-04-20 15:38:08
888
原创 数据拼接三要素
什么是数据拼接~ 任何在机器间传递多组相互独立报文且不能保证每一组报文各自同时传达的通信方式都需要数据拼接。 所谓“一组报文”是指具有独立含义(或空含义)的命令、文件、数据、信号等二进制数字。一组报文可以看作是一个二进制数字,数值大小相同的报文具有相同的含义,但具有相同含义的报文不一定有相等的数值大小。 不能保证每一组报文各自同时传达的通信方式,是指无法从物理层保证所传输的数字相互独...
2020-04-06 10:44:58
161
原创 WIN32串口通信重叠方式打开的JNI代码
/* DO NOT EDIT THIS FILE - it is machine generated */#include "JNIInclude/jni.h"/* Header for class pers_laserpen_util_communication_serialPort_NativeSerialPortUtils_JNI */#ifndef _Included_pers_...
2020-04-05 16:17:37
52
原创 二维平面覆盖算法(SolidWorks中PhotoView 360 的图块渲染顺序)
这个需求就是要在一个正方形矩阵中,写入连续的自然数,且矩阵中任意两个差为1的自然数位置要相邻。一切都是从一个[ 0 ]开始的。然后选择一个增长方向。可以向右或向下。我以向右为例,第一次增长后得到如下矩阵: 0 1 3 2 这个矩阵很简单,可以直接手工填写。但我们需要让尽可能多的自然数以连续的方式填充到正方形矩阵中。也就是达到这个效果:0 1 ...
2020-03-16 15:10:52
137
原创 Java修饰符的顺序
Java修饰符分为几个层次:1、外权限:public、protected、【空】、private2、外表现:synchronized、【空】3、内实现:abstract、native、【空】4、静态:static、【空】5、访问约束:final、volatile、【空】6、数值约束:strictfp、【空】但是按eclipse的图标显示情况,似乎并没有按层次来排序。以下...
2020-03-05 15:04:05
216
原创 西门子V20变频器Modbus通信的配置和报文
这几天找了很久西门子V20的Modbus通讯资料,基本都说不清楚。所以发此文以可操作的形式介绍一下西门子V20变频器的MODBUS通讯。假设我们现在有一台不知道什么状态的V20,首先应该进行恢复出厂设置。恢复出厂设置短按M键,进入参数设置。找到P0003,设置成0;这一步不是必须的,只是为了更快的找到需要的参数。 找到P0010,设置成30; 找到P0970,设置成21;此...
2020-02-21 11:15:34
4759
原创 弱引用的实现
所谓弱引用是指所持引用不能防止其引用的对象被释放的一种指针。实现弱引用需要额外设计一个指针包装者:struct Box { void *object=nullptr; size_t refCount=0,weakCount=0;}这个Box和object对象一样是需要new出来的。把object的指针放入Box中,再把Box指针放入一个初始的强引用容器中...
2020-01-17 14:38:53
224
原创 Java Object intern算法
Java中内置有一个String.intern方法,对于重复使用的内容相同而内存地址不同的String对象,调用intern方法可以节省内存空间。如果将String作为HashMap的键来使用,intern可以提高性能。那么今天我来向大家介绍一个针对Object的intern。Java没有提供这个方法,所以我实现了它。package pers.laserpen.util.java;i...
2020-01-16 20:53:56
99
原创 Java声音设备与二进制的转换
对网上一些代码进行整理,把多余的东西全都挖掉了,只剩下声音与二进制的转换代码。这是广大网友帮助的结果,我也不能私藏,现将代码公开如下:首先是需要一个静态工具类,它是网友们提供的代码的纯化,每一个函数代表一个独立的步骤,有多种分支,未必全都要用上:package pers.laserpen.util.multimedia;import java.awt.Toolkit;import ...
2019-12-25 16:33:02
256
原创 PLC结构化文本设计模式和算法
前言. 目前PLC应用学科并没有设计模式方面的教程,导致学员解题都得从零开始设计。梯形图无法发展出PLC的真正功能,所以我们需要以结构化文本来实现设计模式。本文以普及结构化文本为目的,将教大家结构化文本的入门和PLC编程设计模式。 本文将会讲解高度抽象的设计模式,设计模式与案例无关,并不以案例讲题。反正学校按这种方式教了那么久也没人听得懂。我将主要以理论为主,避免与具体案例绑定,以防止读...
2019-12-19 23:26:04
1215
3
原创 标准C作为子进程时的刷新问题
使用C和C++的输出流向调用的进程返回字符串时,C++代码在调用std::endl后会输出,而printf则一直到子进程退出才有输出。查看std::endl后,发现起作用的是std::cout.flush();在起作用。为了使C语言输出流也能正常向调用者返回字符串,需要找到C中的flush函数。C语言的flush函数为fflush,在stdio.h下,用法为fflush(stdout)。在...
2019-12-10 22:05:51
88
原创 精英教育和素质教育
精英教育和素质教育是两个标识符,并非字面的意义。精英教育是有素质的精英,素质教育教的是精英的素质。只是为了区分指代而采用不一样的文字组合,就像人的名字其实和人的身体没有任何关联。精英教育的最终目标是让学生成为某个标定的复制品,类似于查表法。素质教育的最终目标是让学生自理,类似于遗传算法。在社会发展的不同时期,两者的重要性不同。比如解放初期,我国的技术实力还非常原始,以西方发达国家为标定进行精英...
2019-12-06 09:35:30
265
原创 自底向上的开发
在这个急功近利的时代,自顶向下的开发模式能够帮助我们快速完成项目,争取眼前利益,于是几乎所有懂点程序的人就把自顶向下奉为圣经。然而自顶向下给我们带来了一些麻烦。由于价值观的转变,为了保证顶层结构而牺牲底层实现,导致了大量的一次性代码。每个项目都是新的,于是就有了大量的加班。如果真的想写好代码,就不能从顶层开始设计。重写一个架构要比重写一套底层容易得多,我宁愿架构错了也不希望有底层的Bug。写过...
2019-11-30 09:18:35
165
原创 IGBT反并联二极管的功能
最近看到网友们对IGBT反并联二极管存在着很大的误解,特写此文告诉大家真相。此图是三相双向逆变电路,图中我们可以看到反并联二极管的用法。当输入直流电压高于负载反向电动势时,它是一个逆变电路,将直流电变成峰值等于(或小于)直流电压的交流电(波形由驱动信号决定,常用驱动信号是SPWM正弦脉宽调制,即正弦波交流电)。当输入直流电压低于负载反向电动势时,它是一个三相整流桥,此时来自负载的反...
2019-11-29 12:04:06
3061
原创 让Octave支持中文
Octave是免费的matlab语言解释器,适合用作子程序,进行复杂的数学计算。但Octave和Matlab本身不支持Unicode字符作为标识符。如果要用Unicode字符作为Matlab程序的标识符,需要对其进行转义。Matlab程序中可用的字符还停留在早期的C语言水平,是目前支持的字符最少的编程语言。我们需要在53个标准字符中选择一个转义字符。我选择下划线作为转义字符,因为在驼峰命名法中...
2019-11-20 14:51:26
1316
4
原创 变频器定位控制笔记
变频器定位用于大功率电机的粗略定位控制,可用于电梯,自动货架起重机的升降控制。由于伺服电机的功率有限,只能用变频器进行定位。短行程的变频器定位可以使用变频器自带的模拟量比较功能,某些型号的变频器有提供两路模拟量信号输入,其中一路接电机位置传感器,另一路接定位信号,变频器会自动根据电压差控制电机正反转,达到粗略定位的目的。长行程变频器定位需要使用控制器和编码器。可以使用PLC作为控制器,需要...
2019-11-14 11:12:35
836
原创 向量法计算平面与直线的交点
- 已知有平面上三个点(ABC)坐标,直线上两个点(DE)坐标,求平面ABC与直线DE的交点坐标。 解: /** * 平面与直线的交点 * * @param plantA * @param plantB * @param plantC * @param lineD * @param lineE * @return */ public st...
2019-11-13 16:24:03
1316
4
原创 线程交接
· 所谓“线程交接”,就是指同一个任务由于某种原因,需要安排在不同的线程中运行而产生的一种流程管理操作。 mermaid graph LR A(开始)-- ```mermaidgraph LRA[长方形] – 链接 --> B((圆))A --> C(圆角长方形)B --> D{菱形}C --> D...
2019-10-31 17:26:16
75
原创 为什么Java的性能通常比C++好,也能做大型架构,但仍然无法取代C++
这是因为C++对于动态库的连接更方便。现在的大型工程已经很少有完全自己开发的了,一般都是选择使用各种软件包来简化任务。很多软件包特别是商业软件包是以动态库发布的,有少数是静态库的,也有部分是开源的。软件包应该选择什么样的编程语言开发?如果使用托管的语言,那么生成的软件包将很难兼容所有的编程语言。只有C接口是兼容其他编程语言的,所以多数通用的软件包都是提供C接口。调用C接口最简单的方法就是直接在...
2019-10-28 09:16:08
482
原创 向量法计算体积的思路(没有代码了)
向量法计算体积的关键是把立体分解成锥体。立体必须是由一系列有限平面多边形封闭而成的,可以使用多边形,但一定要是平面多边形。必须密封,如果不密封就会导致体积误差。可取任意点为基准点(事实上二维空间计算平面多边形的面积也可以取任意点为基准点),立体每一表面上的平面多边形可与基准点组成一个锥体。锥体的底面积可取多边形边线上一点(也可以取同平面上任意点,但取边线点比较方便),与边线上每一线段分...
2019-10-25 11:26:04
407
3
原创 向量法计算多边形面积
计算多边形面积的方法为将多边形分解成多个三角形,然后把这些三角形的面积相加。三角形面积为两边向量叉积除以2。 这是Java代码,目前是第3版,已经尽可能优化了,相比初版有25%的性能提升。 /** * 平面多边形面积算法3,用原点为基点(不需要从图形边线上取点)<br/> * 多计算一条线段,但减少了每一步的两次减法(起于原点的向量等于节点的坐标),使误差减小...
2019-10-22 10:07:21
719
原创 三菱PLC编程口通信上位机端报文和java示范代码
读操作: 发送 02 30 XX XX XX XX YY YY 03 CS CS XX是寄存器地址转16进制字符串,定长4个ASCII字符,YY是读取的字节数转16进制字符串,定长2个ASCII字符,CS是对从30(含)到03(含)的每一个字节求和(字节本身的数字0~255,而非它所代表的文字含意'0'~'F')然后除以256的余数转十六进制的字符串,定长2个ASCII字符。字符串是以...
2019-10-21 09:10:20
1417
原创 三菱FX3U结构化文本编程·AB相编码器
AB相编码器原理是使用2位格雷码的变化表示编码器正转一或反转。标准的正转格雷码为{0, 1, 3, 2}不断循环,反转则是{0, 2, 3, 1}。正转时每一次从1到3计数器加1,反转时从2到3计数器减1。三菱FX3U也支持3个格雷码的检测,0可以不要,这个是非正常特性,不建议使用。命令为LD M8000OUT C251 K0用ST写就是OUT_C_32(TRUE,CC251,...
2019-10-21 08:48:47
1260
原创 讨论JAVA和QT之争
这是两种以跨平台为特色的开发方式。Qt更多被认为是一种框架,但是Qt中有新增一些C++所没有的语法,所以也可以认为是一种编程语言。Java被认为是一种编程语言,但是很多人并不知道JAVA的编程语言其实是Java SE,而他们所知的Java EE其实不是编程语言,反而是一种框架。Qt和Java到底怎么选?没有任何明确需求的前提下,我认为尽可能使用Java,因为Java能够解决Qt不能解决的问题,...
2019-10-19 11:32:24
4982
2
原创 记录有工业价值的Windows NT版本对应的Java版本号
我是从Windows XP开始遇到版本问题的,而且早期的jdk也很难找全,所以只从Window XP开始记录。这个博客只是用于记录配套相应的有工业价值的Windows系统的最大能够运行的JDK版本号:有工业价值的版本1:Windows XP -> JDK 8U112有工业价值的版本2:Windows 7 -> 暂未过时...
2019-10-12 14:30:50
102
原创 JavaFX中的ChoiceBox和ComboBox的区别
ChoiceBox ComboBox 不支持键盘直接打字 可以像TextField一样打字 放入TableView中时无边框,底色透明,只能看到文字和三角形按钮 放入TableView中时有边框,底色为标准Button颜色(不可编辑时)或TextField颜色(可编辑时) 弹出下拉菜单时,本体不保留上次的选项 弹出下拉菜单时,本体保留上次的选项,并且菜单的选中位...
2019-09-24 10:02:41
1382
原创 PWM算法
PWM用于直流斩波,可以用于直流电升压或降压,常见的PWM用于降压。PWM利用占空比来调节单位时间内能量输出的密度,在宏观上体现为输出电压与输入电压不同。 狭义上的PWM只有一种算法,通过线性函数与常量的比较来判定这个位是输出高电平还是低电平。输出的比特流类似于“1110000000”这是一个占空比为3/10的PWM比特流,它以10个位为一个PWM周期,其中高电平占3个位,所以占空比...
2018-05-17 10:13:45
4751
精密坐标纸(doc,docx,pdf,edd四个文件,内容相同)
2010-10-23
Unicode和ANSI对照表
2012-05-18
开目鼠标滚轮操作脚本
2015-01-23
Altium Designer Summer 09破解器
2010-11-12
OPCUA2018年10月开发包3.1.6
2018-10-28
JAVA精确定时器
2015-10-14
最小的UNICODE文件
2011-12-31
编译JNI的gcc指令代打和测试例程
2015-12-03
JAVA单、双行科学计算器和高精度计算器源码
2016-05-10
Java文件操作类
2015-09-02
文字加密套装(简单的文字加密)
2012-02-28
封闭式Java Socket代码
2015-03-21
VS2010用Win32开发新手模板
2013-03-31
获取质数表.zip
2019-11-06
JNI指令代打2.0
2015-12-03
快速的傻瓜型UNICODE查询
2012-01-02
Unicode快速查
2012-02-28
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝