Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Korta ner koden...

Postades av 2002-06-23 12:54:07 - Jörgen Fransson, i forum visual basic - allmänt, Tråden har 15 Kommentarer och lästs av 586 personer

Någon som har ett förslag på hur man kan göra följande kod kortare?
Tanken är att föra över arrayen ut på enskilda variabler.

MW0 osv är fasta variabler som ej kan göras om till en array...


Public MW0, MW1, MW2... MW100 As Long

Dim arrData(0 to 100) As Long

MW0 = arrData(0)
MW1 = arrData(1)
MW2 = arrData(2)
...
MW100 = arrData(100)

End Sub

Mvh Frasse


Svara

Sv: Korta ner koden...

Postades av 2002-06-23 13:55:37 - Sven Åke Persson

Hej
En fråga som du inte gillar , men varför i hela fridens namn
skall man göra det ??. Synpunkter

Public MW0, MW1, MW2, MW100 As Long
Nu är det bara MW100 som blir As Long de övriga blir Variant.

Dim arrData(0 to 100) As Long .kan skrivas
Dim arrData(100) As Long

Du jar ju 100 enkilda variable. Döp om arrayen till MW(100)
nu kan du plocka de enskilda värdena med
tex. MsgBox MW(63)

Skulle inte det funka ??
undra mvh
Sven


Svara

Sv: Korta ner koden...

Postades av 2002-06-23 14:02:00 - Rasmus Hörstedt

sen kan du bara sätta dom i en loop eler for slinga så blir det fin fint


Dim nummer as integer

nummer=0
Do until nummer>100
MW(nummer)=arrData(nummer)
nummer=nummer+1
Loop


gör du som ovan så blir MW(**) den motsvarande på arrData(**), mycket praktiskt.

Morron kodning... mums! // R-mus


Svara

Sv: Korta ner koden...

Postades av 2002-06-23 14:05:07 - Jörgen Fransson

Hej Sven.

Jo mitt problem är som sagt att MW0 t.o.m MW100 är 16-bitars register i ett PLC. Dessa register i PLC'n kan jag inte behandla som array utan endast som enskilda variabler. Jag valde att skriva mitt program baserat på arrayer och det fungerar alldeles utmärkt förutom då jag ska läsa eller skriva arrayen mot PLC. Och den enda metod som jag har kommit på är att flytta varje register för sig som jag har gjort nedan:

Det hade varit bra om man hade kunnat hitta på något som hade räknat upp min MW-variabel utan att göra den till en array...

'För över arrayen till register i PLC´n
MW0 = arrReg(0)
MW1 = arrReg(1)
MW2 = arrReg(2)
MW3 = arrReg(3)
MW4 = arrReg(4)
MW5 = arrReg(5)
MW6 = arrReg(6)
MW7 = arrReg(7)
MW8 = arrReg(8)
MW9 = arrReg(9)
MW10 = arrReg(10)
MW11 = arrReg(11)
MW12 = arrReg(12)
MW13 = arrReg(13)
MW14 = arrReg(14)
MW15 = arrReg(15)
MW16 = arrReg(16)
MW17 = arrReg(17)
MW18 = arrReg(18)
MW19 = arrReg(19)
MW20 = arrReg(20)
MW21 = arrReg(21)
MW22 = arrReg(22)
MW23 = arrReg(23)
MW24 = arrReg(24)
MW25 = arrReg(25)
MW26 = arrReg(26)
MW27 = arrReg(27)
MW28 = arrReg(28)
MW29 = arrReg(29)
MW30 = arrReg(30)
osv...

Mvh Frasse


Svara

Sv: Korta ner koden...

Postades av 2002-06-23 14:14:03 - Rasmus Hörstedt

Tror jag vet vad du menar... ska testa att skriva ett exempl.

BRB // R-mus


Svara

Sv: Korta ner koden...

Postades av 2002-06-23 14:37:00 - Rasmus Hörstedt

Nej tyvärr jag vete f*n hur man ska bära sig åt om man inte kan göra MW till array... vore mycket lättare.

Får se om nån annan kan lösa det // R-mus


Svara

Sv: Korta ner koden...

Postades av 2002-06-23 15:51:21 - Sven Åke Persson

Hej igen
Okidoki nu förstår jag.
Du kan använda denna kod för att läsa in i en txtfil
Sedan klistrar du in texten på resp plats.
DefLng M gör att alla variabler som börjar på M
med automatik blir Long.

Det ser tokigt ut i subarna men det gör väl inte så mycket
det kommer att funka snabbt och bra.

mvh
Sven
Option Explicit
DefLng M

Private Sub Command1_Click()
Dim FileNum As Long, i As Long
FileNum = FreeFile
Open "C:\vbkod.txt" For Output As #FileNum
Print #FileNum, "Option Explicit"
Print #FileNum, "DefLng M"
For i = 0 To 100
Print #FileNum, "Public "; "MW"; CStr(i)
Next i
Print #FileNum, "Public "; "MarrReg(100)"
Print #FileNum, ""
For i = 0 To 100
Print #FileNum, "MW"; CStr(i); " = MarrReg("; CStr(i); ")"
Next i
Close #FileNum
End Sub
DS



Svara

Sv: Korta ner koden...

Postades av 2002-06-23 20:48:04 - Peter Holm

Hej...

Nu måste jag hacka på SvenPon, men det jag skall hacka om kanske är
fel, då jag tar detta ur minnet utan att kontrollera. Så JA jag är beredd på
att få pajkastning tillbaka.

>Dim arrData(0 to 100) As Long .kan skrivas
>Dim arrData(100) As Long

Har för mig att Dim arrData skapar en array från 1 till 100 och inte 0 till 100.
Arrayen 0-100 får man om man explicit skriver Option Base 0 Annars
är det Option Base 1 som är default.

För övrigt vill jag som luttrad C-programmerare påpeka att 0-100 är
101 index. I C deklarerar man arrayer från index 0 och framåt och detta
gör alltid saker mycket tydligare och lättare att förstå.

/[peter.h]



Svara

Sv: Korta ner koden...

Postades av 2002-06-23 21:14:26 - Sven Åke Persson

Hej
Nej du har fel. Arrayer börjar default på 0. Option Base 1
bör vi glömma bara strul.
Du har en poäng på 100. Dvs det kommer att bli 101 fack.
Jag brukar bjuda på fack 0 om jag behöver börja på 1

Annrs så får du hacka hur mycket du vill.
>I C deklarerar man arrayer från index 0 och framåt och detta
gör alltid saker mycket tydligare och lättare att förstå.
>"mycket tydligare och lättare att förstå."

Helt och hållet en kapacitetsfråga. tex så finns det vissa
här som inte kan acceptera att Enter har KeyAscii 13
det blir för svårt när det handlar om siffror. :-)

mvh
Sven


Svara

Sv: Korta ner koden...

Postades av 2002-06-23 21:34:33 - Andreas Hillqvist

Om detta inlägg gäller VB så har jag lite fråger.
* Har du deklarerat de globala variablerna MW0...MW100?
* Måste du använda dessa. Är det en dll eller modul som du skickar dem till?
* Kan du skicka med lite mer av din kod. Så ve ser hur du använder variablerna.


Svara

Sv: Korta ner koden...

Postades av 2002-06-23 23:01:28 - Jörgen Fransson

Jag har skickat ett mail med koden så kanske du förstår bättre...


Svara

Sv: Korta ner koden...

Postades av 2002-06-23 23:05:21 - Jörgen Fransson

För er andra så kommer koden här i ett nerbantat format...

Option Explicit
'Deklarera alla 16-bitars PLC'registrerna
Public MW0, MW1, MW2, MW3, MW4, MW5, MW6, MW7, MW8, MW9, MW10, MW11, MW12, MW13, MW14, MW15, MW16, MW17, MW18, MW19, MW20, MW21, MW22, MW23, MW24, MW25, MW26, MW27, MW28, MW29, MW30, MW31, MW32, MW33, MW34, MW35, MW36, MW37, MW38, MW39, MW40, MW41, MW42, MW43, MW44, MW45, MW46, MW47, MW48, MW49 As Long
Public MW50, MW51, MW52, MW53, MW54, MW55, MW56, MW57, MW58, MW59, MW60, MW61, MW62, MW63, MW64, MW65, MW66, MW67, MW68, MW69, MW70, MW71, MW72, MW73, MW74, MW75, MW76, MW77, MW78, MW79, MW80, MW81, MW82, MW83, MW84, MW85, MW86, MW87, MW88, MW89, MW90, MW91, MW92, MW93, MW94, MW95, MW96, MW97, MW98, MW99 As Long
Public MW100, MW101, MW102, MW103, MW104, MW105, MW106, MW107, MW108, MW109, MW110, MW111, MW112, MW113, MW114, MW115, MW116, MW117, MW118, MW119, MW120, MW121, MW122, MW123, MW124, MW125, MW126, MW127 As Long

'Gemensam Subrutin för att omvandla en sträng tecken, max 254st, till 16-bitars Register
Private Sub SkrivTillPlcReg()

'Deklarera variabler
Dim Reg16Bit As Long
Dim arrReg(0 To 127) As Long
Dim Asci1, Asci2, AntIStr As Byte
Dim x, w As Integer

'Om det finns något i rutan så utför beräkningen
If txtExport.Text <> "" Then

'Ta reda på hur lång texten är
AntIStr = Len(txtExport.Text)

'Om antalet är ojämnt lägg till ett tecken sist i strängen för att få den jämn
If AntIStr Mod 2 <> 0 Then
txtExport.Text = txtExport.Text & Chr(160)
End If

'Uppdaterar antalet tecken i strängen
AntIStr = Len(txtExport.Text)

'Skriv in i första registret hur många par tecken strängen består av
arrReg(0) = (AntIStr / 2)

'Plocka ut två tecken ur strängen i taget
For x = 1 To (AntIStr - 1) Step 2

'Nollställ det temporära registret Reg16Bit
Reg16Bit = 0

'Tilldela Asci1 och Asci2 värdet för Tecken 1 och Tecken 2
Asci1 = Asc(Mid(txtExport.Text, x, 1))
Asci2 = Asc(Mid(txtExport.Text, x + 1, 1))

'Lägg ut två tecken i varje 16-bitars arrReg
For w = 0 To 7

'Utmaskning av bit från första tecknet jämför sedan
If (Asci1 And 2 ^ w) = 2 ^ w Then

'Om biten är ett så räkna upp Reg16Bit med bitens värde
Reg16Bit = Reg16Bit + (1 * 2 ^ w)

End If

'Utmaskning av bit från andra tecknet jämför sedan
If (Asci2 And 2 ^ w) = 2 ^ w Then

'Om biten är ett så räkna upp Reg16Bit med bitens värde
Reg16Bit = Reg16Bit + (1 * 2 ^ (w + 8))

End If


Next w

'Skriv värdet av de sammanslagna Byten till arrReg()
arrReg((x + 1) / 2) = Reg16Bit

Next x

'För över arrayen till register i PLC´n
MW0 = arrReg(0): MW1 = arrReg(1): MW2 = arrReg(2): MW3 = arrReg(3): MW4 = arrReg(4): MW5 = arrReg(5): MW6 = arrReg(6): MW7 = arrReg(7): MW8 = arrReg(8): MW9 = arrReg(9): MW10 = arrReg(10): MW11 = arrReg(11): MW12 = arrReg(12): MW13 = arrReg(13): MW14 = arrReg(14): MW15 = arrReg(15): MW16 = arrReg(16): MW17 = arrReg(17): MW18 = arrReg(18): MW19 = arrReg(19): MW20 = arrReg(20): MW21 = arrReg(21): MW22 = arrReg(22): MW23 = arrReg(23): MW24 = arrReg(24): MW25 = arrReg(25): MW26 = arrReg(26): MW27 = arrReg(27): MW28 = arrReg(28): MW29 = arrReg(29): MW30 = arrReg(30): MW31 = arrReg(31):
MW32 = arrReg(32): MW33 = arrReg(33): MW34 = arrReg(34): MW35 = arrReg(35): MW36 = arrReg(36): MW37 = arrReg(37): MW38 = arrReg(38): MW39 = arrReg(39): MW40 = arrReg(40): MW41 = arrReg(41): MW42 = arrReg(42): MW43 = arrReg(43): MW44 = arrReg(44): MW45 = arrReg(45): MW46 = arrReg(46): MW47 = arrReg(47): MW48 = arrReg(48): MW49 = arrReg(49): MW50 = arrReg(50): MW51 = arrReg(51): MW52 = arrReg(52): MW53 = arrReg(53): MW54 = arrReg(54): MW55 = arrReg(55): MW56 = arrReg(56): MW57 = arrReg(57): MW58 = arrReg(58): MW59 = arrReg(59): MW60 = arrReg(60): MW61 = arrReg(61): MW62 = arrReg(62): MW63 = arrReg(63):
MW64 = arrReg(64): MW65 = arrReg(65): MW66 = arrReg(66): MW67 = arrReg(67): MW68 = arrReg(68): MW69 = arrReg(69): MW70 = arrReg(70): MW71 = arrReg(71): MW72 = arrReg(72): MW73 = arrReg(73): MW74 = arrReg(74): MW75 = arrReg(75): MW76 = arrReg(76): MW77 = arrReg(77): MW78 = arrReg(78): MW79 = arrReg(79): MW80 = arrReg(80): MW81 = arrReg(81): MW82 = arrReg(82): MW83 = arrReg(83): MW84 = arrReg(84): MW85 = arrReg(85): MW86 = arrReg(86): MW87 = arrReg(87): MW88 = arrReg(88): MW89 = arrReg(89): MW90 = arrReg(90): MW91 = arrReg(91): MW92 = arrReg(92): MW93 = arrReg(93): MW94 = arrReg(94): MW95 = arrReg(95):
MW96 = arrReg(96): MW97 = arrReg(97): MW98 = arrReg(98): MW99 = arrReg(99): MW100 = arrReg(100): MW101 = arrReg(101): MW102 = arrReg(102): MW103 = arrReg(103): MW104 = arrReg(104): MW105 = arrReg(105): MW106 = arrReg(106): MW107 = arrReg(107): MW108 = arrReg(108): MW109 = arrReg(109): MW110 = arrReg(110): MW111 = arrReg(111): MW112 = arrReg(112): MW113 = arrReg(113): MW114 = arrReg(114): MW115 = arrReg(115): MW116 = arrReg(116): MW117 = arrReg(117): MW118 = arrReg(118): MW119 = arrReg(119): MW120 = arrReg(120): MW121 = arrReg(121): MW122 = arrReg(122): MW123 = arrReg(123): MW124 = arrReg(124): MW125 = arrReg(125): MW126 = arrReg(126): MW127 = arrReg(127):

End If


Svara

Sv: Korta ner koden...

Postades av 2002-06-23 23:50:44 - Sven Åke Persson

Hej igen
Om du tror att dina MW är av typ Long så är det fel
det är bara den sista i kedjan som blir Long
De övriga blir Variant.Sen tycker jag att det är ganska
meningslöst att svara när du ändå inte läser. Se DefLng M

Usch vilket problem.Måste gå att lösa på annat vis ?? ??

funderande
Sven


Svara

Sv: Korta ner koden...

Postades av 2002-06-24 14:30:03 - Johan Lewis-Jonsson

Om det gäller att skicka och ta emot data från PLC:er brukar OPC vara det som gäller. Du har inga sådana här problem där.
Om det rör sig om en specialkontroll/dll/osv borde det fortfarande att gå att använda array och det borde vara där problemet skall lösas. Kanske bättre att beskriva hur du pratar med PLC:en (kan nog vara rätt generellt om du inte vill tala om vilken/till vad ect)




Svara

Sv: Korta ner koden...

Postades av 2002-06-26 17:23:52 - Jörgen Fransson

Jo, Jag har en OPC-server som lanseras av Schnieder Electric som heter ÓFS som sedan kommunicerar med ett Scada-system som heter VijeoLook och i VijeoLook finns VBA. Men jag kan inte kommunicera med PLC'n via arrayer utan endast via enskilda register. Jag kan inte svära på detta men det verkar vara så iaf... Så det är nog dött lopp...


Svara

Sv: Korta ner koden...

Postades av 2002-06-26 18:36:50 - Per Hultqvist

Hej,

Du kan använda den inbyggda funktionen CallByName för att anropa funktioner baserat på funktionens namn. Snyggast blir att lägga alla dessa variabler i en klass, det går bra att deklarera dom som publika variabler (fields) i st f publika properties eftersom vb internt gör om publika fält till properties. Alltså, en klass clsData :

<code>
' Här börjar klassen clsData
Public MW0 as long
Public MW1 as long
' ... o s v
' Här slutar klassen clsData
<code>

Anropa sedan variablerna med :

<code>
' Skapa en instans av clsData
Dim obData as clsData

set obData=new clsData

' För att hämta värdet i element nummer 5 :
MsgBox CallByName (obData, "MW" & Format(5), VbGet)

' För att sätta värdet i element nummer 5 till 1234 :
CallByName obData,"MW" & format(5),vbLet,1234
<code>

/Per Hultqvist


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 607
27 953
271 709
539
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies