timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
beste mensen,
ik heb een K8061 gekocht en ben die nu aan het opbouwen maar ik wil daar men eigen programma voor gaan schrijven maar ik weet niet hoe ik daar aan moet beginnen
ik heb het voorbeeld programma(let op zip) al doorgenomen maar krijg niet echt een indruk over hoe ik zelf moet beginnen
ik heb ervaring in PicBasic en in C voor de microcontroller ik heb de cursus van M$ al doorgenomen maar daar komen deze dingen niet echt in voor.
ik ben in het bezit van de benodigde files aangezien die er bij waren geleverd.
wat raden jullie aan om het programma in te schrijven Visual Basic of Visual C(++) voor eze klus en niet in het algemeen
en waarom?
en wie kan me helpen met een begin aan mijn programma
laat dit aub geen discussie worden over C en Basic en geef aub goed geargumenteerde antwoorden
@mods ik hoop dat dit toegestaan is het betreft hier toch de interface van een hobbyproject
Loopt dit topic de spuigaten uit dan mag deze op slot behoort op dit op GoT thuis mag dit topic van mij ook gelijk dicht.
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
Erik
In order to succeed you must fail, so that you know what not to do the next time.
Ik ben zelf veelvuldig VB gebruiker maar hierbij is het gewoon van wat vind je zelf handiger? Zo'n relaiskaart aansturen heeft niet veel speciale dingen nodig en is ook niet tijd/snelheidskritisch dus het maakt niet zo heelveel uit waarin je het doet. Dus mijn advies is dan ook neem gewoon het softwarepakket waar je jezelf het meest in thuisvoelt.
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
toch maar begonnen en dit maar in C#
nu al snel de eerste foutmelding:
Error 1 The type or namespace name 'K8055D' could not be found
(are you missing a using directive or an assembly reference?
C:\8055tim\8055tim\8055tim\Form1.cs 8 7 8055tim
iemand een idee hoe ik dat moet oplossen?
De oplossing staat in de foutmelding. edit: hmm ik zie dat je helemaal geen .NET library hebt.
[Bericht gewijzigd door madwizard op ]
Ik dacht dat je al een .NET library had die je gebruikte maar vergeten was bij de references toe te voegen. Maar waarschijnlijk heb je helemaal geen library.
In dat geval moet je de functies zelf declareren
Kijk in de header file (.h) naar de functies. Bijvoorbeeld:
VOID __stdcall ReadAnalogChannel(unsigned char CardAddress, unsigned char Channel);Plaats dan in je C# class de functie declaratie:
[DllImport("K8061_c.dll")]
private static extern unsafe void ReadAnalogChannel(byte cardAddress, byte channel);Daarna kun je gewoon de functie aanroepen. Voor de declaraties moet je wel wat types anders neerzetten:
char -> byte
unsigned char -> byte
long -> UInt32
long * -> ref UInt32edit
Even snel wat knip en plakwerk, probeer dit eens:
[DllImport("K8061_c.dll")]
private static extern unsafe UInt32 OpenDevice();
[DllImport("K8061_c.dll")]
private static extern unsafe void CloseDevices();
[DllImport("K8061_c.dll")]
private static extern unsafe void ReadAnalogChannel(byte CardAddress, byte Channel);
[DllImport("K8061_c.dll")]
private static extern unsafe byte PowerGood(byte CardAddress);
[DllImport("K8061_c.dll")]
private static extern unsafe byte Connected(byte CardAddress);
[DllImport("K8061_c.dll")]
private static extern unsafe void ReadVersion(byte CardAddress, ref UInt32 Buffer);
[DllImport("K8061_c.dll")]
private static extern unsafe void ReadAllAnalog(byte CardAddress, ref UInt32 Buffer);
[DllImport("K8061_c.dll")]
private static extern unsafe void OutputAnalogChannel(byte CardAddress, byte Channel, byte Data);
[DllImport("K8061_c.dll")]
private static extern unsafe void OutputAllAnalog(byte CardAddress, ref UInt32 Buffer);
[DllImport("K8061_c.dll")]
private static extern unsafe void ClearAnalogChannel(byte CardAddress, byte Channel);
[DllImport("K8061_c.dll")]
private static extern unsafe void SetAllAnalog(byte CardAddress);
[DllImport("K8061_c.dll")]
private static extern unsafe void ClearAllAnalog(byte CardAddress);
[DllImport("K8061_c.dll")]
private static extern unsafe void SetAnalogChannel(byte CardAddress, byte Channel);
[DllImport("K8061_c.dll")]
private static extern unsafe void OutputAllDigital(byte CardAddress, byte Data);
[DllImport("K8061_c.dll")]
private static extern unsafe void ClearDigitalChannel(byte CardAddress, byte Channel);
[DllImport("K8061_c.dll")]
private static extern unsafe void ClearAllDigital(byte CardAddress);
[DllImport("K8061_c.dll")]
private static extern unsafe void SetDigitalChannel(byte CardAddress, byte Channel);
[DllImport("K8061_c.dll")]
private static extern unsafe void SetAllDigital(byte CardAddress);
[DllImport("K8061_c.dll")]
private static extern unsafe bool ReadDigitalChannel(byte CardAddress, byte Channel);
[DllImport("K8061_c.dll")]
private static extern unsafe byte ReadAllDigital(byte CardAddress);
[DllImport("K8061_c.dll")]
private static extern unsafe void OutputPWM(byte CardAddress, UInt32 Data);
[DllImport("K8061_c.dll")]
private static extern unsafe void Version();
[DllImport("K8061_c.dll")]
private static extern unsafe byte ReadBackDigitalOut(byte CardAddress);
[DllImport("K8061_c.dll")]
private static extern unsafe void ReadBackAnalogOut(byte CardAddress, ref UInt32 Buffer);
[DllImport("K8061_c.dll")]
private static extern unsafe UInt32 ReadBackPWMOut(byte CardAddress);Bovenin:
using System.Runtime.InteropServices;En bij je project settings onder build 'allow unsafe code' aanzetten.
[Bericht gewijzigd door madwizard op ]
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using K8055D;
namespace _055tim
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
opendevice(3);
SetDigitalChannel(1);
closedevice(3);
}
}
}
dit is wat er op mijn schermpje staat als source en ja het zal wel niet werken maar daarom moet ik hetook leren
Op 1 april 2007 15:55:46 schreef timmie:
using K8055D;
Hiermee geef je aan dat er een namespace K8055D is. Die heb je niet zomaar, die moet wel bestaan natuurlijk.
opendevice(3);
SetDigitalChannel(1);
closedevice(3);
Deze functies bestaan nu helemaal niet, maar hoe dan ook is C# hoofdlettergevoelig, dus OpenDevice ipv opendevice etc.
Voor de rest zie mijn edit in m'n vorige post.
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
het eenvoudigste is gewoon die SLN file eens te openen. gans dat project laadt dan. en dan kan je zien hoe het werkt.
je zult in ieder geval een reference moeten toevoegen naar die DLL. ( hopelijk is dat een .NET DLL en geen ouwbollig ding. anders ga je prototypes moeten binnhalen.
nuja als je die SLN opent zul je zien hoe het ding werkt.
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
daar was ik ondertussen achtergekomen MW met jou edit in men programma krijg ik een nest met de volgende foutmeldingen:
Error 4 Expected class, delegate, enum, interface, or struct
C:\8055tim\8055tim\8055tim\Form1.cs 14 30 8055tim
sorry dat ik zo vervleend ben
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
free ik ben niet bepaald deticated C gebruiker
ik heb het voorvbeeld al meerdere malen bekeken maar snap er de ballen niet van
Zet er even bij wat er op die regel staat dan, anders is het gokken voor ons.
De sln (solution file) is voor C++.NET. De DLL is geen .NET DLL maar een normale DLL (met stdcall conventie). Dat kan nog altijd door meer software gebruikt worden dan een .NET DLL.
Maar prototypes zijn doodeenvoudig, wat ik postte is alles wat je nodig hebt.
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
private static extern unsafe void ReadAnalogChannel(byte CardAddress, byte Channel);op heel de Edit die je me gaf krijg ik de zelfde foutmelding:s
Wel die DllImport erbij gezet? Nouja hoe dan ook is het nog beter om die functies in een aparte class te zetten. Maak een K8055D.cs bestand aan (zorg dat ie in je project komt) en kopieer dit letterlijk:
using System;
using System.Runtime.InteropServices;
namespace _055tim
{
class K8055D
{
[DllImport("K8061_c.dll")]
public static extern unsafe UInt32 OpenDevice();
[DllImport("K8061_c.dll")]
public static extern unsafe void CloseDevices();
[DllImport("K8061_c.dll")]
public static extern unsafe void ReadAnalogChannel(byte CardAddress, byte Channel);
[DllImport("K8061_c.dll")]
public static extern unsafe byte PowerGood(byte CardAddress);
[DllImport("K8061_c.dll")]
public static extern unsafe byte Connected(byte CardAddress);
[DllImport("K8061_c.dll")]
public static extern unsafe void ReadVersion(byte CardAddress, ref UInt32 Buffer);
[DllImport("K8061_c.dll")]
public static extern unsafe void ReadAllAnalog(byte CardAddress, ref UInt32 Buffer);
[DllImport("K8061_c.dll")]
public static extern unsafe void OutputAnalogChannel(byte CardAddress, byte Channel, byte Data);
[DllImport("K8061_c.dll")]
public static extern unsafe void OutputAllAnalog(byte CardAddress, ref UInt32 Buffer);
[DllImport("K8061_c.dll")]
public static extern unsafe void ClearAnalogChannel(byte CardAddress, byte Channel);
[DllImport("K8061_c.dll")]
public static extern unsafe void SetAllAnalog(byte CardAddress);
[DllImport("K8061_c.dll")]
public static extern unsafe void ClearAllAnalog(byte CardAddress);
[DllImport("K8061_c.dll")]
public static extern unsafe void SetAnalogChannel(byte CardAddress, byte Channel);
[DllImport("K8061_c.dll")]
public static extern unsafe void OutputAllDigital(byte CardAddress, byte Data);
[DllImport("K8061_c.dll")]
public static extern unsafe void ClearDigitalChannel(byte CardAddress, byte Channel);
[DllImport("K8061_c.dll")]
public static extern unsafe void ClearAllDigital(byte CardAddress);
[DllImport("K8061_c.dll")]
public static extern unsafe void SetDigitalChannel(byte CardAddress, byte Channel);
[DllImport("K8061_c.dll")]
public static extern unsafe void SetAllDigital(byte CardAddress);
[DllImport("K8061_c.dll")]
public static extern unsafe bool ReadDigitalChannel(byte CardAddress, byte Channel);
[DllImport("K8061_c.dll")]
public static extern unsafe byte ReadAllDigital(byte CardAddress);
[DllImport("K8061_c.dll")]
public static extern unsafe void OutputPWM(byte CardAddress, UInt32 Data);
[DllImport("K8061_c.dll")]
public static extern unsafe void Version();
[DllImport("K8061_c.dll")]
public static extern unsafe byte ReadBackDigitalOut(byte CardAddress);
[DllImport("K8061_c.dll")]
public static extern unsafe void ReadBackAnalogOut(byte CardAddress, ref UInt32 Buffer);
[DllImport("K8061_c.dll")]
public static extern unsafe UInt32 ReadBackPWMOut(byte CardAddress);
}
}In je hoofdprogramma kun je de functies dan zo gebruiken:
K8055D.Version();timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
jep dat had ik wel gedaan
oke ik heb nu een CSfile aangemaakt binnen het project met jou source
ik zal eens kijken wat dat doet
De functies met 'ref UInt32' kunnen trouwens fout zijn hoor, waarschijnlijk moeten dat arrays worden. Als je die nodig hebt kan ik je er wel mee helpen maar haal ze anders gewoon maar weg.
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
nee die doen het nu wel madwizard
nog een laatste probleem
ik krijg bij deze zin:
K8055D.CloseDevices;
deze foutmelding:
Error 1 Only assignment, call, increment, decrement, and new object expressions can be used as a statement C:\8055tim\8055tim\8055tim\Form1.cs 23 13 8055tim
[Bericht gewijzigd door timmie op ]
Op 1 april 2007 16:38:20 schreef timmie:
nee die doen het nu wel madwizard
Nee het zal fout gaan zodra je ze aanroept. Misschien merk je het niet dan maar in ieder geval raakt je geheugen corrupt. Waarschijnlij kun je het oplossen door van 'ref UInt32' '[Out] UInt32[]' te maken.
nog een laatste probleem
ik krijg bij deze zin:
K8055D.CloseDevices;
Haakjes vergeten:
K8055D.CloseDevices();Maar dit is wel heel erg basis C#, misschien kun je je beter eerst wat meer in C# verdiepen.
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
stomme fout
ja ik weet het maar heb veel in basic voor µC geprogrammeerd maar moet overstappen naar C en dan vergeet je dat soort dingen nog weleens
sorry voor de overlast
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
nog een stomme vraag waarom maak je gebruik van de K8061_c.dll? en niet van de K8055D.dll? het zal aan mij liggen maar dacht zal het ff navragen.
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
das echt stom ik zit in de verkeerde manual te lezen|:-(
edit
bedankt voor het vele geduld madwizard maar het werkt ik had de 8055 aangesloten omdat ik daar een prog voor moest schrijven maar die communicatie is anders gelukkig werkt het wel met de 8061
[Bericht gewijzigd door timmie op ]