- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center寻求指导。
9年前关闭。
我正在实习/见习的公司主要使用西门子模块进行 PLC 编程。
这是因为大多数人都是电工并转而从事工程工作。
作为新手,我的问题是,当我编写 PLC 软件时,我不能真正高效和快速地编写代码。
即使我在 VS/Eclipse 中编写 C# 或 Java 时效率很高
与“真正的”编程语言相比,我无法真正使用 PLC 来提高工作效率,这真的很烦人。
最佳答案
PLC 编程在几个方面不同于传统的程序编程:
1)继电器梯形逻辑是一种相当原始的语言。很难有同样的生产力。
大多数 PLC 程序员不使用子程序;它几乎就像 PLC 世界是
那个时间和软件工程忘记了。你可以通过申请做得很好
结果是简单的软件工程方法,例如,定义接口(interface)
代码块之间,即使是抽象的。
2) 大部分 PLC 编程都与 bool 方程有关。如果你想成为好人
在PLC编程,努力处理 bool 逻辑:学习 bool 代数,
尤其是像德摩根定理这样的东西,用于在 AND 和 OR 之间分布 NOT
(由于 PLC 通常不提供 NOT 运算符,因此您需要更多
通常是你所期望的)
3)了解PLC编程是关于实时控制和反馈。
大多数标准编程语言(例如 Java)都很难解决这个问题。
仔细考虑 PLC 代码是驱动输出的逻辑这一事实,
并且被驱动的机械系统实际上是“逻辑”的
驱动PLC输入。我经常使用另一个建模机械系统
PLC,只是为了让我调试我的PLC程序而不需要真正的工厂机器
控制。这也可以让你模拟失败;见第 6 点。
4) 大部分 PLC 编程抽象地是关于从状态到状态的转换,
其中状态代表 PLC 对外部世界的了解,以及转换
当 PLC 读取外部输入并发现世界状态已
有所改变。尽可能多地学习有限状态自动机
和离散系统的监督控制。它会给你丰厚的报酬。
5) PLC 经常需要记住过去的事件。因此,大部分 PLC 逻辑是
与设置/重置/测试 bool /数字状态变量和/或计时器有关。因此,虽然 PLC 程序的代码通常看起来像纯逻辑,但实际上它
有很多副作用,这使得对该程序的推理非常困难。事实上,就像用 C 或 Java 等更现代的语言编写一样难。
6)注意处理机械故障。大多数 PLC 程序假定
受控系统如宣传的那样工作;这真是糟糕的做法。在现实世界中,受控
系统只会像宣传的那样工作,直到它崩溃,它最终总是会这样做。
如果您包含诊断代码以帮助确定 PLC 程序中的机械故障,则需要更长的时间
写它们,但用户会爱你,因为没有比这更糟糕的了
一台坏了的工厂机器,但它不会告诉你如何。停工的工厂
是一台停止的提款机,工厂经理讨厌它。
关于performance - 成为更好/更高效的 PLC 程序员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1361396/
我有一个功能是转换 ADO Recordset 进入html: class function RecordsetToHtml(const rs: _Recordset): WideString; 该函
经过几天的研究和讨论,我想出了这种方法来收集访客的熵(你可以看到我的研究历史here) 当用户访问时,我运行此代码: $entropy=sha1(microtime().$pepper.$_SERVE
给定一个无序列表 List ,我需要查找是否存在 String与提供的字符串匹配。 所以,我循环 for (String k : keys) { if (Utils.keysM
我已经搜索过这个问题,但没有找到我正在寻找的答案。 基本上,我想将类构造函数包装在 try/except 子句中,以便它忽略构造函数内特定类型的错误(但无论如何都会记录并打印它们)。我发现做到这一点的
我有一组三个数字,我想将一组数字与另一组数字进行比较。即,第一组中的每个数字小于另一组中的至少一个数字。需要注意的是,第一组中的下一个数字必须小于第二组中的不同数字(即,{6,1,6} 对 {8,8,
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
首先介绍一下背景: 我正在开发一个带有 EJB 模块和应用程序客户端模块的企业应用程序 (ear)。我还使用 hibernate JPA 来实现持久性,并使用 swingx 来实现 GUI。这些是唯一
我正在尝试在我的上网本上运行 Eclipse 以便能够为 Android 进行开发。 您可能已经猜到了,Eclipse 非常慢,并且不容易有效地开发。 我正在使用 Linux Ubuntu 并且我还有
for row, instrument in enumerate(instruments): for col, value in enumerate(instrument):
return not a and not b ^ 我如何以更好的格式表达它 最佳答案 DeMorgan's Law , 也许? return not (a or b) 我认为在这一点上已经足够简单了
我正在尝试让 Font Awesome 图标看起来更 slim https://jsfiddle.net/cliffeee/7L6ehw9r/1/ . 我尝试使用“-webkit-text-strok
假设我有一个名为 vals 的数据框,如下所示: id…………日期…………min_date…… .........最大日期 1…………2016/01/01…………2017/01/01…………2018/
是否有更 Pythonic 的方式来做到这一点?: if self.name2info[name]['prereqs'] is None: se
我有一个函数可以将一些文本打印到它接收到的 ostream&。如果 ostream 以终端为目标,我想让它适应终端宽度,否则默认为某个值。 我现在做的是: 从 ostream 中获取一个 ofstre
这个问题在这里已经有了答案: Should a retrieval method return 'null' or throw an exception when it can't produce
我有这个 bc = 'off' if c.page == 'blog': bc = 'on' print(bc) 有没有更 Pythonic(和/或更短)的方式在 Python 中编写? 最佳
输入:一个包含 50,000 行的 CSV;每行包含 910 列值 0/1。 输出:运行我的 CNN 的数据框。 我编写了一个逐行读取 CSV 的代码。对于每一行,我将数据分成两部分,称为神经元(90
据我所知,with block 会在您退出 block 后自动调用 close(),并且它通常用于确保不会忘记关闭一个文件。 好像没有技术上的区别 with open(file, 'r+') as f
我有一个使用 Entity Framework V6.1.1 的 MVC 5 网站。 Entity Framework DbContext 类和模型最初都在网站项目中。这个项目有 3 个 DbCont
我是编程新手,在尝试通过将 tableView 和关联 View 的创建移动到单独的类并将委托(delegate)和数据源从 VC 移动到单独的类来精简我的 ViewController 时遇到了一些
我是一名优秀的程序员,十分优秀!