我最近读了很多关于它的文章,但是对于一个问题我不能再多说了。它是关于从C脚本到python3.x的变量交换
对于C脚本: 我正在评估IEC61850-9-2采样值(SV),并使用libiec61850c库(https://github.com/mz-automation/libiec61850),它解释协议。SV每周期发送80个样本(正弦),这意味着每0.25毫秒就有一个新样本到达,需要处理。所以我的剧本必须要快。在
目前我使用下面的C脚本,它评估协议并打印示例。 我希望这是可以理解的,我的意见是充分的:
#include "hal_thread.h"
#include <signal.h>
#include <stdio.h>
#include "sv_subscriber.h"
#include <unistd.h>
static bool running = true;
int sample_rate = 80;
double sample[2]= { 0.0 };
void sigint_handler(int signalId)
{
running = 0;
}
/* Callback handler for received SV messages */
static void svUpdateListener (SVSubscriber subscriber, void* parameter, SVSubscriber_ASDU asdu)
{
double val1, val2, val3 = 0;
/* read the INT32 Voltage Values on Byte Number 32 , 40 and 48*/
val1 = (double)SVSubscriber_ASDU_getINT32(asdu, 32)/100;
val2 = (double)SVSubscriber_ASDU_getINT32(asdu, 40)/100;
val3 = (double)SVSubscriber_ASDU_getINT32(asdu, 48)/100;
sample[0] = val1;
sample[1] = val2;
sample[2] = val2;
printf("[%f , %f , %f ]\n", val1, val2, val3);
}
int main(){
/* Creating a SV Receiver and setting Interface to Eth0 */
SVReceiver receiver = SVReceiver_create();
SVReceiver_setInterfaceId(receiver, "eth0");
/* Creating a SV Subscriber, which listens to SV Messages with APPID 4000h */
SVSubscriber subscriber = SVSubscriber_create(NULL, 0x4000);
/* Install a callback handler for the subscriber */
SVSubscriber_setListener(subscriber, svUpdateListener, NULL);
/* Connect the subscriber to the receiver */
SVReceiver_addSubscriber(receiver, subscriber);
/* Start listening to SV messages - starts a new receiver background thread */
SVReceiver_start(receiver);
/* Listens to Strg + C Keyboard Interruptions */
signal(SIGINT, sigint_handler);
/* Endless loop until Keyboard Tnterruption */
while (running){}
/* Stop listening to SV messages */
SVReceiver_stop(receiver);
/* Cleanup and free resources */
SVReceiver_destroy(receiver);
}
现在我想将这些值传递给Python进行进一步分析,并将它们保存为Numpy数组。我通过启动C脚本来解决这个问题子流程.popen读取C脚本的sdtout并将其转换为numpy数组。不幸的是,这个变量太慢了,特别是因为我们可能希望以后每个周期增加到256个样本。在
Python:
^{pr2}$因此,有没有一种更有效的方法来发送Python的度量?我已经读过一些关于ctypes的文章,但是callbackhandlerssvupdatelistener(在新的示例到达时触发)是根据libiec61850的一个没有返回的void函数。因此不能将值返回给Python,或者? 赛顿能解决这个问题吗?在
目前没有回答
相关问题 更多 >
编程相关推荐