JavaScript对西门子PLC进行读写通讯控制中的问题和修复

之前在文章《JavaScript如何对欧姆龙、三菱、施耐德等PLC进行读写通讯控制》有介绍,如何通过 LECPServer + Javascript 对欧姆龙,三菱,施耐德等PLC进行通讯控制。

在实际使用中,发现LECPServer与西门子的PLC进行通讯有一定的区别。

首先说明下,LECPServer支持西门子大部分的PLC型号,以下是支持的类型列表:

  • S1200
  • S1500
  • S200
  • S200Smart
  • S400

西门子的PLC均以以太网形式与LECPServer进行链路通讯。

我们按照之前《JavaScript如何对欧姆龙、三菱、施耐德等PLC进行读写通讯控制》文章内提到的,配置PLC_DRIVER类型为西门子系列,IP设置为西门子的PLC设置的IP地址。

当我们设置点位数据类型为浮点型的时候(则PLC设置为Real,LECPServer设置为Float),发现PLC和LECPServer的数值并不一致。

如图,PLC端为3.14,而LECPServer则显示为197391.8 。

后来经过查询西门子PLC的资料,明确这个问题的原因是因为西门子的PLC的位结构为DCBA,而LECPServer 1.0.18之前的版本,默认设置为CDAB,具体的DATAFORMAT含义可以参考JLean的说明文档。

data format 枚举说明  传送门  http://www.jlean.org:3000/#/interface/plc/data-format

当我们选择DATAFORMAT为DCBA后,点击应用,则可以看到正确的浮点数据。

接下来,我们直接用js代码来访问LECPServer对PLC进行读写了。代码如下:

let url = "http://127.0.0.1:8088";
$.ajax({
    url: url,
    // 读取PLC节点数据
    data: JSON.stringify({
        "action":"plc_read_node", 
        "node":"NODES.SIE.M100"
    }),
    contentType: "application/x-www-form-urlencoded",
    type: 'POST',
    timeout: 2000,
    success: function (response) {
        // 解析节点数据
        // 数据长度是1,因此拿v[0]的数据即可
        v = JSON.parse(response);
        console.log(v);
    },
    error: function (x, t, m) {
        console.log(x);
    }
});

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值