标签: plc

用C#编写解释器:实现指令的最佳方法是什么?

我正在使用C#编写PLC语言解释器.该PLC语言包含20多种数据类型和25种左右的指令.一旦我开始生成代码,我就会平衡两种不同的方式来编写指令:

1)每种指令都在一个包含大的类中表示switch,以便选择数据类型.例:

public class ADD : Instruction
{
    private string type;

    public ADD(string type)
    {
        this.type = type;
    }

    public bool Exec(Context c)
    {
        switch (type)
        {
            case "INT":
                short valor2 = c.PopINT();
                short valor = c.PopINT();
                short result = (short)(valor + valor2);
                c.PushINT(result);
                break;
            case "DINT":
                int valor4 = c.PopDINT();
                int valor3 = c.PopDINT();
                int result2 = (int)(valor4 + valor3);
                c.PushDINT(result2);
                break;
            case "BOOL":
                // Implement BOOL
                break;
            // Implement other types...
            default:
                break;
        }

        c.IP++;
        return …
Run Code Online (Sandbox Code Playgroud)

c# interpreter plc instruction-set

2
推荐指数
1
解决办法
2177
查看次数

VBA中出现运行时错误429,但是类已注册

我正在尝试重新创建一个使用javascript打开与PLC的连接,然后在网页上显示各种信息的程序。由于各种原因,我宁愿以MS Access的形式使用它,并且花了很多时间试图找到要使用的正确的dll(如果有人好奇,请使用Jet32X.dll)。最后,我将javascript中调用的CLSID追溯到PLC的注册类,然后尝试用VB代码创建该对象。它不会超出“ Dim As New”这一行,但是会引发运行时错误429:“ Active X组件无法创建对象”。真的希望我有更多关于为什么的信息。
我知道该课程已注册,因为这是我首先找到它的方式。我知道DLL文件没有损坏,因为该程序可以从JS版本正常运行。我暗中怀疑这里发生了某种不兼容,因为PLC和支持软件已经很老了,而我正在使用Microsoft Access 2013(及其关联的VBA)。但是,我真的想不出一种验证这一点的好方法。还有其他想法吗?还有其他原因导致此问题吗?

vba activex plc clsid ms-access-2013

2
推荐指数
1
解决办法
2208
查看次数

在基于Linux的WAGO PFC200 PLC上与CoDeSys程序通信

我现在熟悉PLC,特别是WAGO 750-8206 PLC.它提供了一个Linux操作系统,可以运行CoDeSys程序.控制器上连接了一些I/O模块:750-530,750-430和750-600.我想知道的是:

是否有可能编写一个在PLC上运行的C++ linux应用程序并获取/设置数字输入和输出?

更好的是:我可以编写一个"与I/O对话"的CoDeSys程序并处理所有逻辑,同时可以通过C++ linux程序访问吗?这个想法是这样的:我希望CoDeSys程序能够检查两个数字输入.如果两者都很高,则应将变量设置为定义的值.linux应用程序应该能够读取该变量并进行进一步处理(例如将JSon数据发送到服务器或类似服务器).

此外,当linux应用程序收到触发命令的消息时,我需要能够将命令从linux应用程序发送到CoDeSys程序,以便切换数字输出(或在模拟输出上设置值等).

我对这个主题的任何想法和评论都非常感激,因为我对这个主题完全不熟悉.提前致谢!

c++ linux plc codesys

2
推荐指数
1
解决办法
7221
查看次数

如何将消息传递给PLC

我没有任何PLC的经验,但对于我将要做的下一个项目,我将不得不开发一个与PLC通信的应用程序.基本上,我将收到一条XML消息,我必须转发给PLC.我不会进行PLC代码的开发,但我想了解如何设计PLC数据结构(尽可能接近xml模式)并将消息发送到PLC.

尚未选择应用程序的编程语言,因此任何语言的示例都可以.

language-agnostic communication plc

1
推荐指数
1
解决办法
1143
查看次数

Beckhoff TwinCAT:使用C++而不是结构化文本的缺点

我想专注于进入Beckhoff/TwinCAT PLC编程.

因为我相对习惯于C/C++,所以这将是一个很好的起点.学习结构化文本相比有什么缺点吗?

plc twincat

1
推荐指数
1
解决办法
6096
查看次数

在TwinCAT 3中创建库

我已经制作了一些"标准"功能块,我想添加到新库中,我可以在制作新项目时包含这些功能块,但是为了我,我无法弄清楚如何去做.

在Beckhoffs网站上,它说要从库模板创建一个新的库项目.我没有那个模板,我只是重新安装了包含所有内容的TC3.

所以我的问题是:在TC3中创建新库的过程是什么,以及如何向其中添加函数?

plc twincat

1
推荐指数
1
解决办法
1972
查看次数

需要澄清 opc ua 服务器和 opc ua 客户端

我想创建一个工业自动化应用程序来执行以下功能:

  1. 从 PLC、SCADA 和 DCA 读取值
  2. 处理这些值并将故障通知主管和技术人员

我是工业自动化行业和物联网的新手,我知道我们有 OPC UA 来救援。

我浏览了许多网站和 YouTube 视频来了解 OPC UA 及其前身(OPC DA、OPC A&E、OPC HDA)。我已经安装了 matrikon OPC 服务器和资源管理器(客户端)来探索更多。

假设我想从SIMATIC S7-1200 PLC读取信号,根据我的理解,OPC UA服务器是随PLC一起提供的,用于将OPC UA信息转换为Profinet信息。

所以,我的问题是:

  • 我应该在哪里编写逻辑来读取值?OPC 服务器还是客户端?
  • 我将使用 NODE-OPC-UA。有没有开源的 OPC 客户端 GUI?
  • 如何编写我们自己的没有OPC UA投诉的PLC OPC服务器?

如果有人分享一些资源,将不胜感激!

plc opc-ua tia-portal s7-1200 siemens

1
推荐指数
1
解决办法
2591
查看次数

清除结构化文本中整个结构的最佳方法是什么

这就是我现在的情况

TYPE MyType: STRUCT
    name: STRING[20];
    input: INT;
    output: INT;
    END_STRUCT
END_TYPE
Run Code Online (Sandbox Code Playgroud)
PROGRAM PLC_PRG:
    VAR
        struct:  MyType;
        struct_NULL:  MyType;
        error: BOOL;
    END_VAR

    IF error THEN
        struct := struct_NULL;
    END_IF
END_PROGRAM
Run Code Online (Sandbox Code Playgroud)

是否有另一种方法可以使结构无效,而无需声明和使用struct_NULL

plc st structured-text iec61131-3

1
推荐指数
1
解决办法
3975
查看次数

PLC梯形逻辑

我正在尝试使用PLC来监控赛道.我将使用3个光电传感器来显示哪辆车首先越过终点线.每个传感器都有OTL(锁存)指令.每条车道都有一盏灯,指示哪辆车位于首位.没有第一盏灯的汽车不会来.将有3名法官.在每场比赛结束时,一旦获胜者被记录,3名裁判将使用他们各自的开关将指示灯重置为关闭状态(未锁定状态)以准备下一场比赛.禁止任何由比赛裁判作弊的企图,判断开关被编程,以便所有3名裁判必须同意复位,并且只有在所有3辆车都通过终点线后才能进行复位.评委将使用One Shot Rising(OSR)指令进行编程.需要注意的是,我们正在使用SLC 500 PLC.我没有提到Iam使用罗克韦尔自动化软件RS Logics,所以请在梯形逻辑上使用Rockwell的说明.

plc

0
推荐指数
1
解决办法
2221
查看次数

如何使用opc ua从PLC读取信号?

我的机器上正在运行一个节点操作服务器。我想从PLC读取数据。据我了解,OPC Server用于在PLC上进行读写。

我已按照说明从http://node-opcua.github.io/创建服务器和客户端

那么,我的问题是如何从PLC读取信号?我是物联网和OPC UA的新手。请指导我。

plc opc-ua node-opcua

0
推荐指数
1
解决办法
2562
查看次数

Twincat 3.0 如何将字符串转换为 ASCII 代码,反之亦然?

TwinCAT 中是否有任何功能块允许将字符串转换为 ASCII 代码,反之亦然?

我找到了这个函数f_ToCHR,但它一次只转换一个字符,为了转换整个字符串,我需要把它放在一个 for 循环中,这不是最佳的。

是否有任何函数可以进行整个字符串转换,而不是逐个字符转换?

plc twincat

0
推荐指数
1
解决办法
80
查看次数

西门子PLC编程最佳实践

我的问题很简单。有没有学习使用西门子 PLC 的有用地方?

plc siemens

-6
推荐指数
1
解决办法
1470
查看次数