Протокол MITSUBISHI MELSEC(MC): учебное пособие
Советы:
Серии ПЛК
Серия | Тип кадра | Подключение | Модель |
---|---|---|---|
A | 1E | Ethernet | FX3U |
QnA | 3E | Ethernet | FX5U |
Q/L | 3E | Ethernet | Q/L |
IQ-R | - | Ethernet | - |
IQ-L | - | Ethernet | - |
Формат адреса, совместим со случаем.
Аббр | Имя устройства | Символ | Адрес | Тип | Обозначение |
---|---|---|---|---|---|
SM10 | Специальное реле | SM | 10 | BIT | 10 |
SD12 | Специальный регистр | SD | 12 | WORD | 10 |
X2F | Вход | X | 0x2F | BIT | 16 |
Y12F | Выход | Y | 0x12F | BIT | 16 |
M100 | Внутреннее реле | M | 100 | BIT | 10 |
L10 | Реле фиксации | L | 10 | BIT | 10 |
F10 | Аннунатор | F | 10 | BIT | 10 |
V9 | Реле края | V | 9 | BIT | 10 |
B2F | Реле связи | B | 0x2F | BIT | 16 |
D100 | Регистр данных | D | 100 | WORD | 10 |
W1F | Регистр связи | W | 0x1F | WORD | 16 |
TN100 | Текущее значение таймера | TN | 100 | WORD | 10 |
CN100 | Текущее значение счётчика | CN | 100 | WORD | 10 |
Интерфейс доступа к ярлыкам
номер | Метод | Количество устройств | Размер в байтах | Размер в битах |
---|---|---|---|---|
1 | readBoolean | 1 | 1/8 | 1 |
2 | readInt16 | 1 | 2 | 16 |
3 | readUInt16 | 1 | 2 | 16 |
4 | readInt32 | 2 | 4 | 32 |
5 | readUInt32 | 2 | 4 | 32 |
6 | readFloat32 | 2 | 4 | 32 |
7 | readFloat64 | 4 | 8 | 64 |
8 | readString | n | 2n | 16n |
9 | readBoolean | 1 | 1/8 | 1 |
10 | writeInt16 | 1 | 2 | 16 |
11 | writeUInt16 | 1 | 2 | 16 |
12 | writeInt32 | 2 | 4 | 32 |
13 | writeUInt32 | 2 | 4 | 32 |
14 | writeFloat32 | 2 | 4 | 32 |
15 | writeFloat64 | 4 | 8 | 64 |
16 | writeString | n | 2n | 16n |
Если вы хотите узнать фактический ввод и вывод пакетов во время общения, вы можете распечатать информацию о пакете самостоятельно.
class Demo {
public static void main(String[] args) {
McPLC mcPLC = new McPLC(EMcSeries.QnA, "127.0.0.1", 6000);
// optional
mcPLC.setComCallback((tag, bytes) -> System.out.printf("%s[%d] %s%n", tag, bytes.length, HexUtil.toHexString(bytes)));
// read boolean
boolean booleanData = mcPLC.readBoolean("M100");
mcPLC.close();
}
}
class Demo {
public static void main(String[] args) {
// long connection mode, persistence = true
McPLC mcPLC = new McPLC(EMcSeries.QnA, "127.0.0.1", 6000);
boolean booleanData = mcPLC.readBoolean("M100");
// close it manually
plc.close();
}
}
Short Connection Mode
class Demo {
public static void main(String[] args) {
// short connection mode
McPLC mcPLC = new McPLC(EMcSeries.QnA, "127.0.0.1", 6000);
// set short connection mode, persistence = false
mcPLC.setPersistence(false);
boolean booleanData = mcPLC.readBoolean("M100");
}
}
class Demo {
public static void main(String[] args) {
McPLC mcPLC = new McPLC(EMcSeries.QnA, "127.0.0.1", 6000);
// опционально
mcPLC.setComCallback((tag, bytes) -> System.out.printf("%s[%d] %s%n", tag, bytes.length, HexUtil.toHexString(bytes)));
// чтение boolean
boolean booleanData = mcPLC.readBoolean("M100");
// чтение списка boolean
List<Boolean> booleanList = mcPLC.readBoolean("M100", 10);
// чтение одного байта
byte byteData = mcPLC.readByte("D100");
// чтение нескольких байт
byte[] bytes = mcPLC.readBytes("D100", 10);
// чтение int16
short int16Data = mcPLC.readInt16("D100");
// чтение списка int16
List<Integer> int16List = mcPLC.readUInt16("D100", "D108", "D130");
// чтение uint16
int uint16Data = mcPLC.readUInt16("D100");
// чтение списка uint16
List<Integer> uint16List = mcPLC.readUInt16("D100", "D108", "D130");
// чтение int32
int int32Data = mcPLC.readInt32("D100");
// чтение списка int32
List<Integer> int32List = mcPLC.readInt32("D100", "D108", "D130");
// чтение uint32
long uint32Data = mcPLC.readUInt32("D100");
// чтение списка uint32
List<Long> uint32List = mcPLC.readUInt32("D100", "D108", "D130");
// чтение float32
float float32Data = mcPLC.readFloat32("D100");
// чтение списка float32
List<Float> float32List = mcPLC.readFloat32("D100", "D108", "D130");
// чтение float64
double float64Data = mcPLC.readFloat64("D100");
// чтение строки
String stringData = mcPLC.readString("D100", 6);
// чтение мультиадреса, только поддержка word и dword
McMultiAddressRead addressRead = new McMultiAddressRead();
addressRead.addWordData("D100");
addressRead.addWordData("D150");
addressRead.addWordData("D130");
addressRead.addWordData("D110");
addressRead.addDWordData("D112");
addressRead.addDWordData("D116");
addressRead.addDWordData("D126");
List<McDeviceContent> contentList = mcPLC.readMultiAddress(addressRead);
mcPLC.close();
}
}
class Demo {
public static void main(String[] args) {
McPLC mcPLC = new McPLC(EMcSeries.QnA, "127.0.0.1", 6000);
// опционально
mcPLC.setComCallback((tag, bytes) -> System.out.printf("%s[%d] %s%n", tag, bytes.length, HexUtil.toHexString(bytes)));
// запись одного boolean
mcPLC.writeBoolean("M100", true);
// запись нескольких boolean
mcPLC.writeBoolean("M100", true, false, true);
// запись одного байта
mcPLC.writeByte("D100", (byte) 0x01);
// запись нескольких байт
mcPLC.writeBytes("D100", new byte[]{0x01, 0x02, 0x03});
// запись одного int16
mcPLC.writeInt16("D100", (short) 16);
// запись нескольких int16
mcPLC.writeInt16("D100", (short) 16, (short) 17, (short) 118);
// запись одного uint16
mcPLC.writeUInt16("D100", 16);
// запись нескольких uint16
mcPLC.writeUInt16("D100", 16, 17, 18);
// запись одного int32
mcPLC.writeInt32("D100", 55);
// запись нескольких int32
mcPLC.writeInt32("D100", 55, 66, 77);
// запись одного uint32
*Здесь текст обрывается.* ```
mcPLC.writeUInt32("D100", 55);
// write multi uint32
mcPLC.writeUInt32("D100", 55L, 66L, 77L);
// write one float32
mcPLC.writeFloat32("D100", 0.123f);
// write multi float32
mcPLC.writeFloat32("D100", 0.123f, 145.56f, 88.12f);
// write one float64
mcPLC.writeFloat64("D100", 0.123);
// write multi float64
mcPLC.writeFloat64("D100", 0.123, 145.56, 88.12);
// write string
mcPLC.writeString("D100", "1234567890");
// multi write, only support int16 uint16 int32 uint32 float32
McMultiAddressWrite addressWrite = new McMultiAddressWrite();
addressWrite.addInt16("D100", 110);
addressWrite.addUInt16("D101", 110);
addressWrite.addInt32("D102", 110);
addressWrite.addUInt32("D104", 110);
addressWrite.addFloat32("D106", 110);
mcPLC.writeMultiAddress(addressWrite);
mcPLC.close();
}
class Demo {
public static void main(String[] args) {
McPLC mcPLC = new McPLC(EMcSeries.QnA, "127.0.0.1", 6000);
// optional
mcPLC.setComCallback((tag, bytes) -> System.out.printf("%s[%d] %s%n", tag, bytes.length, HexUtil.toHexString(bytes)));
// ------------------ read and write device batch in word ------------------------
byte[] expect = new byte[]{0x34, 0x12, 0x02, 0x00};
McDeviceContent reqContent = McDeviceContent.createBy("D110", 2, expect);
mcPLC.writeDeviceBatchInWord(reqContent);
McDeviceAddress address = McDeviceAddress.createBy("D110", 2);
McDeviceContent ackContent = mcPLC.readDeviceBatchInWord(address);
// ------------------ read and write device batch in bit --------------------------
expect = new byte[]{0x11, 0x00, 0x01, 0x10};
reqContent = McDeviceContent.createBy("M110", 8, expect);
mcPLC.writeDeviceBatchInBit(reqContent);
address = McDeviceAddress.createBy("M110", 8);
ackContent = mcPLC.readDeviceBatchInBit(address);
// ------------------ read and write device random in word ------------------------
List<McDeviceContent> writeWord = new ArrayList<>();
writeWord.add(McDeviceContent.createBy("D110", new byte[]{0x50, 0x05}));
writeWord.add(McDeviceContent.createBy("D111", new byte[]{0x75, 0x05}));
writeWord.add(McDeviceContent.createBy("M110", new byte[]{0x40, 0x05}));
List<McDeviceContent> writeDWord = new ArrayList<>();
writeDWord.add(McDeviceContent.createBy("D120", new byte[]{0x02, 0x12, 0x39, 0x04}));
writeDWord.add(McDeviceContent.createBy("M130", new byte[]{0x75, 0x04, 0x25, 0x04}));
mcPLC.writeDeviceRandomInWord(writeWord, writeDWord);
List<McDeviceAddress> readWord = new ArrayList<>();
readWord.add(McDeviceAddress.createBy("D110"));
readWord.add(McDeviceAddress.createBy("D111"));
readWord.add(McDeviceAddress.createBy("M110"));
List<McDeviceAddress> readDWord = new ArrayList<>();
readDWord.add(McDeviceAddress.createBy("D120"));
readDWord.add(McDeviceAddress.createBy("M130"));
List<McDeviceContent> mcDeviceContents = mcPLC.readDeviceRandomInWord(readWord, readDWord);
// ------------------------ write device random in bit ---------------------------
List<McDeviceContent> contents = new ArrayList<>();
contents.add(McDeviceContent.createBy("M110", new byte[]{0x01}));
contents.add(McDeviceContent.createBy("M112", new byte[]{0x01}));
contents.add(McDeviceContent.createBy("M113", new byte[]{0x01}));
mcPLC.writeDeviceRandomInBit(contents);
// ---------- read and write device multi blocks (test failed, not get reason) ----
List<McDeviceContent> wordContents = new ArrayList<>();
wordContents.add(McDeviceContent.createBy("D110", 2, new byte[]{0x01, 0x02, 0x03, 0x04}));
wordContents.add(McDeviceContent.createBy("D0", 1, new byte[]{0x08, 0x07}));
List<McDeviceContent>
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )