我正在使用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) 我正在尝试重新创建一个使用javascript打开与PLC的连接,然后在网页上显示各种信息的程序。由于各种原因,我宁愿以MS Access的形式使用它,并且花了很多时间试图找到要使用的正确的dll(如果有人好奇,请使用Jet32X.dll)。最后,我将javascript中调用的CLSID追溯到PLC的注册类,然后尝试用VB代码创建该对象。它不会超出“ Dim As New”这一行,但是会引发运行时错误429:“ Active X组件无法创建对象”。真的希望我有更多关于为什么的信息。
我知道该课程已注册,因为这是我首先找到它的方式。我知道DLL文件没有损坏,因为该程序可以从JS版本正常运行。我暗中怀疑这里发生了某种不兼容,因为PLC和支持软件已经很老了,而我正在使用Microsoft Access 2013(及其关联的VBA)。但是,我真的想不出一种验证这一点的好方法。还有其他想法吗?还有其他原因导致此问题吗?
我现在熟悉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程序,以便切换数字输出(或在模拟输出上设置值等).
我对这个主题的任何想法和评论都非常感激,因为我对这个主题完全不熟悉.提前致谢!
我没有任何PLC的经验,但对于我将要做的下一个项目,我将不得不开发一个与PLC通信的应用程序.基本上,我将收到一条XML消息,我必须转发给PLC.我不会进行PLC代码的开发,但我想了解如何设计PLC数据结构(尽可能接近xml模式)并将消息发送到PLC.
尚未选择应用程序的编程语言,因此任何语言的示例都可以.
我想专注于进入Beckhoff/TwinCAT PLC编程.
因为我相对习惯于C/C++,所以这将是一个很好的起点.学习结构化文本相比有什么缺点吗?
我已经制作了一些"标准"功能块,我想添加到新库中,我可以在制作新项目时包含这些功能块,但是为了我,我无法弄清楚如何去做.
在Beckhoffs网站上,它说要从库模板创建一个新的库项目.我没有那个模板,我只是重新安装了包含所有内容的TC3.
所以我的问题是:在TC3中创建新库的过程是什么,以及如何向其中添加函数?
我想创建一个工业自动化应用程序来执行以下功能:
我是工业自动化行业和物联网的新手,我知道我们有 OPC UA 来救援。
我浏览了许多网站和 YouTube 视频来了解 OPC UA 及其前身(OPC DA、OPC A&E、OPC HDA)。我已经安装了 matrikon OPC 服务器和资源管理器(客户端)来探索更多。
假设我想从SIMATIC S7-1200 PLC读取信号,根据我的理解,OPC UA服务器是随PLC一起提供的,用于将OPC UA信息转换为Profinet信息。
所以,我的问题是:
如果有人分享一些资源,将不胜感激!
这就是我现在的情况
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来监控赛道.我将使用3个光电传感器来显示哪辆车首先越过终点线.每个传感器都有OTL(锁存)指令.每条车道都有一盏灯,指示哪辆车位于首位.没有第一盏灯的汽车不会来.将有3名法官.在每场比赛结束时,一旦获胜者被记录,3名裁判将使用他们各自的开关将指示灯重置为关闭状态(未锁定状态)以准备下一场比赛.禁止任何由比赛裁判作弊的企图,判断开关被编程,以便所有3名裁判必须同意复位,并且只有在所有3辆车都通过终点线后才能进行复位.评委将使用One Shot Rising(OSR)指令进行编程.需要注意的是,我们正在使用SLC 500 PLC.我没有提到Iam使用罗克韦尔自动化软件RS Logics,所以请在梯形逻辑上使用Rockwell的说明.
我的机器上正在运行一个节点操作服务器。我想从PLC读取数据。据我了解,OPC Server用于在PLC上进行读写。
我已按照说明从http://node-opcua.github.io/创建服务器和客户端
那么,我的问题是如何从PLC读取信号?我是物联网和OPC UA的新手。请指导我。
TwinCAT 中是否有任何功能块允许将字符串转换为 ASCII 代码,反之亦然?
我找到了这个函数f_ToCHR
,但它一次只转换一个字符,为了转换整个字符串,我需要把它放在一个 for 循环中,这不是最佳的。
是否有任何函数可以进行整个字符串转换,而不是逐个字符转换?
plc ×12
twincat ×3
opc-ua ×2
siemens ×2
activex ×1
c# ×1
c++ ×1
clsid ×1
codesys ×1
iec61131-3 ×1
interpreter ×1
linux ×1
node-opcua ×1
s7-1200 ×1
st ×1
tia-portal ×1
vba ×1