【问题标题】:MODBUS TCP between PLC and ArduinoPLC和Arduino之间的MODBUS TCP
【发布时间】:2018-08-22 23:51:57
【问题描述】:

我正在尝试在 PLC(WAGO 750-8101) 和 Arduino(UNO) 之间交换数据,PLC 作为主机,Arduino 作为从机,但似乎无法建立连接。

对于 Arduino,我有一个 MINI ENC28J60 作为网络模块,并像这样连接到 arduino:

SCK - 引脚 13,SO - 引脚 12,SI - 引脚 11,CS - 引脚 10

VCC:3.3V

对于 arduino,我正在使用这些库:

EtherCard

Modbus-Arduino

主设置

    SendRequest : WagoAppPlcModbus.FbMbMasterTcp := (   xConnect := TRUE,
                                                    sHost:= '192.168.1.88',
                                                    wPort:=502,
                                                    utKeepAlive:= ( xEnable :=TRUE,
                                                                    tMaxIdleTime := T#5S,
                                                                    tInterval:= T#2S,
                                                                    udiProbes:=5),
                                                    eFrameType := eMbFrameType.ETHERNET,
                                                    tTimeOut:= T#30S);


utQuery: typMbQuery := (    bUnitId := 88,      // slave ID, 
                            bFunctionCode:=16#4, // analog input registers
                            uiReadAddress:= 0, 
                            uiReadQuantity:=2,
                            uiWriteAddress:=0,
                            uiWriteQuantity:=0,
                            awWriteData:= [124(0)]);

xTxTrigger : BOOL;

utResponse : typMbResponse;
TimerForRequest : TON := (PT := T#5S);
HeartRate: WORD;
AirQuality : WORD;

HentSensorData : BOOL;

和 main 中的代码:

//TimerForRequest(IN:=HentSensorData);

//xTxTrigger S= TimerForRequest.Q;


SendRequest(    utQuery := utQuery,
            xTrigger := HentSensorData,   //a toggle switch on HMI
            utResponse := utResponse);

HeartRate := utResponse.awData[0];

AirQuality := utResponse.awData[1];

从站设置(arduino):

#include <EtherCard.h>
#include <ModbusIP_ENC28J60.h>
#include <Modbus.h>

const int HeartBeat = 0;
const int Oxygen = 1;

ModbusIP mb;


void setup() {

      // The media access control (ethernet hardware) address for the shield
      byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
      // The IP address for the shield
      byte ip[] = { 192, 168, 1, 88 };
      byte dns[] = { 192, 168, 1, 1 };
      byte gw[] = { 192, 168, 1, 1 };
      byte subnet[] = { 255, 255, 255, 0 };

      Serial.begin(9600);
      Serial.println("DEBUG");
      Serial.println();
      //Config Modbus IP
      mb.config(mac, ip, dns, gw, subnet);
      Serial.println("Modbus com. setup done");
      Serial.println();
      Serial.println("SLAVE SETTINGS");
      ether.printIp("IP: ",ether.myip);
      ether.printIp("DNS: ", ether.dnsip);
      //ether.printIp("GW: ",ether.gwip);    ether.printIp("Mask: ", 
                                                          ether.mymask);
      Serial.println();

      // Add SENSOR_IREG register - Use addIreg() for analog Inputs
      mb.addIreg(HeartBeat);
      Serial.print("HeartBeatSensor added at address: "); 
      Serial.println(HeartBeat);
      mb.addIreg(Oxygen);
      Serial.print("OxygenSensor added at address: "); 
      Serial.println(Oxygen);
}


void loop() {

   //Call once inside loop() - all magic here
   mb.task();
   //Testcode
   for(int i=0;i<400; i++)
   {
       mb.Ireg(HeartBeat, i);
       mb.Ireg(Oxygen,i+2000);
       Serial.println(i);
       delay(2000);
   }
}

输出(调试)从机:

Arduino debug

我能够在 PLC 和 Modbus Slave 模拟器之间建立连接(并交换数据),但是当我尝试连接 arduino 时,我似乎无法建立连接。

这是我在 PLC 中遇到的错误:

Error in the functionblock (master)

有什么建议吗?问题是否可能是我使用的是交叉电缆(即使 WAGO 在以太网设置中设置为切换模式?)

【问题讨论】:

  • 对不起。我已经编辑了帖子。
  • 你能配置 PLC 来读取寄存器而不是编码吗?

标签: arduino plc modbus-tcp codesys st


【解决方案1】:

以太网 TCP/IP 交换机和 Modbus/TCP 交换机可以在同一网络上共存。 但是如果你想在以太网 TCP/IP 协议和 Modbus TCP 协议之间进行通信,你需要一个转换器。

所以我相信您的 PLC 和 Arduino 已经在 Modbus TCP 中进行通信。

如果交换机是 Modbus TCP 交换机或普通以太网交换机,将非常精确。

我认为这是一个普通的交换机,因为这些协议可以在同一个网络上共存。

【讨论】:

    【解决方案2】:

    已解决

    问题在于 Arduino 端的发送和接收。我将 Arduino 和 PLC 连接到一个开关。然后我就可以交换数据了。

    我的设置不起作用:

    阿杜尼奥 PLC (WAGO)

    我的设置确实有效:

    Arduino 开关 PLC。

    【讨论】:

      猜你喜欢
      • 2016-09-06
      • 2022-07-05
      • 2020-05-16
      • 2021-12-05
      • 2015-12-02
      • 1970-01-01
      • 2020-12-01
      • 2016-02-03
      • 1970-01-01
      相关资源
      最近更新 更多