西门子PLC与Arduino之间的串行通讯

西门子PLC与Arduino之间的串行通讯

问题描述:

我想用西门子S7-1200与CM 1241(RS-232)进行串行通讯并与我的Arduino通讯。 这是通信的设置。我有两个温度传感器和一个连接到我的Arduino的LED,在PLC一侧有西门子和CM-1241的S7-1200。 Arduino和我的PLC只通过Tx和Rx引脚连接,没有握手。西门子PLC与Arduino之间的串行通讯

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

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

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

在此先感谢....

+0

只是为了确认,你问PLC侧的文本处理? –

+0

是的,在PLC一侧 –

它是简单的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),为实数或整数为临时字符串
  • 几个静态变量和文本的>真实转换。

解析类似于以下(因为我没有我的TIA Portal这可能需要修改)代码: 你的字符串“$ 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,则这些块也存在于梯形图中。如果你可以,只有在你收到缓冲区后,才能连接这个功能块。