问题标签 [plc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - UDP套接字接收数据失败
我有一个问题:我创建了一个小的 Python 脚本来从 LAN 上的 Omron PLC 内存中读取数据。Delphi 程序运行批处理文件,定期(每 6 秒)运行 Python 脚本。
该脚本在 2 台 Win 7 PC 和 1 台 Win XP PC 上运行。
我的问题是:Win XP PC和PLC之间没有数据传输一段随机时间(大约1分钟,有时更多),但Win 7 PC与同一个PLC通信没有问题。
我使用UDP协议。
LAN 似乎“睡着了”。这是日志文件:(08:41:13 -> 08:42:30。预期 08:41:13 -> 08:41:19, 08:41:25, 08:41:31, ...)
可能是什么问题呢?
c++ - 二进制 PLC 通信的校验和
我一直在摸索计算校验和以使用二进制命令与 Unitronics PLC 通信。他们提供了源代码,但它是一个仅限 Windows 的 C# 实现,除了基本语法之外,这对我没什么帮助。
规范 PDF(校验和计算接近尾声)
C#驱动源码(Utils.cs中的校验和计算)
预期结果
下面是字节索引、消息描述和有效的示例。
规范要求计算 22 字节消息头的累积值,以及单独的 6+ 字节详细信息,得到 sum 模 65536 的值,然后返回该值的二进制补码。
尝试#1
我的理解是 Python 中的波浪号 (~) 运算符直接源自 C/C++。在编写了创建消息的 Python 一天后,我想出了这个(精简版):
信息:2F5F4F504C4300FE010000004D000000000001000600600L010001FF010001005C
我在那里看到了一个 L,这与昨天的结果不同,而且没有更接近。如果您想要基于消息的其余部分的快速公式结果:Checksum(Header) 应该返回 F1FC 并且 Checksum(Details) 应该返回 FEFE。
它返回的值与规范中的示例相差甚远。我认为问题可能是一两件事:Checksum 方法没有正确计算十六进制字符串的总和,或者 Python~
运算符不等同于 C++~
运算符。
尝试#2
一个朋友给了我他对计算应该是什么的 C++ 解释,我只是无法理解这段代码,我的 C++ 知识很少。
networking - LabView Client VI 通过网络 (LAN) 与 WinCC OPC Server 通信时出错
我正在尝试使用 Siemens PLC 使某些系统自动化;为此,我们开发了用于控制和监视的 WinCC Flexible RT 应用程序,并将基于 PC 的 HMI 面板声明为 OPC 服务器。哪个工作正常。
现在,当我尝试在同一台 PC 上的 WinCC 或 Labview 中创建 OPC 客户端应用程序时,我能够访问客户端上服务器的所有标签,我能够这样做。
当我尝试在通过局域网连接的其他计算机上创建客户端应用程序时[完美且配置良好的网络工作],在这种情况下我无法访问 OPC 服务器/标签。
在这种情况下可以做些什么。?
floating-point - PLC 结构化文本,将十进制转换为实数(浮点数)。没有得到我期望的价值。(IEEE-754)
我有一个通过 Profibus DP 与 PLC 通信的硬件,它向我发送 4 个十六进制字节的数据,即“44 79 FF FF”,并且在 PLC 程序中,我为此输入数据声明了一个 BYTE 数组。问题是在 PLC 中,我在 BYTE 数组中收到的数据是“66 121 255 255”,这是十六进制的十进制值,但我的目标是将该值转换为 REAL,当我这样做时,我不是得到我期望的价值。
我创建了一个 DWORD( 4bytesData
),我将所有 BYTES 插入其中。所以在我将 4 个字节插入4bytesData
字节之前是:in1 = 68
, in2 = 121
, in3 = 255
&in4 = 255
其中 in1、in2、in3 和 in4 是字节 0-3。
我得到的价值是;4bytesData
= 1148846079 & realValue
= 1.148846e+009
我期望从中获得的价值realValue
是= 9.9999993896484375E2
如果我使用这个网站( IEEE754 Analyzer/Converter)并转换十六进制值(4479FFFF),我得到我想要的值,如果我插入十进制值(1148846079),我得到的值与我在可编程逻辑控制器。
我希望你能理解我的问题,非常感谢提前。
javascript - 我有十进制数,需要转换为二进制数并有一个复选框链接到该二进制数的每一位
这很难解释,但我会尽力而为。
我正在使用带有网络服务器的 PLC 和一些我编写的 JavaScript 代码,用于将 PLC 寄存器中的值写入您的网页。
PLC 具有的功能之一是时间表(例如,您可以选择灯必须亮起的日期和时间)。为了设置时间表,我为时间创建了一些输入框,并为一周中的每一天创建了 7 个复选框。您必须将十进制值发送给控制器,这对于小时和分钟来说没有问题。
但是,工作日用二进制数表示,但我需要将其以十进制写入控制器。
所以我有 7 个复选框,每个复选框代表一个二进制数字(所以星期一是 1,星期二是 2,星期三是 4,星期四是 8,依此类推)所以当我想从中创建一个十进制数时,这很容易,只需总结检查了哪些复选框,完成了。
但是现在我需要它,这次我从控制器得到一个十进制数(表示设置了哪些天),我需要在复选框上表示它,所以可能将十进制转换为二进制但是我如何链接复选框到单个数字?
希望有人能理解这一点并帮助我。
这些是我的复选框,这是我的一些 javascript:
我该如何反其道而行之?我得到一个十进制数,需要转换为二进制,然后使用 javascript 根据设置的位检查正确的复选框。
有什么建议么?
c++ - std::map 是否锁定其节点以防止其他进程删除它们?
我在这里遇到了一个严重的问题。我有两个不同的任务(如一个进程)在我的 PLC X20 表单 B&R 上运行,访问一个单例对象“VarList”。其目的是允许通过指针进行进程间通信。
任务 A 正在使用静态 getInstance() 方法创建包含 std::map 的对象。如果将该对象分配给全局 PLC 变量以允许从每个任务访问该特定对象,则该指针会出现。该任务还检查每个任务周期是否将变量插入到该映射中。在这种情况下,它会尝试再次删除该插入的节点,仅出于测试目的。
任务 B 通过 getInstance 方法获取对象的指针,并将 bool* 插入到映射中。
之后任务 A 尝试再次删除它,但它因访问冲突而崩溃。我可以访问节点及其值。我可以改变那个值。但是擦除在不同任务中创建的节点会导致崩溃,我想知道为什么!
PLC 是单线程的,因此不应有对内存的并发访问。
这是锁定问题吗?或者这是一个逻辑问题?STL 问题?空指针问题?或者可能又是plc供应商的std库的具体实现问题?任何与访问冲突相关的帮助表示赞赏!
以下是提到的对象的代码片段,我删除了与问题无关的所有内容,只是为了获得提示。抱歉,它很可能无法编译:
编译器:gcc 4.1.2
任务一:
任务 B:
变量列表.hpp
变量列表.cpp
谢谢!
vba - VBA 子程序不退出循环
我是编程新手,所以我希望你能帮助我。不知道如何制定正确的问题,所以我没有找到任何 StackOverflow 答案。
当我逐步执行此代码并来到 OpcServObj.Connect OpcServerStrg 时,它没有连接。我没有收到任何错误,似乎没有任何事情发生。光标跳到左边距,什么也不做。只有当我继续单步执行例程时,它才会重新启动该功能。它应该继续并退出我计划再次测试连接状态的 for 循环。
参考库:OPC DA Automation Wrapper 2.02
谢谢
c# - OPC Da 在字中写入位
我正在使用 OPC DA 自动化包装器连接到 AllenBradley PLC。
我现在需要在一个单词中设置一个位,独立于任何其他位。
有什么方法可以严格实现这个功能吗?
我尝试过的两个选项是:
在 OPC 服务器 (Kepware) 中将单词设置为单独的位。所以换句话说,我有 16 个标签,每个标签都有一点,标签名称看起来像:
但是,这意味着我需要保留许多单独的 OPCItem 对象
另一种方法是读取整个字,使用 将其转换为位BitConverter
,更改我需要更改的位,然后将保留字写回 PLC。
然而,在测试过程中,我发现线程 1 可以读取这个词。然后线程 2 将写入字,更改位 2。然后线程 1 将更改位 4 并将整个字写回,而对位 2 的更改将被覆盖。
有谁知道我可以拥有一个 OPCItem 并写入特定位的方法?还是我坚持有很多与某个位相关的 OPCItems?
谢谢
vpn - 与树莓派和 hamachi 的 PLC 通信
我试图建立的系统由几个通过以太网连接到 Raspberry Pi 的 PLC 组成。然后将 Pi 连接到 Hamachi VPN(我使用 hamachi,因为我们没有用于其他 VPN 解决方案的外部 IP。如果有另一种选择,我愿意尝试)。在另一端,有一台 PC 连接到 Hamachi 网络。我需要能够与连接到 Pi 的 PLC 交谈(ping 和连接)。我已经能够使用 iptables 让 PC 与一个 PLC 对话,但不是通过它自己的 ip,而是购买指向 hamachi ip 的软件。我可以使用 iptables 从 PLC ping PC,但反之则不行。我的最终目标是能够通过 hamachi vpn 使用 PLC 的 ip 从 PC 访问 PLC。有什么想法或方向吗?
excel - 如何将多个 Siemens PLC 的数据导入 Excel?
我使用 Siemens WinCC SCADA 系统,我需要将数据从 Siemens PLC 中的特定地址传输到 Excel 以进行报告。
是否值得尝试通过在 WinCC scada 中编程或是否有任何其他报告工具?我的主要要求是:
- 轻松定义要读取的 PLC 和数据地址
- 在 Excel 中自定义报告视图(添加徽标、调整格式等)
- 以表格形式和 Excel 图表形式提供数据
- 价格应该不会很高
顺便说一句,我在现场有一台小型平板电脑。这台电脑有 1 GB RAM 和 Intel Celeron CPU。报告应用程序必须在如此小的 PC 中运行。