连接指南在这里。我跟踪指南并做了很多事情。PLC和SQL服务器连接正常,我已经成功登录SQL。
我可以insert到表update,并执行store procedures。
但是当我运行select查询时,我不知道如何检索数据和读取值。
我使用 TIA PORTAL v16。
PLC:S7 1200西门子
我有一个简单的表,我想简单地读取一个整数,首先是一行!然后扩展我的工作。
这是我的表结构:
CREATE TABLE MyTable(
[id] [int] IDENTITY(1,1) NOT NULL,
[value] [int] NOT NULL,
)
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
这是我的select查询:
SELECT [value]
FROM [dbo].[MyTable]
WHERE id = 12033
Run Code Online (Sandbox Code Playgroud)
预期结果:
20
Run Code Online (Sandbox Code Playgroud)
我回答了我自己的问题,请注意,西门子最近 (11/20/2020) 发布了直接将 S7-* 系列连接到 Microsoft SQL Server 数据库的文档。所以经过验证的 anwser 是将 PLC 连接到 SQL Server 的经典和正常方式,下一个答案是最新的本机解决方案。玩得开心
我正在S7-1200 plc上运行一个进程,我需要它向我的python脚本发送一个启动信号,在脚本运行完毕后需要将一些东西发送回plc以启动下一阶段.哦,它必须在梯子上完成.
是否有一种快速而肮脏的方式将内容发送到profibus或者我最好只使用RS232的东西?
我正在尝试访问西门子S7-1200数据库,通过我将在Windows上运行的C#可执行文件设置和读取标签.目的是建立一个可以通过Wi-Fi /以太网与PLC建立连接的桌面应用程序.然后,应用程序将允许用户读出装置的数据(并保存在SQL数据库或.csv等),并且将命令发送到所述设备(经由设置某些标签,然后将PLC执行指令).
西门子S7-1200和S7-1500设备托管一个Web服务器,允许用户通过它创建网站和设置/读取数据.我已经成功地工作了.我打算绕过网站并直接从设备中提取数据.而不是不断从网站上提取数据.
我已经看过以下内容了:
以及很多西门子的教程和手册.
有关如何在C#中建立此连接的任何想法将不胜感激.
我一直在使用HTML和javascript创建图形网页来显示来自Siemens S7 1500 PLC的数据.我一直在使用$ .getJSON命令成功读取PLC中的值,当请求信息的网页由PLC Web服务器提供时,并且与具有JSON结构和所有所需文件的文件位于同一目录中值.
我有一台PC通过以太网连接到我的PLC,并希望在PC上本地运行一个网页,并从PLC网络服务器读取页面提供的值.
当要读取的数据位于Web服务器上的同一目录中时,我当前用于读取值的代码如下所示:
<script type="text/javascript">
$(document).ready(function(){
$.ajaxSetup({ cache: false });
setInterval(function() {
$.getJSON("inputs.htm", function(data){
// Variable Declaration
engineSpeed = data.engineSpeed;
engineFuelLevelScaled = data.engineFuelLevelScaled;
powerEndDischargePressurePSI = data.powerEndDischargePressurePSI;
powerEndDischargeFlowRateBBLM = data.powerEndDischargeFlowRateBBLM;
powerEndSuctionPressurePSI = data.powerEndSuctionPressurePSI;
});
},1000);
});
</script>
Run Code Online (Sandbox Code Playgroud)
"inputs.htm"文件很简单:
{
"engineSpeed" : ":="WebData".engineSpeed:",
"engineFuelLevelScaled" : ":="WebData".engineFuelLevelScaled:",
"powerEndDischargePressurePSI" : ":="WebData".powerEndDischargePressurePSI:",
"powerEndDischargeFlowRateBBLM" : ":="WebData".powerEndDischargeFlowRateBBLM:",
"powerEndSuctionPressurePSI" : ":="WebData".powerEndSuctionPressurePSI:"
}
Run Code Online (Sandbox Code Playgroud)
其中"WebData"是使用PLC上的值更新的数据块.
我很高兴这是如何工作的,但当我尝试在本地运行一个页面来查看"inputs.htm"页面时,它没有用.
我的PLC的IP地址为172.17.2.11,我已将$ .getJSON更改为:
$.getJSON("http://172.17.2.11/awp/GeminiOnline/inputs.htm", function(data){
Run Code Online (Sandbox Code Playgroud)
和
$.getJSON("172.17.2.11/awp/GeminiOnline/inputs.htm", function(data){
Run Code Online (Sandbox Code Playgroud)
虽然都没有奏效.我知道这些是正确的网址,因为我可以去其中任何一个并阅读我想要访问的值.
我已经在我的PLC的Web服务器上设置了权限,允许所有用户完全访问,因此不再需要登录.我想知道是否有一个我缺少的步骤或$ .getJSON结构的一些限制阻止我这样读.
任何输入将不胜感激.如果您有任何其他方法可以在PC上本地托管的页面中读取当前的PLC值,这也是有用的.
提前致谢.
我正在尝试在 S7-1200 CPU 中的布尔内存上设置值,我使用了 SNAP7 库,但我无法成功使用它:
Result result = new Result();
byte[] Buffer = new byte[26];
Client.DBRead(1, 0, 2, Buffer);
result.bArret = S7.GetBitAt(Buffer, 0, 1);
result.bMarche = S7.GetBitAt(Buffer, 0, 2);
Client.DBWrite(1, 0, 10, buff);
Run Code Online (Sandbox Code Playgroud)
这是数据块 1 :
我需要在不使用 OPC 或其他第三方软件的情况下完成此任务。
我在使用 S7netplus 读取西门子 PLC S7 1500 的 DB 中的数据时遇到问题。
情况:
但我不知道如何读取字符串数据(见下图)

要读取布尔值等其他数据,我使用以下调用:
plc.Read("DB105.DBX0.0")
Run Code Online (Sandbox Code Playgroud)
我了解到,在数据块 105 (DB105) 中读取数据类型为布尔值 (DBX),偏移量为 0.0 我想对字符串应用相同类型的读取。所以我在我的示例中尝试了“DB105.DBB10.0”。但它返回一个字节类型的值“40”(我应该有别的东西)
我看到还有另一种阅读方法
plc.ReadBytes(DataType DB, int DBNumber, int StartByteArray, int lengthToRead)
Run Code Online (Sandbox Code Playgroud)
但我很难了解如何将其应用到我的示例中(我知道之后必须将其转换为字符串)。
继续: - 有没有一种简单的方法可以使用“DB105.DBX0.0”这样的字符串来读取西门子PLC中的字符串数据?- 如果不是,如何在我的示例中使用 ReadBytes 函数?
感谢您的帮助
我有一个西门子 TP1200 Comfort 面板,我已将其配置为 OPC AU 服务器。该面板有一些标签(节点),我想从中获取 C# 应用程序的值。
我已阅读 OPC UA github 项目的示例: https: //github.com/OPCFoundation/UA-.NETStandard。
我能够连接到面板并获取根,但是如果我调试并检查根的结构,我看不到该值的任何属性,也没有看到子节点的集合,所以我不知道如何通过名称查找节点。
有没有类似 GetNodeVale(NodeName); 的方法
我没有显示任何代码,因为我真的迷失了 OPC,这是我第一次尝试实现一个简单的客户端,我想在其中读取节点(标签)的代码,但我无法做到这一点。
谢谢。
在检查s7nodave对S7-1200的EPICS设备支持时,我遇到了一个引用libnodave的问题.当我尝试读取PLC中的任何内存地址时,IOC控制台报告错误:
epics> 2014/05/19 14:20:41.964 Siemens-PLC error while reading 1 bytes from PLC address FB35. Status = context not supported. Step7 says:Function not implemented or error in telgram.
Run Code Online (Sandbox Code Playgroud)
这是libnodave状态代码0x8104.当我试图在网上搜索此错误代码时,所有结果都是参考S7-1500,而不是S7-1200.
我可以通过Siemens SDK访问这些内存块:它们存在并包含有效数据.
为什么S7-1200拒绝发送libnodave数据?有没有选项可以从网络中提供数据块?
我用EPICS版.3.14.12.4,s7nodave 1.03 build with asyn ver.4.11,boost ver.1.55.0.在PC和Virtualbox上尝试了各种版本.
使用西门子 S7-1200 PLC 在 python 的 snap7 客户端脚本下运行显示以下常见的 CLI 拒绝错误。这里的常见问题是什么以及如何解决?
脚本:
import snap7
from snap7.util import *
import struct
import snap7.client
from snap7.snap7types import S7AreaDB
plc=snap7.client.Client()
plc.connect('192.168.0.69',0,1)
area = 0x84
start = 0
length = 1
bit = 0
byte= plc.read_area(area,0,start,length)
Run Code Online (Sandbox Code Playgroud)
追溯错误:
找不到记录器“snap7.common”回溯(最近一次调用最后一次)的处理程序:文件“”,第 1 行,文件“/usr/local/lib/python2.7/dist-packages/snap7/client.py ",第 242 行,在 read_area check_error(result, context="client") 文件“/usr/local/lib/python2.7/dist-packages/snap7/common.py”,第 69 行,在 check_error 中引发 Snap7Exception(错误) snap7.snap7exceptions.Snap7Exception: CLI : 函数被 CPU 拒绝(未知错误)
我想创建一个工业自动化应用程序来执行以下功能:
我是工业自动化行业和物联网的新手,我知道我们有 OPC UA 来救援。
我浏览了许多网站和 YouTube 视频来了解 OPC UA 及其前身(OPC DA、OPC A&E、OPC HDA)。我已经安装了 matrikon OPC 服务器和资源管理器(客户端)来探索更多。
假设我想从SIMATIC S7-1200 PLC读取信号,根据我的理解,OPC UA服务器是随PLC一起提供的,用于将OPC UA信息转换为Profinet信息。
所以,我的问题是:
如果有人分享一些资源,将不胜感激!
siemens ×11
plc ×10
s7-1200 ×6
c# ×5
tia-portal ×3
opc-ua ×2
python ×2
html ×1
javascript ×1
json ×1
libnodave ×1
opc ×1
sql-server ×1
web-services ×1