我有一个单一的PLC程序,将在多ABB AC500 PLC上运行。我需要每个PLC有一个非常不同的行为(仅限于为每个PLC选择一个唯一的整数值,以允许每个PLC上的特定事件的时间不同)。
为了允许维护单个相同的程序并将其上传到多个PLC,我考虑的策略是访问一段关于PLC的唯一元数据,以确定特定PLC的正确值。
合理的信息可能包括分配给PLC的IP地址或PLC序列号。
我仔细看过了,但找不到在运行时访问这些信息的方法-我猜模块中有一个简单的函数,它将返回这些信息中的一条或另一条?
或者也许有一种更好的方法来实现这种特定于PLC的行为?
谢谢!
发布于 2020-09-15 18:35:51
看一下自动化构建器的帮助文件( (from here),似乎应该有一个叫做内部系统库 (SysInt_AC500_Vx.lib)的库。
该库包括一个名为SLOT_PROD_ENTRY_READ的函数块,它“从通信模块的闪存中读取一行生产数据”。您可以使用手册中的搜索功能找到它。
可以读取的其中一个值是序列号。可以使用另一种解决方案,例如MAC地址。我没有ABB PLC可以试用,文档中也没有非常清晰的示例。但这应该是可能的。请注意,以下内容未经过测试。
VAR
instance : CPU_PROD_ENTRY_READ; //Might need a library namespace
serial : STRING(80);
END_VAR
instance(
EN := TRUE,
SLOT := 0,
SECTION := 'Common',
KEY_SEARCH := 'SERIAL_NR',
INDEX := 0,
ACT := FLASH_DATA_READ
);
IF instance.DONE THEN
serial := instance.VALUE;
instance(EN := FALSE);
END_IF发布于 2020-11-11 23:26:02
使用以下代码片段作为mac地址。
变量:
diNumber: DINT;
iAdapter: DINT;
stName: STRING(255);
stDescription: STRING(255);
aby_address:ARRAY[1..6]OF BYTE;程序:
getnumberofadapters(ADR(diNumber));
FOR iAdapter := 0 TO diNumber DO
getadapterinfo(
iAdapterNum := iAdapter,
pbName := ADR(stName),
pbDescrition := ADR(stDescription),
iBuffersize := SIZEOF(stName),
iMacLength := 6,
sMacAdress := ADR(aby_address));
END_FORhttps://stackoverflow.com/questions/63873759
复制相似问题