标签: plc

良好的开源OPC软件

我们目前正在使用KEP Server的免费跟踪版本,以便我们的OPC与我们的PLC进行通信.我们想知道是否有人知道任何好的开源OPC软件.

open-source plc opc

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

一个聪明的自制模数实现

我正在使用一些传统软件编程PLC(RSLogix 500,请不要问),它本身不支持模数运算,但我需要一个.我没有访问:模数,整数除法,局部变量,截断操作(虽然我可以通过舍入来破解它).此外,我可用的所有变量都在按数据类型排序的表中列出.最后,它应该适用于浮点小数12345.678 MOD 10000 = 2345.678.

如果我们做出等式:

dividend / divisor = integer quotient, remainder
Run Code Online (Sandbox Code Playgroud)

有两个明显的实现.

实现1:执行浮点除法:dividend / divisor = decimal quotient.然后破解一起截断操作,你找到了integer quotient.将它乘以divisor并找出它与之间的差异dividend,从而产生remainder.

我不喜欢这个,因为它涉及一堆不同类型的变量.我无法将变量"传递"到子程序,因此我只需要分配位于多个不同变量表中的一些全局变量,并且很难遵循.不幸的是,"难以遵循"非常重要,因为它需要足够简单,以便维护人员能够搞砸.

实现2:创建一个循环,同时dividend > divisor divisor = dividend - divisor.这是非常干净的,但它违反了PLC编程的一个重要规则,即永远不会使用循环,因为如果有人无意中修改了索引计数器,你可能会陷入无限循环,机器会变得疯狂或无法恢复故障.Plus循环很难进行维护以进行故障排除.另外,我甚至没有循环指令,我必须使用标签和跳转.好恶.

所以我想知道是否有人有任何聪明的数学黑客或更聪明的模数实现.我可以访问+ - */,exponents,sqrt,trig函数,log,abs值和AND/OR/NOT/XOR.

algorithm math plc modulus

9
推荐指数
2
解决办法
2783
查看次数

如何在Siemens S7-1200和python之间进行通信?

我正在S7-1200 plc上运行一个进程,我需要它向我的python脚本发送一个启动信号,在脚本运行完毕后需要将一些东西发送回plc以启动下一阶段.哦,它必须在梯子上完成.

是否有一种快速而肮脏的方式将内容发送到profibus或者我最好只使用RS232的东西?

python plc s7-1200 siemens

8
推荐指数
2
解决办法
3万
查看次数

通过C#应用程序访问Siemens S7-1200

我正在尝试访问西门子S7-1200数据库,通过我将在Windows上运行的C#可执行文件设置和读取标签.目的是建立一个可以通过Wi-Fi /以太网与PLC建立连接的桌面应用程序.然后,应用程序将允许用户读出装置的数据(并保存在SQL数据库或.csv等),并且将命令发送到所述设备(经由设置某些标签,然后将PLC执行指令).

西门子S7-1200和S7-1500设备托管一个Web服务器,允许用户通过它创建网站和设置/读取数据.我已经成功地工作了.我打算绕过网站并直接从设备中提取数据.而不是不断从网站上提取数据.

我已经看过以下内容了:

以及很多西门子的教程和手册.

有关如何在C#中建立此连接的任何想法将不胜感激.

c# web-services plc s7-1200 siemens

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

为什么Elsif不是如果在PLC编程中

我是PLC程序员,我想知道为什么使用保留字elsif(即没有E).我知道elseif或任何其他组合不用作保留字.是否有历史记录可以在其他语言中使用它.如果是这样的话?为了节省打字原因,我似乎犯了错误,每天输入e次数为5次.

programming-languages plc

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

C设置一点(位操作)

我正在编程工业plc,我必须操纵位以进行与VFD的profi-bus通信.我得到2byte状态,必须发送2byte命令.对于此操作,我必须设置位以使VFD运行.例如:

                   Byte n+1           Byte n
PLC    -->  --------------------- ---------------   --> VFD
            15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
            ---------+--------- | | | | -+- | | +- 0: Reglersperre / Freigabe
                     |          | | | |  |  | +--- 1: Freigabe / Schnellstopp
                     |          | | | |  |  +----- 2: Freigabe / Halt
                     |          | | | |  +-------- 3..4: reserviert = 0
                     |          | | | +------------5: Parametersatz-Umschaltung
                     | …
Run Code Online (Sandbox Code Playgroud)

c bit-manipulation plc

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

来自.NET的任何成功的profibus通信?

有没有人成功地从.NET应用程序中了解profibus

如果您这样做了,您使用了什么设备/卡来完成此任务,应用程序是什么,您是否使用了任何类型的预先存在或可用的代码?

communication plc industrial

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

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

从Android向PLC发送布尔值

我能够与PLC建立连接以从中读取数据.现在有一个问题,那就是我必须编写一个方法来修改PLC中的数据.为此,我必须向PLC发送两个值:int值和布尔值.我通过net.wimpi.modbus包中的类解决了int值.但是当谈到布尔值时,我不知道该怎么做.

如果有人遇到和我现在一样的问题,你能不能给我一个参考资料,在那里我可以找到一个解决方案或一个非常好的教程链接来解决我的问题?有人在这个问题上贴了几个链接,但是它发给我的教程与PLC的通信以及如何处理PLC的数据没什么关系.

编辑

我与Modicon M340 PLC建立了连接,对于连接,我使用了net.wimpi.modbus包的类.我发过班,我的代码的连接ModbusTCPTransactionTCPMasterConnection,和我通过阅读类的价值观ReadMultipleRegistersRequestReadMultipleRegistersResponse.

我为连接编写的代码:

    private InetAddress m_Address;
private ModbusTCPTransaction m_Transaction = null;
private TCPMasterConnection m_Connection = null;

int port = Modbus.DEFAULT_PORT;
private Activity activity;


public ModbusConnection(Activity activity, String ip)
{
    this.activity = activity;

    try {
        m_Address = InetAddress.getByName(ip); 
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } // the slave'saddress
}

public void getTransaction(InetAddress inet) throws Exception
{
    /*Variables for the reading of the …
Run Code Online (Sandbox Code Playgroud)

java android boolean plc modbus

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

Pymodbus 读/写浮点数(实数)

我的 AB Micro820 PLC 中有 modbus 映射设置。我有一个 40001 的数组用于写入,一个 42001 的数组用于读取。两者都是 200 个元素和 REAL 类型(32 位浮点数)。我目前可以读写,所以我知道代码可以工作,只是不正确。这些值被读/写为非常小的值(即4.58577478E-19)。有人能指出我正确的方向吗?

#!/usr/bin/env python

from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder
from pymodbus.payload import BinaryPayloadBuilder
from pymodbus.client.sync import ModbusTcpClient

import logging
logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.INFO)

ip_address = "192.168.2.101"

client = ModbusTcpClient(ip_address)
if client.connect():    # connection is OK
    # write float
    builder = BinaryPayloadBuilder(endian=Endian.Little)
    builder.add_32bit_float(77.77)
    payload = builder.build()
    result  = client.write_registers(1, payload, skip_encode=True)
    # read floats
    result  = client.read_holding_registers(2001, 4)
    decoder = BinaryPayloadDecoder.fromRegisters(result.registers, endian=Endian.Little)
    print …
Run Code Online (Sandbox Code Playgroud)

python ethernet plc modbus

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