0 / 0 / 0
Регистрация: 27.10.2017
Сообщений: 17
1

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

25.11.2018, 17:47. Показов 1200. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.11.2018, 17:47
Ответы с готовыми решениями:

RFID reader PLC Omron CP1L
Есть в наличии обычный Китайский RFID reader for Windows. Есть плк CP1L. Надо как то заставить...

Как написать программу в Python'e 3.4.1. на языке Си?
Как написать хотя бы простую программу в Питоне #include &lt;stdio.h&gt; int main (void) { ...

Сформируйте выражение(программу) на языке Python
Сформируйте выражение на языке Python, которое вычисляет сумму цифр трёхзначного целого числа....

Можно ли реализовать такую программу на языке Python
Программа должна делить ip адреса например вот список ip адресов 5.44.216.0-5.44.223.255...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.11.2018, 17:47

Нужно составить программу на языке Python, версии 3x
Нужно написать программу, в которой пользователь вводит последовательность чисел, а на выходе...

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

Написать программу управления насосом производственной канализации. OMRON. CX-One\CX-Programmer
помогите с задачей Написать программу управления насосом производственной канализации. Работа...

Python приложене останавливается с ответом out of memory
В каждой функции все переменные удаляются по завершению функции, а память все равно заканчивается,...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru