3

我想使用带有 CM 1241 (RS-232) 的 Siemens S7-1200 进行串行通信,并与我的 Arduino 进行通信。这是通信的设置。我有 2 个温度传感器和一个连接到我的 Arduino 的 Led,在 PLC 端我有 Siemens 的 S7-1200 和 CM-1241。Arduino 和我的 PLC 仅通过使用 Tx 和 Rx 引脚连接,无需握手。

我正在将两个传感器的温度数据发送到 PLC。在 PLC 方面,我根据不同的温度值决定何时打开连接到我的 arduino 的 LED。在发送数据之前,我已经为两个传感器分配了一个 ID。这就是从 Arduino 传输的数据看起来像 $AOPT_TEMP1_20_TEMP2_21 的样子。

到目前为止它很好,我正在使用 RCV_PTP 在我的 PLC 上接收串行数据(接收到的数据放在缓冲区上)并使用 SEND_PTP 发送数据。我还在 PLC 上实现了一个过滤器,它只接受以“$AOPT_”开头的串行数据。现在,我想从两个温度传感器 TEMP1 和 TEMP2 接收温度值,然后控制 LED。例如,如果 (TEMP1>TEMP2 ) 然后打开 LED,否则关闭。

我能够从 Arduino 接收 PLC 上的数据,但现在我不知道如何继续比较接收到的信息。如何从接收的缓冲区中提取唯一需要的数据?任何建议将不胜感激。

提前致谢....

4

1 回答 1

0

在 SCL 中解析字符串(来自串行缓冲区)很简单:您可以使用命令:**

LEN
CONCAT
LEFT or RIGHT
MID
INSERT
DELETE
REPLACE
FIND
EQ_STRNG and NE_STRNG
GE_STRNG and LE_STRNG
GT_STRNG and LT_STRNG
INT_TO_STRING and
STRING_TO_INT
DINT_TO_STRING and
STRING_TO_DINT
REAL_TO_STRING and
STRING_TO_REAL

** 在此 SCL 备忘单上找到:http: //plc4good.org.ua/files/03_downloads/SCL_table/SCL-cheat-sheet.pdf

我会从..

  • 在 SCL 中创建功能块。
  • 将输入属性添加为字符串
  • 将两个输出属性 (Temp1,Temp2) 添加为 Reals 或 Ints
  • 几个静态变量,用于临时字符串和 text->real 转换。

解析您的代码类似于以下内容(因为我没有我的 TIA 门户,这可能需要修改):对于您的字符串“$AOPT_TEMP1_20_TEMP2_21”,假设开头始终是“$AOPT_TEMP1_”(12 个字符)

temp1_temp:=DELETE(IN1:=inputmsg,IN2:='$AOPT_TEMP1_',L:=12,P:=0);

//result should be "20_TEMP2_21"
//if you have a result above or below a 2 digit number we can't just get 
//the next two chars in the string.  so we use the FIND.

temp1_endpos:=FIND(IN1:=temp1_temp,IN2:='_');
temp1_str:=LEFT(IN1:temp1_temp,L:=temp1_endpos);
Temp1:=string_to_real(temp1_str); 

//work off of the position of the temp1_endpos and the string stored in
//temp1_temp

temp2_str:=RIGHT(IN1:=temp1_temp,LEN(temp1_temp)-temp1_endpos-6);

//working from the right side of the string 
// 20_TEMP2_21
//   ^-------pos 2   temp2_ is another 6 so we subract another 6
//         ^---pos 6
// len was (in this case) 11, we work from the right because we don't 
    // know how many digits each temp may be.

Temp2:=string_to_real(temp2_str);  

请记住,这完全不在我的脑海中,并使用手册进行快速参考: https://cache.industry.siemens.com/dl/files/465/36932465/att_106119/v1/s71200_system_manual_en-US_en-US。 pdf

有些事情可能需要调整。如果您不/不能使用 SCL,这些块也存在于梯形图中。如果可以的话,您可以仅在收到缓冲区后才执行此功能块

于 2015-09-15T09:49:40.240 回答