Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 27.10.2017
Сообщений: 17

PLC Omron memory D, исправить программу на языке Python

25.11.2018, 17:47. Показов 1872. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть ПЛК (программируемый логический контроллер) Omron CP1L. К нему надо исправить драйвер, который загружает текст, получаемый с RFID Reader (считывателя RFID меток, это пропуска и т.д), и загружающий его в D память ПЛК. В интернете есть что-то подобное, но там это делается через плату Raspberry PI, а мне это нужно сделать через ноутбук без лишнего гемороя.*
Вот ссылка на тему, где все это написано с Raspberry PI:*Omron PLC USB - Raspberry Pi - RFID USB Reader :(https://program-plc.blogspot.c... b.html?m=1)
Ну и коды, чтобы далеко не ползать:
RASPBERRY PI
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import usb.core
import usb.util
import sys
 
 
def RFID_Number(rfid):
    if rfid==30:return 1
    if rfid==31:return 2
    if rfid==32:return 3
    if rfid==33:return 4
    if rfid==34:return 5
    if rfid==35:return 6
    if rfid==36:return 7
    if rfid==37:return 8
    if rfid==38:return 9
    if rfid==39:return 0
    return rfid
 
 
 
def RFID_ID(rfid):
    rfid_data = []*
    for index in range(10):
       rfid_data.append(RFID_Number(rfid[index]))
 
    rfid_id_tag =[0,0,0]
    rfid_id_tag[2] = (rfid_data[6]*1000) + (rfid_data[7]*100) + (rfid_data[8]*10) + rfid_data[9]
    rfid_id_tag[1] = (rfid_data[2]*1000) + (rfid_data[3]*100) + (rfid_data[4]*10) + rfid_data[5]
    rfid_id_tag[0] = (rfid_data[0]*10) + rfid_data[1]
 
    return str(rfid_id_tag[0])+ " " + str(rfid_id_tag[1]) + " " + str(rfid_id_tag[2])
 
 
 
while True:
    #RFID USB Reader
    dev2 = None
    endpoint = None
    dev2 = usb.core.find(idVendor=0x08ff, idProduct=0x0009)
 
    if dev2 is None:
        raise ValueError('RFID USB Reader Not Found')
    else:
        try:
            dev2.set_configuration()
            print 'RFID USB Reader Ready'
        except usb.core.USBError as e:
            #print "ERROR 1 : ",e.strerror
            if e.strerror.find("Device or resource busy")>=0:
                dev2.detach_kernel_driver(0)
                continue
            else:
                raise ValueError('RFID USB Reader Error 1')
 
 
 
        endpoint = dev2[0][(0,0)][0]
        #print endpoint
        rfid=[]
        while(1):
            data = []
            try:
                data = dev2.read(endpoint.bEndpointAddress, endpoint.wMaxPacketSize,timeout=10)
                if len(data)==8:
                    if (data[2]>=30) and (data[2]<=39):
                        rfid.append(data[2])
                    if data[2]==40:
                        #print rfid
                        if len(rfid)==10:
                            rfid_string = RFID_ID(rfid)
                            with open('RFID.txt','w') as f:
                                f.write("%s" % rfid_string)
                            print rfid_string
                         
                        rfid=[]
                             
            except usb.core.USBError as e:
                #print "ERROR 2 : ",e.strerror
                if e.strerror.find("Connection timed out")>=0:
                    continue
                else:
                    raise ValueError('RFID USB Reader Error 2')
                    #break

Omron PLC-USB-RFID
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
import usb.core
import usb.util
import sys
from random import randint
 
 
#Omron PLC USB
dev1 = usb.core.find(idVendor=0x0590, idProduct=0x005B)
if dev1 is None:
    raise ValueError('PLC Not Detected')
 
 
endpoint_in = dev1[0][(0,0)][0]
endpoint_out = dev1[0][(0,0)][1]
 
 
 
def Omron_PLC_USB_Write(msg,revlen):
    x=0
    cnt1=0
    cnt2=0
    data = []
    while(1):
        try:
            if x==0:
                endpoint_out.write(msg)
                x=1
 
            data += dev1.read(endpoint_in.bEndpointAddress, endpoint_in.wMaxPacketSize, timeout = 20)
            if len(data)==revlen:
                return data
 
        except usb.core.USBError as e:
 
            if e.strerror.find("error sending control message")>=0:
                cnt1+=1
                if cnt1>2:
                    raise ValueError('Over error sending control message')
                x=0
                continue
 
            elif e.strerror.find("Connection timed out")>=0:
                cnt2+=1
                if cnt2>2:
                    raise ValueError('Over Connection timed out')
                continue
 
            else:
                raise ValueError(e.strerror)
 
 
def Omron_PLC_Run_Mode():
    write_array = [0xAB,0x00,0x11,0x80,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00]
    write_array.append(randint(1,0xFF))
    write_array +=[0x04,0x01,0xFF,0xFF,0x04]
    sumcheck = sum(write_array)
    sumHi = ((sumcheck >> 8) & 0xFF)
    sumLo = (sumcheck & 0xFF)
    write_array.append(sumHi)
    write_array.append(sumLo)
    res = Omron_PLC_USB_Write(write_array,19)
    if len(res)==19:
        sum1= res[len(res)-2]<<8 | res[len(res)-1]
        res.pop()
        res.pop()
        sum2 = sum(res)
        if sum1==sum2:
            revc = [171, 0, 16, 192, 0, 2, 0, 0, 251, 0, 0, 0, 4, 1, 0, 0]
            res.pop(12)
            if res==revc:
                print "Omron PLC is Run Mode"
            else:
                print "Omron PLC Run Mode Error"
        else:
            print "Omron PLC Run Mode Error"
    else:
        print "Omron PLC Run Mode Error"
 
 
 
 
 
 
 
def Omron_PLC_D_Write_4W(D_number,D_value):
    Omron_PLC_Write_Array = [0xAB,0x00,0x1C,0x80,0x00,0x2,0x00,0x00,0x00,0x00,0x00,0x00]
    rdm = randint(1,0xFF)
    Omron_PLC_Write_Array.append(rdm)
    Omron_PLC_Write_Array +=[0x01,0x02,0x82]
    Omron_PLC_Write_Array.append(D_number >> 8);
    Omron_PLC_Write_Array.append(D_number & 0xFF);
    Omron_PLC_Write_Array +=[0x00,0x00,0x04]
    for index in range(4):
        Omron_PLC_Write_Array.append(D_value[index] >> 8);
        Omron_PLC_Write_Array.append(D_value[index] & 0xFF);
 
    sumcheck = sum(Omron_PLC_Write_Array)
    sumHi = ((sumcheck >> 8) & 0xFF)
    sumLo = (sumcheck & 0xFF)
    Omron_PLC_Write_Array.append(sumHi)
    Omron_PLC_Write_Array.append(sumLo)
    res = Omron_PLC_USB_Write(Omron_PLC_Write_Array,19)
    if len(res)==19:
        val1=res.pop()
        val2=res.pop()
        sum1 = val2<<8 | val1
        sum2 = sum(res)
        if sum1==sum2:
            rdm2= res.pop(12)
            if rdm==rdm2:
                revc = [171, 0, 16, 192, 0, 2, 0, 0, 251, 0, 0, 0, 1, 2, 0, 0]
                if res==revc:
                    return 1
                else:
                    return 0
            else:
                return 0
        else:
            return 0
    else:
        return 0
 
 
def RFID_ID_to_PLC(RFID_ID):
    v = [0,0,0,0]
    for i in range(3):
        v[i]=RFID_ID[i]
         
    c = Omron_PLC_D_Write_4W(0,v)
    if not c:
        return
 
    print v
 
 
Omron_PLC_Run_Mode()
 
 
while(1):
    try:
        data = []
        with open('RFID.txt','r') as myfile:
            data = myfile.read().split()
 
        #print data
        RFID_ID =[]
        for i in range(0,len(data)):
            RFID_ID.append(int(data[i]))
         
        #print RFID_ID
        if len(RFID_ID)==3:
            RFID_ID_to_PLC(RFID_ID)
         
    except usb.core.USBError as e:
        #print e.strerror
        continue
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.11.2018, 17:47
Ответы с готовыми решениями:

RFID reader PLC Omron CP1L
Есть в наличии обычный Китайский RFID reader for Windows. Есть плк CP1L. Надо как то заставить принимать ПЛК сигнал с reader'a. Были...

Визуализация в программе CX-ONE для OMRON PLC
Здравствуйте! Как делать визуализацию в программе CX-ONE для OMRON?. Может какие-то книжки есть , или видео какое-нибудь, гайды. Чтобы...

С чего начать PLC OMRON, Mitsubishi
Приветствую всех. Ситуация конечно интересная, но надо с ней разобраться. На работе предложили пойти учеником к инженеру по наладке ПЛК....

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.11.2018, 17:47
Помогаю со студенческими работами здесь

[OMRON CPM 2A] Программа управления лифтовым подъемником на языке LD
Разработать программу управления лифтовым подъемником на базе ПЛК «OMRON CPM 2A» (язык программирования LD).

Написать программу на языке Python
Написать программу на языке Python для решения задачи (в трех таблицах) согласно варианту. В качестве исходных данных взять три набора...

Написать программу на языке python
Определить товар с наибольшим количеством на Состав и вычислить его суммарную стоимость При выполнении лабораторной работы, использовать...

Написать программу на языке Python
Написать программу на языке Python

нужно исправить программу на языке программирования C#
Помогите исправить программу, пожалуйста. Выдает 6 одинаковых ошибок: Ошибка 1 Оператор &quot;-&quot; не может применяться к операндам...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru