问题标签 [snap7]

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.

0 投票
1 回答
1051 浏览

python - Snap7-Python 数据读取/写入 PLC 期间的作业挂起异常

在使用 Python-Snap7 向 Siemens s7 1200 PLC 读取和写入数据期间,我收到如下异常:

我在单通道 db_read/db_write 期间没有遇到此问题,但在其他读取或写入通道处于活动状态时会发生此问题。

我尝试了 area_read & area_write 和 db_read 和 db_write 选项,但收到了类似的错误。

主要代码:

PLC数据-读写代码

提前致谢。

0 投票
3 回答
3139 浏览

python - 如何使用 Python-snap7 与西门子 PLC 进行 Python 通信?

我正在尝试将 Python 与 CPU1212C PLC(使用 PLCSIM)进行通信,但总是出现错误。

代码:

这是Windows10的问题吗?

我正在使用 Windows10 64 位、Python 2.7.17、Snap7 1.1.0、Python-Snap7 0.10。

我将 snap7.dll 和 snap7.lib 文件复制并粘贴到 System32、Python27、Python27/site-packages/snap7 文件夹中。我为每个文件夹在环境变量中创建了一个路径以尝试工作。

我遵循了本教程:https ://www.youtube.com/watch?v=BKnK4AT_WKs

0 投票
1 回答
136 浏览

python - 通过 python 与 Fluke 耐久高温计 (profinet/RS485) 通信

我有一个 Fluke Endurance 高温计(和一个非常脆弱的用户指南),它通过以太网电缆输出,然后我通过 USB3.0 到千兆以太网适配器连接到我的计算机(Windows 控制面板告诉我它正在工作)。根据指南,应该可以通过 RS485 和 profinet 进行通信。但我不清楚两者是否可以通过同一根电缆实现。

我最初的计划是尝试使用 snap7 来尝试 profinet 通信,但是当我尝试时:

我明白了

我可以在该 IP 地址 ping 设备。

所以我的问题是:

  1. 任何想法为什么我可以 ping,但 snap7 似乎有连接问题?

  2. 如果我无法使 profinet 通信正常工作,我是否有可能通过以太网电缆以某种方式进行 RS485 通信?我查找的所有内容都在谈论拥有进行转换的硬件,所以我假设它不仅仅是在正确的电线上寻找正确的信号格式。我在手册中找不到任何可以打开/关闭一种通信形式的东西,如果可能的话,从菜单上看它们都处于活动状态。

更好的是,如果有人在 python 中与此设备进行过通信,任何建议将不胜感激!

谢谢,

马修

更新:

如果其他人有类似的问题,我通过使用这样的套接字和 ASCII 命令解决了这个问题:

0 投票
2 回答
1065 浏览

plc - 如何使用 Python 在 plc 中将数据写入 int 值

我的代码:

输出:

Bağlantı Drumu: True
Data AA: HELLO WORD //string
Data BB: 55 //int
Data CC:True //bool
过程结束,退出代码 0 ...

////////////////////////////////////

如何在这里更改整数值?
plc.db_write(?????????)

0 投票
1 回答
389 浏览

c# - 从 DB 读取的变量名称而不是地址(偏移量)

有没有办法仅在 C# 中从其变量(名称)中读取数据库数据?考虑 SIMATIC S7 PLC 1200 例如,我想从不知道地址(偏移)的 DB 中读取数据,我只知道 DB 编号、符号名称和数据类型。参考请看下图。

在此处输入图像描述

我已经通过 Sharp7(非优化 DB 方法)建立了工作连接,但我总是需要一个地址。我还寻找了其他一些解决方案,例如,

  1. Rothenbacher GmbH 的“S7 连接器”
  2. s7.Net | S7netplus

但这似乎对我不起作用。我也不知道这是否可能,因为我在某处听说 PLC 只取地址而不取变量名。

所有的评论都得到了高度评​​价。

0 投票
0 回答
83 浏览

c++ - ROS CPP Snap7 Linux - CMake 未链接到 lib

我想使用 Snap7 (多平台以太网 S7 PLC 通信套件)在 ROS 和 Siemens S7 1500 之间建立通信。

我遇到了链接器问题 - 虽然我可以使用自定义 FindLibSnap7.cmake 找到包含和库 .so 文件本身,但target_link_libraries没有链接到 snap7 库。这是我的方法和有助于调试的输出:

(注意:目前我们被迫使用 ROS Kinetic,因此使用 Snap7 Python 包装器似乎不是一个选项,因为它是用 python3 编写的。)

我安装了库:

  • sudo add-apt-repository ppa:gijzelaar/snap7
  • sudo apt-get update
  • sudo apt-get install libsnap71 libsnap7-dev

结果:

FindLibSnap7.cmake:

CMakeLists.txt:

catkin_make 输出:

lld 输出

如您所见,找到了包含以及库。提供${LibSnap7_LIBRARIES}target_link_libraries不是链接到 libsnap7.so

从源代码安装 snap7 后,我发现示例 cpp 的链接正确。

如果有人知道为什么会发生此错误链接,我将很乐意提供任何帮助。

先感谢您!

0 投票
1 回答
210 浏览

python - 适用于 Windows 10 的 Anaconda 上的 python snap7 - 找不到 snap7 库

我尝试在适用于 Windows 10 的 Anaconda 上使用 snap7(从 S7-1200 读取)python 3.8。我在这个问题上遵循了许多建议。但是,我无法解决这个问题。

Snap7Exception:找不到 snap7 库。如果已安装,请尝试运行 ldconfig

如果您对此问题有任何建议,我会感谢所有帮助。

0 投票
1 回答
288 浏览

arrays - 从位列表转换为字节数组

作为一个新的编程,我在这里真的很挣扎,它使用 snap7 库连接到 siemens PLC,在树莓派上使用 Python3。基本上,我将数据作为字节数组读取,然后对其进行修改并将其发送回 PLC。我能够读入它并将其转换为列表并修改数据。

所以我的数据是一个看起来像 [0,0,0,0,0,0,1,0] 的列表。它总是正好是 1 个字节(8 位)。所以我可以修改这些位。但是,我正在努力将它们重新放入字节数组中。我需要从那个列表转换成一个字节数组响应,看起来应该像 bytearray(b'\x02')

我所期待的几个例子

它是一个只有 1 个字节的字节数组,这有点奇怪,但这就是库如何工作以写入 PLC 中的数据块。

如果有任何其他数据可以分享,请告诉我凯文

0 投票
1 回答
122 浏览

python - 西门子 LOGO! PLC 数据顺序错误

所以我正在访问一个 Siemens LOGO!PLC从中提取一些数据。我设法和我的工作伙伴一起做到了这一点,但我们对如何保存数据感到困惑。数据在字典中加上来自 PLC 的输出和输入字节的时间戳。但是数据以特定顺序出现,并在提取数据的那一刻加上时间戳。

现在的问题是时间戳和数据的保存顺序与数据进入的顺序不同。在这个过程中的某个地方它犯了一个错误(我认为),但我们似乎找不到它。

这是我们使用的 Python 代码:

而我们得到的数据:

这是脚本的一次连续执行。正如您所看到的,时间戳并不是真正按顺序排列的。谁能帮我们解决这个问题。也许你们能看到我看不到的东西。

非常感谢!

0 投票
0 回答
182 浏览

python - 通过 siemens s7-1200 plc 中的 python snap7 库读取定时器、计数器和数据寄存器的问题

我正在使用 python 和 snap7 库来读取我电脑中的 plc (siemens-s71200) 数据,我已经成功读取了输入、输出和内存位,但我无法读取计时器、计数器和数据寄存器。我曾尝试使用库的“read_area”、“tm_read”和“ct_read”函数,但无法获得结果。我在我的 plc 程序(TIA 门户 v15.1)中使用了四个计时器(db1、db2、db3、db4)和三个计数器(db5、db6、db7)和一些数据寄存器(mw0、mw5 等)。我的编码如下:对于计时器,我同时使用了“read_area”和“tm_read”函数

它抛出索引超出范围错误(我尝试使用不同的数字作为参数,有时它会抛出无效参数错误)。

我也试过这也显示与上面相同的错误。